加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

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

发布时间:2019-04-19 08:46:29 所属栏目:业界 来源:博客园
导读: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)法

(编辑:湖南网)

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

热点阅读