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轮训算法_负载均衡轮询算法实现疑问相关推荐

  1. 负载均衡轮询算法和服务器性能,SpringCloud-Ribbon负载均衡机制、手写轮询算法

    Ribbon 内置的负载均衡规则 在 com.netflix.loadbalancer 包下有一个接口 IRule,它可以根据特定的算法从服务列表中选取一个要访问的服务,默认使用的是「轮询机制」 Ro ...

  2. 负载均衡轮询算法和服务器性能,负载均衡算法

    对于要实现高性能集群,选择好负载均衡器很重要,同时针对不同的业务场景选择合适的负载均衡算法也是非常重要的. 一.负载均衡算法分类 任务平分类 负载均衡系统将收到的任务平均分配给服务器进行处理,这里的& ...

  3. java轮训算法_负载均衡算法WeightedRoundRobin(加权轮询)简介及算法实现

    Nginx的负载均衡默认算法是加权轮询算法,本文简单介绍算法的逻辑,并给出算法的Java实现版本. 算法简介 有三个节点{a, b, c},他们的权重分别是{a=5, b=1, c=1}.发送7次请求 ...

  4. java random算法_负载均衡--随机算法(Random)

    随机算法是指:从服务器列表中,随机选取一台服务器进行访问.由概率论可以得知,随着客户端调用服务端的次数增多,其实际效果趋近于平均分配请求到服务端的每一台服务器,也就是达到轮询的效果. 一.算法描述 假 ...

  5. Nginx负载均衡轮询访问只会刚开始轮询一次,以后一直访问同一服务器

    参考:https://www.oschina.net/question/3713632_2275297 #负载均衡案例upstream backServer{server 127.0.0.1:8080 ...

  6. java实现加权随机,负载均衡--加权随机算法(Weight Random)

    加权随机法根据服务器的配置和系统的负载,分配不同的权重,按照权重随机请求后端服务器. 一.算法描述 假设有 N 台服务器 S = {S0, S1, S2, -, Sn},权重为 W = {W0, W1 ...

  7. 负载均衡之加权轮询算法

    在介绍加权轮询算法(WeightedRound-Robin)之前,首先介绍一下轮询算法(Round-Robin). 一:轮询算法(Round-Robin) 轮询算法是最简单的一种负载均衡算法.它的原理 ...

  8. 微信红包业务,为什么采用轮询算法?

    目录 前言 基本的负载算法 平滑加权轮询算法 一致性哈希算法 最小活跃数算法 最优响应算法 总结 前言 负载均衡这个概念,几乎在所有支持高可用的技术栈中都存在,例如微服务.分库分表.各大中间件(MQ. ...

  9. 微信红包业务,为什么采用轮询算法?(荣耀典藏版)

    目录 前言 1.基本的负载算法 1.1.轮询算法 1.2.随机算法 1.3.权重算法 2.平滑加权轮询算法 3.一致性哈希算法 3.1.通过其他分发算法实现缓存 3.2.致性哈希核心-哈希环 3.3. ...

最新文章

  1. erlang使用gen_server实现质数服务器(手打代码,还debug了几个错误)
  2. USTC English Club Note20171023(2)
  3. mysql set 常用参数_mysql常见配置参数
  4. 京瓷1020怎么打印自检页_[建筑]喷墨打印机如何打印自检页 详细
  5. java属于什么行业,吐血整理
  6. 《代码整洁之道 Clean Architecture》-读书笔记
  7. 基于zeromq的高性能分布式RPC框架Zerorpc 性能测试
  8. oracle sql列默认值,sql – Oracle:指定对象类型列的默认值
  9. ActiveMQ学习笔记之异常
  10. 【scratch高阶案例教学】scratch斐波那契数列 scratch创意编程 少儿编程 小朋友们也可以完成如此神奇的数列
  11. 我学历低,学软件测试能找到工作吗?
  12. MINIO(一)简介
  13. 中国电信CTWing物联网平台接入指南(一)之开发流程
  14. 使用代理后,雷鸟连接qq邮箱
  15. php必应收录查询api,必应 Web 搜索 API v7.0
  16. Mac 上设置显示器相关参数介绍
  17. django中request对象的属性和方法
  18. Rsync-同步备份服务器脚本
  19. 小米红头数据线接线解析
  20. 【Python Onramp】7. web端可视化:北京地铁数据统计分析实例以及简易Echarts绘图

热门文章

  1. 笔记:安卓App消息处理机制
  2. Objective-C 类和对象
  3. C++11中新特性之:lambda 表达式
  4. c#(6)——数组的应用和二维数组
  5. android小细节
  6. RecyclerView(一)综合使用综述(Android 5.0 新特性)
  7. Android极光推送
  8. JS定时器小应用--设置闹铃
  9. 《老马的职业“鬼”话》 马华兴著
  10. Container 布局容器