本文转载自微信公众号「捉虫大师」,作者捉虫大师。转载本文请联系捉虫大师公众号。
创新互联公司专业为企业提供藤县网站建设、藤县做网站、藤县网站设计、藤县网站制作等企业网站建设、网页设计与制作、藤县企业网站模板建站服务,十载藤县做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
业务上的配置,功能开关,服务治理上对弱依赖的降级,甚至数据库的密码等,都可能用到动态配置中心。
在没有专门的配置中心组件时,我们使用硬编码、或配置文件、或数据库、缓存等方式来解决问题。
硬编码修改配置时需要重新编译打包,配置文件需要重启应用,数据库受限于性能,缓存丧失了及时性。
可能都不完美,但能从中总结出配置中心的需求,相对来说还是比较明确:
目前使用最多的配置中心可能是携程开源的Apollo,还有Spring Cloud Config、阿里开源的Nacos、百度的Disconf等。
Nacos是Naming and Configuration Service的缩写,从名字上能看出它重点关注的两个领域是Naming即注册中心和Configuration配置中心。
本文讲解nacos的配置中心的架构设计和实现原理,基于2.0.0版本(注:2.0.0版本与1.x版本区别较大)
- git clone --depth=1 https://github.com/alibaba/nacos.git
使用client进行测试,example模块下有configExample可进行config的测试,为了不动源代码,可copy一份configExample进行修改测试
namespace + group + dataId 唯一确定一个配置
参数准备时,如果配置了nacos服务端地址,则直接使用;如果配置了endpoint,则从endpoint中获取nacos服务端地址,这样有个好处是服务端地址变更,扩缩容都无需重启client,更详细可参考https://nacos.io/en-us/blog/namespace-endpoint-best-practices.html
在客户端第一次与服务端交互时创建GRPC连接,随机挑选一台server建立连接,后续都使用该连接,请求失败都会有重试,针对请求级别也有限流;重试失败或者服务端主动断开连接,则会重新挑选一台server进行建链
从gRPC的proto文件能看出请求与返回的定义比较统一
- message Metadata {
- string type = 3;
- string clientIp = 8;
- map
headers = 7; - }
- message Payload {
- Metadata metadata = 2;
- google.protobuf.Any body = 3;
- }
- service Request {
- // Sends a commonRequest
- rpc request (Payload) returns (Payload) {
- }
- }
在com.alibaba.nacos.api.config.ConfigService中可以找到所有配置中心能使用的接口
重点关注这几个接口:
采取推拉结合的方式,既保证时效性,又保证数据一致性
Nacos配置中心的数据存储支持内嵌的derby数据库,也支持外部数据库mysql,内嵌数据库主要是为了单机测试时使用。
其中上文提及的publishConfigCas的实现是利用了数据库update ${table} set ${xx}=${zz} where md5=${old_md5}来实现,如果已经这条数据被变更,则这次publish会失败。
当勾选灰度发布时可填写灰度的ip进行推送,不在灰度列表内的ip则不会接受到变更推送,并且灰度和正式是区分开的。
灰度的实现是记录下了每次的发布,回滚到指定版本即可。
本文从背景出发,结合Nacos配置中心的各个重要模块进行了一一解释,能够从整体上对Nacos的配置中心有一个把握。期望后续能对Nacos注册中心进行分析介绍。
当前题目:Nacos配置中心模块详解
浏览地址:http://www.mswzjz.cn/qtweb/news36/84686.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能