设为首页 加入收藏

TOP

面向服务的体系架构 SOA(二) --- 服务的路由和负载均衡(二)
2019-09-17 18:52:49 】 浏览:53
Tags:面向 服务 体系 架构 SOA --- 路由 负载 均衡
ize();
11 return serverList.get(pos); 12 }

源地址哈希法可以在服务消费者与服务提供者之间建立有状态的session会话。

4)加权轮询法:

 1     public String getServerIP() {
 2         //新建map,避免出现服务器上线、下线引发的并发问题
 3         Map<String, Integer> serverMap = new HashMap<String, Integer>();
 4         serverMap.putAll(serverWeightMap);
 5         Set<String> keySet = serverMap.keySet();
 6         Iterator<String> iterator = keySet.iterator();
 7         //新建空的服务器列表list
 8         List<String> serverList = new ArrayList<String>();
 9         while(iterator.hasNext()) {
10             String server = iterator.next();
11             Integer weight = serverMap.get(server);
12             //若该服务器的权重为4,则在服务器列表中添加四个该服务器
13             for (int i = 0; i < weight; i++) {
14                 serverList.add(server);
15             }
16         }
17         Integer pos = 0;
18         String server = null;
19         synchronized (pos) {
20             if (pos >= serverList.size()) {
21                 pos = 0;
22             }
23             server = serverList.get(pos);
24             pos++;
25         }
26         return server;
27     }

5)加权随机法:

 1     public String getServerIP() {
 2         //新建map,避免出现服务器上线、下线引发的并发问题
 3         Map<String, Integer> serverMap = new HashMap<String, Integer>();
 4         serverMap.putAll(serverWeightMap);
 5         Set<String> keySet = serverMap.keySet();
 6         Iterator<String> iterator = keySet.iterator();
 7         //新建空的服务器列表list
 8         List<String> serverList = new ArrayList<String>();
 9         while(iterator.hasNext()) {
10             String server = iterator.next();
11             Integer weight = serverMap.get(server);
12             //若该服务器的权重为4,则在服务器列表中添加四个该服务器
13             for (int i = 0; i < weight; i++) {
14                 serverList.add(server);
15             }
16         }
17         
18         Random random = new Random();
19         int pos = random.nextInt(serverList.size());
20         return serverList.get(pos);
21     }

6)最小连接法:

以上算法我们都是为了平均给后端服务器分配工作量,最大程度的提高服务器的利用率,但是实际情况并非一定如此,我们可以从算法实施的角度来看,以后端服务器的视角来观察系统的负载,而非请求发起方来观察。因此,我们需要有其他的算法来实现可供选择,最小连接法变属于此类算法。

最小连接法比较灵活和智能,由于后端服务器的配置不尽相同,对于请求的处理快慢不同,它正是根据后端服务器当前的连接情况动态选取当前积压连接数最少的一台服务器来处理当前请求,尽可能的提高后端服务器的利用效率,将负载合理的分流到每一台机器。

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇java容器类3:set/HastSet/MapSet.. 下一篇JVM内幕:Java虚拟机详解

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目