加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

几种简单的负载均衡算法及其Java代码实现

发布时间:2019-04-13 06:20:40 所属栏目:外闻 来源:博客园
导读:副标题#e# 1.什么是负载均衡 负载均衡,英文 名称为Load Balance,指由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。通过某种 负载分担技术,将外部发送来的请求均匀分配到对称

源地址哈希算法的缺点在于:除非集群中服务器的非常稳定,基本不会上下线,否则一旦有服务器上线、下线,那么通过源地址哈希算法路由到的服务器是服务器上线、下线前路由到的服务器的概率非常低,如果是session则取不到session,如果是缓存则可能引发"雪崩"。

05.加权轮询(Weight Round Robin)法

不同的服务器可能机器配置和当前系统的负载并不相同,因此它们的抗压能力也不尽相 同,给配置高、负载低的机器配置更高的权重,让其处理更多的请求,而低配置、高负载的机器,则给其分配较低的权重,降低其系统负载。加权轮询法可以很好地 处理这一问题,并将请求顺序按照权重分配到后端。加权轮询法的代码实现大致如下:

  1. public class WeightRoundRobin 
  2.     private static Integer pos; 
  3.  
  4.     public static String getServer() 
  5.     { 
  6.         // 重建一个Map,避免服务器的上下线导致的并发问题 
  7.         Map<String, Integer> serverMap =  
  8.                 new HashMap<String, Integer>(); 
  9.         serverMap.putAll(IpMap.serverWeightMap); 
  10.  
  11.         // 取得Ip地址List 
  12.         Set<String> keySet = serverMap.keySet(); 
  13.         Iterator<String> iterator = keySet.iterator(); 
  14.  
  15.         List<String> serverList = new ArrayList<String>(); 
  16.         while (iterator.hasNext()) 
  17.         { 
  18.             String server = iterator.next(); 
  19.             int weight = serverMap.get(server); 
  20.             for (int i = 0; i < weight; i++) 
  21.                 serverList.add(server); 
  22.         } 
  23.  
  24.         String server = null; 
  25.         synchronized (pos) 
  26.         { 
  27.             if (pos > serverList.size()) 
  28.                 pos = 0; 
  29.             server = serverList.get(pos); 
  30.             pos ++; 
  31.         } 
  32.  
  33.         return server; 
  34.     } 

与轮询法类似,只是在获取服务器地址之前增加了一段权重计算的代码,根据权重的大小,将地址重复地增加到服务器地址列表中,权重越大,该服务器每轮所获得的请求数量越多。

06.加权随机(Weight Random)法

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读