HTTP负载均衡简单实现

来源:互联网 发布:vip域名为什么不能备案 编辑:程序博客网 时间:2024/05/17 01:14

在互联网应用中,负载均衡技术应用非常广泛,常用的有LVS,nginx,haproxy,这些技术都已经非常成熟和稳定了。


然而随着如hadoop之类的分布式系统的流行,这些系统都在内部实现负载均衡功能而不依赖外部负载均衡设备,例如SolrCloud内部就实现了一个简单的轮询负载均衡逻辑,梳理如下:

  1. 设置两个数组,aliveServers存储正常服务,zombieServers存储异常服务。
  2. 启动独立线程周期性检测zombieServers中的服务,如果恢复正常,将其转移至aliveServers中。
  3. 在集群处理正常请求时,遍历请求aliveServers中的host,如果请求失败,请求下一个host,直至请求成功或者遍历完aliveServer,将请求失败的host保存至zombieServer并且更新aliveServer。如果遍历完aliveServer仍没有正常服务,可以再遍历一次zombieServer,因为之前的失败可能是因为网络突然的不稳定导致,也可能检测周期还没到,而实际上服务已经恢复。可按照如下逻辑选择后端服务,maxTries是aliveServers大小,counter每访问一次后端服务,计数一次
    for (int attempts=0; attempts<maxTries; attempts++) {      int count = counter.incrementAndGet();            ServerWrapper wrapper = serverList[count % serverList.length];

  4. 在更新aliveServers、zombieServers注意同步问题。
  5. 参考实现:http://search-lucene.com/c/Solr:/solrj/src/java/org/apache/solr/client/solrj/impl/LBHttpSolrServer.java













0 0
原创粉丝点击