游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

负载均衡算法基本实现

  最近在比赛一个项目,是给Dubbo写一个负载均衡接口,其实dubbo已经实现了下面四种,所以他做的不是这个单面负载均衡,需要做双向负载均衡,负载均衡的权重取决于服务端,所以有些时候我们不知道如何计算权重,权重受到很多因素影响,所以就需要动态考虑了。
  Dubbo提供了4种负载均衡实现,分别是基于权重随机算法的RandomLoadBalance、基于最少活跃调用数算法的LeastActiveLoadBalance、基于hash一致性的ConsistentHashLoadBalance,以及基于加权轮询算法的RoundRobinLoadBalance。1。RandomLoadBalance
  RandomLoadBalance是加权随机算法的具体实现,它的算法思想很简单。假设我们有一组服务器servers〔A,B,C〕,他们对应的权重为weights〔5,3,2〕,权重总和为10。现在把这些权重值平铺在一维坐标值上,〔0,5)区间属于服务器A,〔5,8)区间属于服务器B,〔8,10)区间属于服务器C。接下来通过随机数生成器生成一个范围在〔0,10)之间的随机数,然后计算这个随机数会落到哪个区间上。比如数字3会落到服务器A对应的区间上,此时返回服务器A即可。权重越大的机器,在坐标轴上对应的区间范围就越大,因此随机数生成器生成的数字就会有更大的概率落到此区间内。只要随机数生成器产生的随机数分布性很好,在经过多次选择后,每个服务器被选中的次数比例接近其权重比例。比如,经过一万次选择后,服务器A被选中的次数大约为5000次,服务器B被选中的次数约为3000次,服务器C被选中的次数约为2000次。privateTInvokerTdoSelect(ListInvokerTinvokers,URLurl,Invocationinvocation){intleninvokers。size();int〔〕arrnewint〔len〕;intcount0;inttotalWight0;for(InvokerTinvoker:invokers){intwightinvoker。getUrl()。getParameter(org。apache。dubbo。common。Constants。WEIGHTKEY,1);arr〔count〕wight;totalWightwight;}随机偏移量intoffsetThreadLocalRandom。current()。nextInt(totalWight);for(inti0;iarr。length;i){比如〔2,3,5〕,offset7,此时offset25,offset32,offset53,此时当他为负数时,说明就在这个区间内,我们是左闭右开〔0,2),〔2,5),〔5,10)offsetarr〔i〕;此时已经小于0了,说明在这个区间内if(offset0){返回就行了returninvokers。get(i);}}return。。。}2。LeastActiveLoadBalance
  LeastActiveLoadBalance翻译过来是最小活跃数负载均衡。活跃调用数越小,表明该服务提供者效率越高,单位时间内可处理更多的请求。此时应优先将请求分配给该服务提供者。在具体实现中,每个服务提供者对应一个活跃数active。初始情况下,所有服务提供者活跃数均为0。每收到一个请求,活跃数加1,完成请求后则将活跃数减1。在服务运行一段时间后,性能好的服务提供者处理请求的速度更快,因此活跃数下降得也越快,此时这样的服务提供者能够优先获取到新的服务请求、这就是最小活跃数负载均衡算法的基本思想。除了最小活跃数,LeastActiveLoadBalance在实现上还引入了权重值。所以准确的来说,LeastActiveLoadBalance是基于加权最小活跃数算法实现的。举个例子说明一下,在一个服务提供者集群中,有两个性能优异的服务提供者。某一时刻它们的活跃数相同,此时Dubbo会根据它们的权重去分配请求,权重越大,获取到新请求的概率就越大。如果两个服务提供者权重相同,此时随机选择一个即可。
  这个需要我们去维护一个最小连接数的计算,配合加权,当连接数相同的时候,选择加权分最高的。。。3。ConsistentHashLoadBalance
  一致性hash算法由麻省理工学院的Karger及其合作者于1997年提出的,算法提出之初是用于大规模缓存系统的负载均衡。它的工作过程是这样的,首先根据ip或者其他的信息为缓存节点生成一个hash,并将这个hash投射到〔0,2321〕的圆环上。当有查询或写入请求时,则为缓存项的key生成一个hash值。然后查找第一个大于或等于该hash值的缓存节点,并到这个节点中查询或写入缓存项。如果当前节点挂了,则在下一次查询或写入缓存时,为缓存项查找另一个大于其hash值的缓存节点即可。这个主要是靠hash算法,通过hash服务器数量服务器索引
  Java中可以使用这个:intidentityHashCodeSystem。identityHashCode(invokers);来获取4。RoundRobinLoadBalance
  加权轮询负载均衡的实现RoundRobinLoadBalance,我选择的就是这种
  这里从最简单的轮询开始讲起,所谓轮询是指将请求轮流分配给每台服务器。举个例子,我们有三台服务器A、B、C。我们将第一个请求分配给服务器A,第二个请求分配给服务器B,第三个请求分配给服务器C,第四个请求再次分配给服务器A。这个过程就叫做轮询。轮询是一种无状态负载均衡算法,实现简单,适用于每台服务器性能相近的场景下。但现实情况下,我们并不能保证每台服务器性能均相近。如果我们将等量的请求分配给性能较差的服务器,这显然是不合理的。
  因此,这个时候我们需要对轮询过程进行加权,以调控每台服务器的负载。经过加权后,每台服务器能够得到的请求数比例,接近或等于他们的权重比。比如服务器A、B、C权重比为5:2:1。那么在8次请求中,服务器A将收到其中的5次请求,服务器B会收到其中的2次请求,服务器C则收到其中的1次请求。
  下面有个表格,默认权重是〔5,1,1〕
  请求编号
  currentWeight数组
  选择结果
  减去权重总和后的currentWeight数组
  1hr〔5,1,1〕
  A
  〔2,1,1〕
  2hr〔3,2,2〕
  A
  〔4,2,2〕
  3hr〔1,3,3〕
  B
  〔1,4,3〕
  4hr〔6,3,4〕
  A
  〔1,3,4〕
  5hr〔4,2,5〕
  C
  〔4,2,2〕
  6hr〔9,1,1〕
  A
  〔2,1,1〕
  7hr〔7,0,0〕
  A
  〔0,0,0〕
  此时7次中A节点被选中的次数是5,B是1,C是1,所以符合我们的需求
  计算方法如下,首先有三个变量,记录了currentWeight,effectiveWeight,totalWeightprivateclassNode{privateintcurrentWeight;当前权重privateinteffectiveWeight;有效权重,初始化的时候等于当前权重privateinttotalWeight;总权重}
  我们先看初始化,初始化时,计算权重比如我们知道权重了A:5,B:1,C:1
  初始化节点A:newNode(5,5,7)B:newNode(1,1,7)C:newNode(1,1,7)此时currentWeight的和是:7
  当第一次的时候,A节点权重最大,此时572,A节点变成了Node(2,5,7)A:newNode(2,5,7)B:newNode(1,1,7)C:newNode(1,1,7)此时currentWeight的和是:0
  然后重新回归,回归需要currentWeightcurrentWeighteffectiveWeightA:newNode(3,5,7)B:newNode(2,1,7)C:newNode(2,1,7)此时currentWeight的和是:7所以又回来了。。。。
  怎样做呢?
  此时我们用一个PriorityQueuePairString,Node维护所有节点的信息,同时使用PairString,Node维护单个节点1。初始化队列PriorityBlockingQueuePairString,NodeweightQueuenewPriorityBlockingQueue(3,(o1,o2)o2。getValue()。getCurrentWeight()o1。getValue()。getCurrentWeight());2。遍历放入权重weightQueue。add(newPair(key,newNode(currentWeight,effectiveWeight,totalWeight)));3。当放入以后,此时就可以拿到一个当前权重最大的节点,如果不想使用优先队列,可以自己实现一个大顶堆,很简单的。获取当前节点权重最大的,PairString,NodehPairweightQueue。take();此时hPair节点的值应当是572intafterCurrentWeightvalue。getCurrentWeight()value。getTotalWeight();设置值hNode。setCurrentWeight(afterCurrentWeight);遍历for(PairString,NodestringNodePair:weightQueue){获取节点NodenodestringNodePair。getValue();剩余每个节点值有效值intafternode。getCurrentWeight()node。getEffectiveWeight();设置节点值node。setCurrentWeight(after);}由于我们拿出来的节点还没有重新计算,还要计算hNode。setCurrentWeight(value。getCurrentWeight()value。getEffectiveWeight());重新放入节点。。。。,重新排序weightQueue。add(hPair);
  其实自己维护的话可以进行heapfy的,我们只能依赖JDK提供的数据结构进行的这种取巧方式

专访vivo副总裁周围软件创新将在内核上做文章记者林腾编辑vivo希望软件成为其更核心的竞争力。2020年11月,vivo发布操作系统OriginOS,并在最近发布了升级版OriginOSOcean。短短……监控摄像头芯片领域绝对龙头华为海思一般来说谈起华为大家会想到手机做的好,谈到海思,懂手机配置的人会知道海思是华为旗下做芯片(soc)的;在手机soc领域海思已经通过麒麟980证明了与高通已经几乎没有差距了。……云文件的保护(二)前篇文章使用ecryptfs来进行文件保护,但一个问题在于,ecryptfs是linux内核里面的,在其他平台并不好用,比如windows上就没有客户端了,这样也着实不太方便了……小米12u什么时候发布啊,mix2s感觉要坚持不住了,好焦急再坚持坚持〔大笑〕估计过完年也不好说,咱俩同款,我前几天实在忍不住了,买了mix4,本来想买11u,但是受不了挖孔和留海,没办法只能向4妥协了如果满足不了现在的需要……宇宙年龄只有140多亿年,宽度却有920亿光年,这是不是一个啊呀,这个题目提醒我了一下,我家的小狗快1岁了,居然有40厘米长了,这不是明显是个悖论吗言归正传,这个题目的内容里有几个含义:首先,光年是个距离概念,而年是个时间概念,也……新风系统哪个品牌好?中国市场买新风看五点,第一过滤系统是否强大,要有一定效果的独立初效过滤,高效pm2。5的过滤等级至少要H13级别的。是否有独立的活性炭净化格,而且活性炭的量必须多,可以吸……万代mb系列为什么这么贵,贵在哪里了?MB系列作为万代近年力推的新成品系列,因机设不同,骨架部分合金,为材质的可动成品系列。MB系列可以说是万代公司凭借多年的玩具与模型制作经验,而兼顾比例、造型、可动、细节的最佳平……功放机HDMi同轴与莲花等不同输入接口对音质影响大吗?hdmi是音视频混合输出。一般在电脑上尤其是显卡上用的比较多。本质是是数字音频。功放上的hdmi接口一般会由功放内置的解码器把音视频解码,然后分配到视频输出或者音频前置放大,然……新经济风云录拥抱未来!新规之下,网络直播将走向何方?时下互联网直播蔚然成风,自2021年以来,作为网络直播最重要的形式之一电商直播头部主播纷纷陷入税收风波以来,市场就在猜测直播行业相关规范政策何时到来,直播行业也因此一度陷入政策……几百块的热水器和几千块的热水器有什么区别?在实际维修中,我接触到各种各样的热水器。有的廉价多用于出租房;有的相对高档自用。下面我来说一下几百块的热水器和几千块的热水器到底区别在哪?首先,说一下燃气热水器。一……关于联想的问题我想说两句最近司马先生质疑联想涉嫌国有资产流失要求联想给个解释导致舆论沸沸扬扬,争论不休,联想方面没有给出正面回应,反而从美女秘书到大咖集体无理无据的攻击司马先生,再到最后的人身恐吓我看……联想事件目前越闹越大,争端已经蔓延到人身攻击,为什么会这样?侵吞国有资产,为富不仁!挖国家墙角!欺骗供货商割股民韭菜!欠巨资且分钱中饱私囊!很多人骂它人身攻击是必然的,各大媒体没出来说话也许某些人不让说还不敢说!再等等让子弹飞一会!……
中芯7nm芯片没有消息了?外媒中芯国际在下一盘大棋众所周知,芯片被誉为工业粮食,是每个国家都想要掌握的核心领域,我国自然也不例外。但我国在半导体芯片的关键领域被西方国家卡脖子,因此,在芯片制造技术上,我们还是比较落后的。……智慧清洁神器睿米NEXVX,带来全新清洁体验,颠覆传统随着科技的发展,生活水平的提高,人们越来越追求便捷的生活方式。都说科技助力生活,这也体现在助力家庭卫生清扫上。因为平时清洁打扫既要扫地、吸尘还要拖地,清洁非常繁琐,所以吸拖一体……小米强势逆袭崛起!三星怒了将严查移动部门只因痛失全球第一宝座【8月17日讯】相信大家都知道,三星手机一直都是全球实力最强的手机霸主,在过去十多年时间里,一直都稳居占据着全球销量第一宝座,虽然在2020年第二季度,国产手机老大哥曾一度超越……信号不稳定服务不及时,虚拟运营商全民优打遭网友吐槽5G套餐全面推向市场以来,虽然呈现出不断降价的趋势,但动辄每月百元左右的资费还是没那么亲民。而在三大运营商之外,虚拟运营商推出了更低价位的5G套餐。虚拟运营商是指依靠租用……小鹏P5原厂可选配床垫冰箱投影仪,尬住还是真香?本文来源:时代财经作者:杨德霖近日,小鹏P5在广州太古仓举行了百变智能空间分享活动。作为市面上首款量产激光雷达的智能汽车,小鹏P5的自动驾驶辅助系统在感知方面可圈可点,而……怎么重装系统?关于这个问题,首先要了解操作系统的分类以及自己想要重装系统的目标,比如:我想装win7系统,你就需要去了解系统的分类,系统分为32位与64位,继而分为专业版、家庭版、教育版、企……华为FreeBuds4再迎固件升级为用户打造个性化音质体验5月19日,华为推出FreeBuds4,配备半入耳式主动降噪真无线耳机,兼顾舒适性和降噪性,为用户带来舒适降噪的全新聆听体验。由于固有的设计优势,华为FreeBuds4近日推出……华为三大悍将同场竞技P50ProP40ProP30Pro谁是3C毒物在这里独家报道:这篇文章给大家带来了的是华为三大悍将,分别是华为P50Pro、华为P40Pro、华为P30Pro这三部手机。这三部手机表现了华为P系列机型的发展历程,你……用了一星期OnePlusBudsPro,这些产品体验我不吐不对耳机产品的体验我一直都比较愿意花时间,因为我觉得耳机这种产品体验的好坏真的是要用出来的,硬件配置的参考价值不大,只能作为判断用料扎实与否的依据。体验层面还得看耳机设计、佩戴舒……Java基础08静态关键字static和继承(thissup目录1。关键字static1。1修饰成员变量1。1。1特点1。1。2访问格式1。1。3定义场景1。1。4示例1。2修饰成员方法1。2。1特点1。2。2访问格式1。2。3定义场景……忠言逆耳,从小米11换到iPhone12后,心里藏了很多话想今年2月份入手了小米11,主要是被它全能的配置、较低的售价所吸引,可是买来之后没用几天,问题便出现了,当然并不是质量问题,而是机身发热,骁龙888的功耗我是万万没想到啊,不玩游……618最值得入手的三款千元机型,为什么realme新机性价比realme今年开年后就来势汹汹,不但打出了双旗舰战略,而且在千元出头的价位段,推出了realme真我Q3系列产品,在受到众多消费者欢迎的同时,也给予其它厂商不小的压力。而让人……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网