源地址哈希算法的缺点在于:除非集群中服务器的非常稳定,基本不会上下线,否则一旦有服务器上线、下线,那么通过源地址哈希算法路由到的服务器是服务器上线、下线前路由到的服务器的概率非常低,如果是session则取不到session,如果是缓存则可能引发"雪崩"。
05.加权轮询(Weight Round Robin)法
不同的服务器可能机器配置和当前系统的负载并不相同,因此它们的抗压能力也不尽相 同,给配置高、负载低的机器配置更高的权重,让其处理更多的请求,而低配置、高负载的机器,则给其分配较低的权重,降低其系统负载。加权轮询法可以很好地 处理这一问题,并将请求顺序按照权重分配到后端。加权轮询法的代码实现大致如下:
- public class WeightRoundRobin
- {
- private static Integer pos;
-
- public static String getServer()
- {
- // 重建一个Map,避免服务器的上下线导致的并发问题
- Map<String, Integer> serverMap =
- new HashMap<String, Integer>();
- serverMap.putAll(IpMap.serverWeightMap);
-
- // 取得Ip地址List
- Set<String> keySet = serverMap.keySet();
- Iterator<String> iterator = keySet.iterator();
-
- List<String> serverList = new ArrayList<String>();
- while (iterator.hasNext())
- {
- String server = iterator.next();
- int weight = serverMap.get(server);
- for (int i = 0; i < weight; i++)
- serverList.add(server);
- }
-
- String server = null;
- synchronized (pos)
- {
- if (pos > serverList.size())
- pos = 0;
- server = serverList.get(pos);
- pos ++;
- }
-
- return server;
- }
- }
与轮询法类似,只是在获取服务器地址之前增加了一段权重计算的代码,根据权重的大小,将地址重复地增加到服务器地址列表中,权重越大,该服务器每轮所获得的请求数量越多。
06.加权随机(Weight Random)法 (编辑:开发网_开封站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|