HTTP负载均衡简单实现

在互联网应用中,负载均衡技术应用非常广泛,常用的有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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值