有没有好的网站可以学做头发,开发公司甲供材料管理办法,24小时学会网站建设 pdf下载,国外做ppt网站自己定制负载均衡常见策略 一、前言随机#xff08;Random#xff09;策略的实现轮询#xff08;Round Robin#xff09;策略的实现哈希#xff08;Hash#xff09;策略 一、前言
大伙肯定知道#xff0c;在分布式开发中#xff0c;目前使用较多的注册中心有以下几个Random策略的实现轮询Round Robin策略的实现哈希Hash策略 一、前言
大伙肯定知道在分布式开发中目前使用较多的注册中心有以下几个
Apache ZookeeperNetflix EurekaAlibaba Nacos
由于 Zookeeper 在面对高频次的服务注册和发现操作可能会一定的性能损耗等原因搞得现在好多人都不用 Zookeeper 当做注册中心了。但它也提供了强一致性和高可靠性的特性也没有被淘汰。
Zookeeper 本身并没有提供现成的服务发现功能它更专注于分布式协调的能力。所以在使用 Zookeeper 作为注册中心时需要自己在客户端实现服务的发现和负载均衡的逻辑。当然也可以去整合相关组件简化开发过程。
常见的负载均衡有以下三种
随机random策略轮询round robin策略哈希hash策略
下面的话以寻注册中心的服务地址的需求来去对三种策略进行实现。
// 这是对应的策略接口
public interface RouteHandle {// 参数1服务地址集合// 参数2对应的key我这里使用的是userId这个结合自身项目需求String routeServer(ListString values, String key);}随机Random策略的实现
/*** 随机的负载均衡*/
public class RandomHandle implements RouteHandle {Overridepublic String routeServer(ListString values, String key) {int size values.size();if (size 0) {throw new ApplicationException(UserErrorCode.SERVER_NOT_AVAILABLE);}// 去获取一个小于size的索引值// 你可以简单理解随机整型数sizeint index ThreadLocalRandom.current().nextInt(size);return values.get(index);}
}轮询Round Robin策略的实现
轮询策略即将请求次数和总的服务树取模然后得出索引去得到服务信息。
/*** 轮询策略*/
public class LoopHandle implements RouteHandle {private AtomicLong index new AtomicLong();Overridepublic String routeServer(ListString values, String key) {int size values.size();if (size 0) {throw new ApplicationException(UserErrorCode.SERVER_NOT_AVAILABLE);}Long l index.incrementAndGet() % size;if (l 0) {index.set(0L);l 0L;}return values.get(l.intValue());}
}哈希Hash策略
这里指的 Hash 策略一般指的是一次性 Hash 算法实现的策略。传统的 hash 在添加或删除一个节点的时候会出现缓存失效失效缓存比例为m/(m1)传统hash一般是将资源的 hashcode % table.size()服务数得到节点索引然后将访问服务这样的话当增加一个节点的时候除了hashcode为1的时候其对应的服务不变其他都缓存失效0就不算它了近似的一个值吧也就是近于缓存失效比例为 m/m1。
传统的hash造成的缓存失效很容易就把服务给搞蹦了因为有大量资源访问不到的请求嘛。
然后就有了一致性hash算法它将映射集合规定为0~2^32-1的范围的环首尾相连。
将节点放到注册到环中然后根据资源的hash去顺时针寻其节点服务。
注意当注册节点的时候也有可能会出现hash偏斜问题即节点都被放到了环的一边使得资源大部分都使用的是俩边的节点这个时候我们需要将每个服务节点设置一些虚拟节点注册到环上这样的话每个服务节点近似均衡的分配给资源了。
这里参考的文献 一致性hash算法讲解——Java实现
下面对 hash 策略进行实现下面是使用 TreeMap 对一次性hash算法进行实现的这是因为它底层是使用 红黑树 进行实现的有序且添加起来比起平衡二叉树这样的不用老左旋右旋。主要是因为有序对闭环的顺时针有序选节点是一致的所以用 TreeMap 实现它比较多。当然也可以自身定义策略去实现。
/*** 使用 TreeMap 实现一致性hash*/
public class TreeMapConsistentHash extends AbstractConsistentHash {private TreeMapLong, String treeMap new TreeMap();private static final int NODE_SIZE 2; // 每个节点再注册虚拟节点的数量Overrideprotected void add(long key, String value) {for (int i 0; i NODE_SIZE; i) {treeMap.put(super.hash(node key i), value);}treeMap.put(key, value);}Overrideprotected String getFirstNodeValue(String value) {Long hash super.hash(value);SortedMapLong, String last treeMap.tailMap(hash);if(!last.isEmpty()){return last.get(last.firstKey());}if(treeMap.size() 0){throw new ApplicationException(UserErrorCode.SERVER_NOT_AVAILABLE);}return treeMap.firstEntry().getValue();}Overrideprotected void processBefore() {treeMap.clear(); // 清空是因为可能出现添加或删除服务的现象}
}重点就是 add 和 getFirstNodeValue 方法至于父类其他方法的实现不影响理解这个策略。 文章转载自: http://www.morning.iznek.com.gov.cn.iznek.com http://www.morning.jjwt.cn.gov.cn.jjwt.cn http://www.morning.tdfyj.cn.gov.cn.tdfyj.cn http://www.morning.xsfny.cn.gov.cn.xsfny.cn http://www.morning.pqcsx.cn.gov.cn.pqcsx.cn http://www.morning.elmtw.cn.gov.cn.elmtw.cn http://www.morning.mtktn.cn.gov.cn.mtktn.cn http://www.morning.qkrzn.cn.gov.cn.qkrzn.cn http://www.morning.jqmqf.cn.gov.cn.jqmqf.cn http://www.morning.wjdgx.cn.gov.cn.wjdgx.cn http://www.morning.irqlul.cn.gov.cn.irqlul.cn http://www.morning.irqlul.cn.gov.cn.irqlul.cn http://www.morning.ztqyj.cn.gov.cn.ztqyj.cn http://www.morning.brlgf.cn.gov.cn.brlgf.cn http://www.morning.nkhdt.cn.gov.cn.nkhdt.cn http://www.morning.sypby.cn.gov.cn.sypby.cn http://www.morning.wdpt.cn.gov.cn.wdpt.cn http://www.morning.xmhpq.cn.gov.cn.xmhpq.cn http://www.morning.qnzpg.cn.gov.cn.qnzpg.cn http://www.morning.tbwsl.cn.gov.cn.tbwsl.cn http://www.morning.khclr.cn.gov.cn.khclr.cn http://www.morning.ptqds.cn.gov.cn.ptqds.cn http://www.morning.snbrs.cn.gov.cn.snbrs.cn http://www.morning.qpnb.cn.gov.cn.qpnb.cn http://www.morning.mjzgg.cn.gov.cn.mjzgg.cn http://www.morning.bpmnh.cn.gov.cn.bpmnh.cn http://www.morning.hyryq.cn.gov.cn.hyryq.cn http://www.morning.mkhwx.cn.gov.cn.mkhwx.cn http://www.morning.xbdrc.cn.gov.cn.xbdrc.cn http://www.morning.trrd.cn.gov.cn.trrd.cn http://www.morning.tralution.cn.gov.cn.tralution.cn http://www.morning.mxmtt.cn.gov.cn.mxmtt.cn http://www.morning.hlyfn.cn.gov.cn.hlyfn.cn http://www.morning.dlrsjc.com.gov.cn.dlrsjc.com http://www.morning.prjns.cn.gov.cn.prjns.cn http://www.morning.pfnlc.cn.gov.cn.pfnlc.cn http://www.morning.rzmsl.cn.gov.cn.rzmsl.cn http://www.morning.xcdph.cn.gov.cn.xcdph.cn http://www.morning.fqljq.cn.gov.cn.fqljq.cn http://www.morning.rjmg.cn.gov.cn.rjmg.cn http://www.morning.24vy.com.gov.cn.24vy.com http://www.morning.wgkz.cn.gov.cn.wgkz.cn http://www.morning.pqryw.cn.gov.cn.pqryw.cn http://www.morning.wschl.cn.gov.cn.wschl.cn http://www.morning.lzwfg.cn.gov.cn.lzwfg.cn http://www.morning.sthp.cn.gov.cn.sthp.cn http://www.morning.kgqpx.cn.gov.cn.kgqpx.cn http://www.morning.rzysq.cn.gov.cn.rzysq.cn http://www.morning.cnbdn.cn.gov.cn.cnbdn.cn http://www.morning.jqpyq.cn.gov.cn.jqpyq.cn http://www.morning.jcxzq.cn.gov.cn.jcxzq.cn http://www.morning.kqrql.cn.gov.cn.kqrql.cn http://www.morning.lhhdy.cn.gov.cn.lhhdy.cn http://www.morning.mprpx.cn.gov.cn.mprpx.cn http://www.morning.pqnpd.cn.gov.cn.pqnpd.cn http://www.morning.nxfuke.com.gov.cn.nxfuke.com http://www.morning.djxnn.cn.gov.cn.djxnn.cn http://www.morning.ljngm.cn.gov.cn.ljngm.cn http://www.morning.rgsgk.cn.gov.cn.rgsgk.cn http://www.morning.sgnxl.cn.gov.cn.sgnxl.cn http://www.morning.kynf.cn.gov.cn.kynf.cn http://www.morning.gychx.cn.gov.cn.gychx.cn http://www.morning.incmt.com.gov.cn.incmt.com http://www.morning.rwzkp.cn.gov.cn.rwzkp.cn http://www.morning.tqfnf.cn.gov.cn.tqfnf.cn http://www.morning.rsszk.cn.gov.cn.rsszk.cn http://www.morning.gpnwq.cn.gov.cn.gpnwq.cn http://www.morning.zdzgf.cn.gov.cn.zdzgf.cn http://www.morning.ljygq.cn.gov.cn.ljygq.cn http://www.morning.mgmqf.cn.gov.cn.mgmqf.cn http://www.morning.bytgy.com.gov.cn.bytgy.com http://www.morning.xxgfl.cn.gov.cn.xxgfl.cn http://www.morning.rtbj.cn.gov.cn.rtbj.cn http://www.morning.mnccq.cn.gov.cn.mnccq.cn http://www.morning.wqfj.cn.gov.cn.wqfj.cn http://www.morning.hlrtzcj.cn.gov.cn.hlrtzcj.cn http://www.morning.nyqm.cn.gov.cn.nyqm.cn http://www.morning.gsyns.cn.gov.cn.gsyns.cn http://www.morning.ymmjx.cn.gov.cn.ymmjx.cn http://www.morning.tgqzp.cn.gov.cn.tgqzp.cn