引言
Nacos在Client选择节点时提供了一种基于权重的随机算法,通过源码分析掌握其实现原理,方便实战中加以运用。
内容提要
下面以图示的方式贯穿下随机权重负载均衡算法的流程:
节点列表
假设注册了5个节点,每个节点的权重如下。
前几天一个业务负责的同事找老梁,说每次发布SOA拉入时就有少量报错。
报错的集中在RPC设置超时时间比较短的上游服务,比如设置300ms,发布完就好了。
我说最近没有发布新版本,应该不是中间件变更引起的。
同事说这问题存在好几个月了,他们一直想抓原因,一直没找到。
你咋早点不反馈到我这呢?就自己这么琢磨了几个月,够执着的。
老梁让他组织个会议,拉了小组两个同事一起参与下,聚焦复盘下问题。
忘了说了,我们SOA框架使用gRPC通信,gRPC底层使用Netty。
GC 日志
从GC日志现象来看,在第4次和第5次Young GC的时间过长,线上达到了900ms。
在测试环境复现,第4次Young GC的时间也超过500ms。
Nacos支持众多健康检查类型,心跳、HTTP、TCP、MySQL等类型,这些都作用于什么场景?他们又是如何事项的呢?本文就撸一撸这个。
大家好,我是老梁,一个想分享点干货的家伙。
最近天天喝花枸杞决明子茶,有用没用的权当白开水喝着。
老梁坐电脑前跟大伙聊聊天,聊聊公司军规,各位随便看看。
组织发展初期人不多物资也不丰富,人就这么点,要做的东西很多。
开发从前端到后端,从网关到存储,从公共组件到业务,最好都能顶上去干。
自然规矩也没那么多,很多时候自测上线的,线上有问题难避免。
生产环境有问题,上去干两把,直接替换包,先修复了再说。
没办法,就这点人,先充分调动大伙积极性先把事干了。
就像《亮剑》李云龙说的:
“我说旅长啊,我好歹也是堂堂正规军的团长,我不能连县大队都不如吧?”
“这不是砸咱们师的牌子嘛?你猜旅长怎么说?”
“旅长说,我有装备我要你干什么?你既然能当团长,就有能耐去搞枪,要不然你就回家抱孩子去!你别在这给我丢人显眼!”
“得鳓,我等的就是这句话!让我搞枪,没问题啊!可是你不能给我戴紧箍咒啊,对不对?”
“你总得给我点自主权吧,不能什么事都让你大旅长占了啊!又想让我搞枪,又想让我当乖孩子,这叫不讲理! ”
就像改革开发初期,需要努力抓住发展机遇,避免无效争论。
需要先解决国家经济薄弱和老百姓普遍贫困问题。
“不管黑猫白猫,捉到老鼠就是好猫”。
回顾下《秦孝公的招贤令》:
“…诸侯卑秦,丑莫大焉…寡人思念先君之意,常痛于心”。
“宾客群臣有能出奇计强秦者,吾且尊官,与之分土”。
秦孝公要强秦之策,至于儒家、法家、道家哪家学说不重要。
嗯,发展初期的首要问题是抓住机遇发展壮大。
本文接着撸Distro协议,上文中分析了在Nacos server启动时会进行全量数据同步和数据校验,具体数据即客户端注册节点信息含命名空间、分组名称、服务名称、节点Instance信息等。什么时候会触发增量同步?增量同步都干了些啥,下文接着撸撸增量数据同步。
在《Nacos4# 服务端响应连接和注册源码分析(一)》在服务注册后发布了三个事件ClientEvent.ClientChangedEvent、ClientOperationEvent.ClientRegisterServiceEvent、MetadataEvent.InstanceMetadataEvent。这三个事件后来都干了点啥还没撸。
Nacos的CP协议使用Distro,中间穿插了几篇关于该协议的主要逻辑,本文接着撸服务端响应。
当注册请求到服务端时,服务端会给订阅该服务的Clients发送推送请求,通知实例变了
当注册请求到服务端时,服务端发布了客户端注册事件ClientRegisterServiceEvent
ClientRegisterServiceEvent事件被ClientServiceIndexesManager订阅后发布服务变更事件ServiceChangedEvent
ServiceChangedEvent被NamingSubscriberServiceV2Impl订阅,创建PushDelayTask被PushExecuteTask执行,负责向订阅该服务的订阅者发起推送serviceInfo请求
推送的请求被NamingPushRequestHandler处理并发布InstancesChangeEvent,最终回调到我们的代码逻辑AbstractEventListener
当注册请求到服务端时,该节点会向集群中其他节点增量同步新增的Client信息
当注册请求到服务端时,发布ClientChangedEvent事件
该事件被DistroClientDataProcessor订阅发起与其他节点的增量同步
当新的节点加入集群或者集群中有节点下线了,集群之间可以通过健康检查发现。健康检查的频率是怎么样的?节点的状态又是如何变动的?状态的变动又会触发什么动作。带着这些问题本文捋一捋。
本文接着撸Distro协议,上文中分析了寻址模式。有了地址就要建立连接,有了连接就能通信了。集群之间都交互啥数据?本文就扒一扒全量同步和节点之间数据校验。
大家好,我是老梁,一个想分享点干货的家伙。
喝了一杯菊花枸杞决明子茶,这茶喝起来没啥味道,据说有清肝明目功效。
老梁坐电脑前跟大伙聊聊天,各位随便看看。
咋不喝鸡尾酒了呢?
前段时间咳嗽跑到三甲医院挂了专家号,专家开了一个多月药,叮嘱说把他开的要都吃光。
专家说的话,能不听吗?老梁就天天吃,吃了一个多月终于都给吃光了。
药吃光了,病没好,一吹风就咳两声。
是药不管用还是药不对病呢?还是身体不行了?
身体也不至于呀!
老梁虽然平时没时间锻炼,但每天基本能走1万步以上。
每周六周天各跑3.5公里,一周也有7公里了。
总之,咳嗽没好。
旧的没好新的又开始了,扁桃体又开始发炎,咳嗽前兆!
跑到大药房,卖药的小姑娘,说让喝点蒲公英颗粒。
老梁买了四天的,喝了三天,扁桃体发炎好了,咳嗽也好了。
得谢谢小姑娘这药,比三甲医院的专家开的管用。
嗯,一个小咳嗽就能折腾你两月,天道有常,多一分敬畏。