从源码看Nacos的设计

本文从客户端与Nacos集群的交互、数据同步机制,特别是实例信息同步和Distro协议,以及Nacos在Kubernetes中的部署实践等方面,深入探讨Nacos的设计。客户端采用无状态随机访问,数据同步通过Distro一致性协议实现最终一致性。在K8s环境中,Nacos利用peer-finder-plugin自动发现集群变化。
摘要由CSDN通过智能技术生成

这片博文来源于我在公司部门内的分享,我隐去了和公司项目相关的部分,重新整理,从几个方面谈一下Nacos的设计(作为注册中心,基于此时的develop分支)

客户端与集群的交互

首先需要声明的是Nacos Cluster虽然内部使用了Raft协议但是对于Nacos客户端,Cluster实例是无状态的。客户端配置集群地址有两种方式:
1.通过配置serverAddr列表,客户端将访问集群时,随机从列表中选择一个实例访问:

NamingService configService = NacosFactory.createNamingService("10.22.0.137:30253,10.22.0.137:30254,10.22.0.137:30255");

当然,一般情况下我们并不会直接配置Nacos实例的IP,可用用域名,以便能动态发现。

2.通过Properties配置endpoint,定时访问,感知集群变化,并随机从接口返回的列表中选择一个实例访问,客户端会与Endpoint创建LONG PULL。


Properties properties = new Properties();
properties.put(PropertyKeyConst.ENDPOINT,"10.18.90.16");
properties.put(PropertyKeyConst.ENDPOINT_PORT,"8850");
 
NamingService configService = NacosFactory.createNamingService(properties);

数据同步

实例信息同步

实例信息的由一个叫 Distro (com.alibaba.nacos.naming.consistency.ephemeral.distro.DistroConsistencyServiceImpl)的一致性协议维护,有如下几个特点:

  1. 最终一致性,由实例间通过http同
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值