几种简单的负载均衡算法及其Java代码实现
因为serverWeightMap中的地点列表是动态的,随时也许有呆板上线、 下线可能宕机,因此为了停止也许呈现的并发题目,要领内部要新建局部变量serverMap,现将serverMap中的内容复制到线程当地,以停止被多 个线程修改。这样也许会引入新的题目,复制往后serverWeightMap的修改无法反应给serverMap,也就是嗣魅这一轮选择处事器的进程中, 新增处事器可能下线处事器,负载平衡算法将无法获知。新增无所谓,假若有处事器下线可能宕机,那么也许会会见到不存在的地点。因此,处事挪用端必要有响应的容错处理赏罚,好比从头提倡一次server选择并挪用。 对付当前轮询的位置变量pos,为了担保处事器选择的次序性,必要在操纵时对其加锁,使得统一时候只能有一个线程可以修改pos的值,不然当pos变量被并发修改,则无法担保处事器选择的次序性,乃至有也许导致keyList数组越界。 轮询法的利益在于:试图做到哀求转移的绝对平衡。 轮询法的弱点在于:为了做到哀求转移的绝对平衡,必需支付相等大的价钱,由于为了担保pos变量修改的互斥性,必要引入重量级的气馁锁synchronized,这将会导致该段轮询代码的并发吞吐量产生明明的降落。 03.随机(Random)法 通过体系随机函数,按照后端处事器列表的巨细值来随机选择个中一台举办会见。由概率统计理论可以得知,跟着挪用量的增大,着实际结果越来越靠近于均匀分派流量到每一台后端处事器,也就是轮询的结果。 随机法的代码实现大抵如下:
整体代码思绪和轮询法同等,先重建serverMap,再获取到server列表。在选取server的时辰,通过Random的nextInt要领取0~keyList.size()区间的一个随机值,从而从处事器列表中随机获取到一台处事器地点举办返回。基于概率统计的理论,吞吐量越大,随机算法的结果越靠近于轮询算法的结果。 04.源地点哈希(Hash)法 源地点哈希的头脑是获取客户端会见的IP地点值,通过哈希函数计较获得一个数值,用该数值对处事器列表的巨细举办取模运算,获得的功效即是要会见的处事器的序号。源地点哈希算法的代码实现大抵如下:
前两部门和轮询法、随机法一样就不说了,不同在于路由选择部门。通过客户端的ip也就是remoteIp,取得它的Hash值,对处事器列表的巨细取模,功效即是选用的处事器在处事器列表中的索引值。 源地点哈希法的利益在于:担保了沟通客户端IP地点将会被哈希到统一台后端处事器,直到后端处事器列表改观。按照此特征可以在处事斲丧者与处事提供者之间成立有状态的session会话。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |