java轮训算法_负载均衡轮询算法实现疑问
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/* 模拟实现:负载均衡的轮询算法 */
public class RoundRobin {
public static void main(String[] args) {
Map serverWeightMap = new HashMap();
serverWeightMap.put("192.168.0.1", 1);
serverWeightMap.put("192.168.0.2", 2);
serverWeightMap.put("192.168.0.3", 1);
serverWeightMap.put("192.168.0.4", 4);
serverWeightMap.put("192.168.0.5", 3);
serverWeightMap.put("192.168.0.6", 1);
/* 重新创建一个Map,避免由于服务器上线和下线导致的并发问题 */
Map serverMap = new HashMap();
serverMap.putAll(serverWeightMap);
Set keySet = serverMap.keySet();
ArrayList keyList = new ArrayList();
keyList.addAll(keySet);
/* 定义了轮询位置 */
Integer POS = 2;
String currentServer;
synchronized (POS) {
if (POS > keyList.size()) {
POS = 0;
}
currentServer = keyList.get(POS++);
}
System.out.println("current server is : " + currentServer);
}
}
上述代码模拟实现了负载均衡中的轮询算法,但是代码中有这么一段不是很懂。为什么另外还要搞一个map呢?而且就算这样,假如serverWeightMap中有服务器宕机,虽然采用了putAll的复制措施,但是这样可能导致的情况就是,轮询后的server可能是不可用的,因为服务器宕机更新的map,并不是现在的map结构。
/* 重新创建一个Map,避免由于服务器上线和下线导致的并发问题 */
Map serverMap = new HashMap();
serverMap.putAll(serverWeightMap);
java轮训算法_负载均衡轮询算法实现疑问相关推荐
- 负载均衡轮询算法和服务器性能,SpringCloud-Ribbon负载均衡机制、手写轮询算法
Ribbon 内置的负载均衡规则 在 com.netflix.loadbalancer 包下有一个接口 IRule,它可以根据特定的算法从服务列表中选取一个要访问的服务,默认使用的是「轮询机制」 Ro ...
- 负载均衡轮询算法和服务器性能,负载均衡算法
对于要实现高性能集群,选择好负载均衡器很重要,同时针对不同的业务场景选择合适的负载均衡算法也是非常重要的. 一.负载均衡算法分类 任务平分类 负载均衡系统将收到的任务平均分配给服务器进行处理,这里的& ...
- java轮训算法_负载均衡算法WeightedRoundRobin(加权轮询)简介及算法实现
Nginx的负载均衡默认算法是加权轮询算法,本文简单介绍算法的逻辑,并给出算法的Java实现版本. 算法简介 有三个节点{a, b, c},他们的权重分别是{a=5, b=1, c=1}.发送7次请求 ...
- java random算法_负载均衡--随机算法(Random)
随机算法是指:从服务器列表中,随机选取一台服务器进行访问.由概率论可以得知,随着客户端调用服务端的次数增多,其实际效果趋近于平均分配请求到服务端的每一台服务器,也就是达到轮询的效果. 一.算法描述 假 ...
- Nginx负载均衡轮询访问只会刚开始轮询一次,以后一直访问同一服务器
参考:https://www.oschina.net/question/3713632_2275297 #负载均衡案例upstream backServer{server 127.0.0.1:8080 ...
- java实现加权随机,负载均衡--加权随机算法(Weight Random)
加权随机法根据服务器的配置和系统的负载,分配不同的权重,按照权重随机请求后端服务器. 一.算法描述 假设有 N 台服务器 S = {S0, S1, S2, -, Sn},权重为 W = {W0, W1 ...
- 负载均衡之加权轮询算法
在介绍加权轮询算法(WeightedRound-Robin)之前,首先介绍一下轮询算法(Round-Robin). 一:轮询算法(Round-Robin) 轮询算法是最简单的一种负载均衡算法.它的原理 ...
- 微信红包业务,为什么采用轮询算法?
目录 前言 基本的负载算法 平滑加权轮询算法 一致性哈希算法 最小活跃数算法 最优响应算法 总结 前言 负载均衡这个概念,几乎在所有支持高可用的技术栈中都存在,例如微服务.分库分表.各大中间件(MQ. ...
- 微信红包业务,为什么采用轮询算法?(荣耀典藏版)
目录 前言 1.基本的负载算法 1.1.轮询算法 1.2.随机算法 1.3.权重算法 2.平滑加权轮询算法 3.一致性哈希算法 3.1.通过其他分发算法实现缓存 3.2.致性哈希核心-哈希环 3.3. ...
最新文章
- erlang使用gen_server实现质数服务器(手打代码,还debug了几个错误)
- USTC English Club Note20171023(2)
- mysql set 常用参数_mysql常见配置参数
- 京瓷1020怎么打印自检页_[建筑]喷墨打印机如何打印自检页 详细
- java属于什么行业,吐血整理
- 《代码整洁之道 Clean Architecture》-读书笔记
- 基于zeromq的高性能分布式RPC框架Zerorpc 性能测试
- oracle sql列默认值,sql – Oracle:指定对象类型列的默认值
- ActiveMQ学习笔记之异常
- 【scratch高阶案例教学】scratch斐波那契数列 scratch创意编程 少儿编程 小朋友们也可以完成如此神奇的数列
- 我学历低,学软件测试能找到工作吗?
- MINIO(一)简介
- 中国电信CTWing物联网平台接入指南(一)之开发流程
- 使用代理后,雷鸟连接qq邮箱
- php必应收录查询api,必应 Web 搜索 API v7.0
- Mac 上设置显示器相关参数介绍
- django中request对象的属性和方法
- Rsync-同步备份服务器脚本
- 小米红头数据线接线解析
- 【Python Onramp】7. web端可视化:北京地铁数据统计分析实例以及简易Echarts绘图