如何理解Nacos的CP和AP架构模型?

Nacos是阿里巴巴开源的注册中心和配置中心,它既可以替应用服务管理服务相关的元数据,也可以管理服务相关的配置信息。

Nacos既支持单机部署,也支持集群部署,为了保证数据的一致性,在集群模式下,Nacos既支持CP架构模型,也支持AP架构模型。

理解CP和AP架构模型

关于CP或者AP,这里就不多做解释,但是一定要理解CP和AP架构模型。

所谓CP架构模型,主要是指利用实现CP数据一致性的技术去管理分布式架构中的数据,从而确保数据的强一致性的架构模型。

所谓AP架构模型,主要是指利用AP数据一致性的技术去管理分布式架构中的数据,从而确保数据的最终一致性的架构模型。

应用服务发起一次注册请求 

在理解Nacos的CP或者AP模型之前,开发人员一定要搞清楚应用服务是如何发起一次注册请求的。

第1步,应用服务依赖nacos-client,并使用NacosFactory类的方法createNamingService()创建一个Nacos与注册中心相关的实例NacosNamingService。

import static com.alibaba.nacos.api.NacosFactory.createNamingService;
private NamingService createNewNamingService(Properties properties) {try {return createNamingService(properties);}catch (NacosException e) {throw new RuntimeException(e);}}

当在应用服务中创建实例NacosNamingService时,会初始化一个应用服务连接Nacos注册中心的RPC代理对象NamingClientProxyDelegate,并在这个对象中建立通信渠道NamingHttpClientProxy和NamingGrpcClientProxy,前者是基于HTTP的通信渠道,后者是基于gRPC的通信渠道。

因此Nacos会在应用服务启动时,建立应用服务和Nacos注册中心的以上两种类型的通信渠道。

但是在发起注册请求的时候,如果待注册的instance类型为ephemeral类型(临时实例),则采用gRPC通信渠道,如果如果待注册的instance类型为非ephemeral类型(持久化实例),则采用HTTP通信渠道。

待注册的instance类型默认为临时实例,因此Nacos默认采用gRPC通信渠道。

第2步,调用NacosNamingService实例类的方法registerInstance()发起注册请求,其中serviceId为服务ID,group为服务组,instance为需要注册的实例信息。

​namingService.registerInstance(serviceId, group, instance);

第3步,如果采用HTTP通信渠道,则调用NamingHttpClientProxy类的方法registerService()去注册服务,并向Nacos注册中心发起HTTP请求“/nacos//v1/ns/instance”。

如果Nacos是集群部署,则应用服务会利用HTTP通信渠道向Nacos集群中所有的节点发起以上HTTP请求,比如“127.0.0.1:8848/nacos//v1/ns/instance”、“127.0.0.1:8847/nacos//v1/ns/instance”和“127.0.0.1:8846/nacos//v1/ns/instance”。

Nacos注册中心启动成功之后,会启动Restful API InstanceController,并启动接口“/nacos//v1/ns/instance”。这样Nacos注册中心就会处理应用服务中基于HTTP通信渠道的注册实例请求。

第4步,如果采用gRPC通信渠道,则调用NamingGrpcClientProxy类的方法registerService()去注册服务,并向Nacos注册中心发起RPC请求InstanceRequest(gRPC请求类型为NamingRemoteConstants.registerInstance,Nacos用常量类NamingRemoteConstants封装了支持的所有类型的gRPC请求对象)。

Nacos注册中心启动成功之后,会启动一个gRPC服务端,并在gRPC服务端对应的处理器InstanceRequestHandler的方法handle()中处理RPC请求InstanceRequest。

 

 case NamingRemoteConstants.REGISTER_INSTANCE:return registerInstance(service, request, meta);

完成第1-4步之后,Nacos注册中心就收到了应用服务的注册请求了,剩下的就会走两套注册逻辑,第1个是Nacos注册中处理HTTP注册请求,第2个是Nacos注册中心处理gRPC注册请求。

Nacos注册中处理HTTP注册请求

Nacos注册中心利用Restful API InstanceController的方法register()处理注册请求。 

Nacos注册中处理gRPC注册请求 

Nacos注册中心利用gRPC处理器InstanceRequestHandler的方法registerInstance()处理注册请求。

未完待续,大家可以关注之后,查阅下一篇文章。

 另外我的新书RocketMQ消息中间件实战派上下册,在京东已经上架啦,目前都是5折,非常的实惠。

https://item.jd.com/14337086.html​编辑https://item.jd.com/14337086.html

RocketMQ消息中间件实战派上下册”是我既“Spring Cloud Alibaba微服务架构实战派上下册”之后,又一本历时超过1年半的巨无霸技术实战类型的书籍。

为了提高读者阅读本书的体验性,本书总共设计了十个特色,下面我一一的给技术小伙伴阐述一下。 

【特色一】由浅到深

本书将RocketMQ的技术原理和最佳实践体系化,按照由浅到深的顺序呈现给读者,使读者可以按照章节顺序按部就班地学习。当学习完全书内容之后,读者不仅能熟悉RocketMQ的核心原理,还能充分理解RocketMQ的“根”。

【特色二】技术新

本书不仅包括RocketMQ4.x4.9.2版本)的核心原理分析和最佳实践,还包括RocketMQ5.x5.1. 0版本)的新特性分析和最佳实践。

【特色三】精心设计的主线:零基础入门,循序渐进,直至彻底掌握RocketMQ

本书精心研究了程序类、架构类知识的认知规律,全书共分为6篇:基础;进阶;高级;高并发、高可用和高性能;应用;新特性,是一条相对科学的主线,让读者快速从“菜鸟”向“RocketMQ分布式架构实战高手”迈进。

【特色四】绘制了大量的图,便于读者理解RocketMQ的原理、架构、流程 

一图胜于文,书中在涉及原理、架构、流程的地方配有插图,以便读者更加直观地理解。

【特色五】从架构师和技术专家的视角分析RocketMQ 

本书创造性地分析了RocketMQ具备高并发、高可用和高性能的功能及原理,并从架构的视角展开分析,这些也是程序员进阶为技术专家或架构师必备的技能。

以下为从架构师和技术专家的视角分析RocketMQ典型案例,读者阅读完本书之后,也能够达到这样的水准。

【特色六】不仅有原理分析,还有大量的实战案例 

本书介绍了大量的实战案例,能让读者“动起来”,在实践中体会功能,而不只是一种概念上的理解。

在讲解每一个知识模块时,我在思考:在这个知识模块中,哪些是读者必须实现的“标准动作”(实例);哪些“标准动作”是可以先完成的,以求读者能快速有一个感知;哪些“标准动作”具有一定难度, 需要放到后面完成。读者在实践完书中的案例之后,就能更容易理解那些抽象的概念和原理了。

本书的目标之一是,让读者在动手中学习,而不是“看书时好像全明白了,一动手却发现什么都不会”。通过体系化的理论和实战案例去培养读者的主动学习能力,这样本书的价值就会被最大化。 

本书相信“知行合一”的理念,而不是“只知,而不行”,避免开发人员出现眼高手低的现象。尤其是在技术面试过程中,面试官更加看重的是既懂原理,又能够主动是实践技术的技术人。

【特色七】深入剖析原理 

 本书以系统思维的方式,从业务功能视角剖析 RocketMQ 底层的技术原理,使读者具备快速阅读 RocketMQ 框架源码的能力。读者只有具备了这种能力,才能举一反三,实现更复杂的功能,应对更复杂的应用场景。

 【特色八】从运维的视角分析 RocketMQ 的最佳实践

【特色九】参与开源 

 本书向读者展示了如何修改 RocketMQ 源码,并快速验证案例分析。这样,读者可以从中学到参与开源的技能,并为后续自己能够参与开源做准备。

【特色十】双色印刷,读者体验会更好 

为了提高读者阅读本书的体验,在有上下两册的前提下(巨无霸,超过800页),出版社不吝啬印刷成本,依然采用双色印刷。

【推荐】本书的最佳学习路径 

 为了提高读者学习RocketMQ的效率,我这边结合我自身从RocketMQ小白到RocketMQ专家的经历,为读者汇总了一条最佳学习路径。

【寄语】作者寄语 

RocketMQ是我深度参与研究的一款开源消息中间件,无论是从源码,还是架构场景,我都提炼了很多最佳实践。

在开源领域,技术小伙伴可以使用的开源消息中间件非常的多,比如KafkaPulsar等,我之所以选择研究RocketMQ,除了工作内容和角色需要之外,更多的还是自己感兴趣,因此我建议技术小伙伴一定要先培养自己的兴趣,兴趣才是提升技术硬实力的第1要素。

当然我并不止研究了RocketMQ,还研究了PulsarKafka等(包括开源消息中间件生态中的主流框架),只是本书作为一本关于RocketMQ实战派的书籍,我必须要以RocketMQ为主。

假如技术小伙伴想成为Java领域的架构师或者技术专家,我强烈建议你去研究RocketMQ,它会给你带来很多意想不到的技术和架构方法论的收获,这个也是我写本书的主要目的之一。

建议技术小伙伴按照本书设计的学习路线,逐章的去阅读和实战,这样学习效果会更好。

如果技术小伙伴有技术交流的,可以通过博文视点官方的读者群找到我的联系方式,并与我沟通,我会实时的解答读者的疑问。

本文公众号“架构随笔录”

本人视频号“架构随笔录”

【博文视点】2021年度优秀作者

2021年我和博文视点合作了一本技术类型的书籍“Spring Cloud Alibaba微服务架构实战派上下册”,它是我涉足知识输出领域以来的第一本书,同时它也是我自己积累的技术池中部分技术的产出。

为了写好那本书,我几乎花费了所有的休息时间,并主动的承担了书的售后技术辅导和咨询的职责(几乎是有问必答,坚持了整整两年)。

所谓有付出总会有回报,Alibaba这本书的销量还不错,我也因此获得了博文视点颁发的2021年度优秀作者。

我很清楚,这个是博文视点为了鼓励我继续去用心写书,因此我又花了接近1年半的时间去写了RocketMQ消息中间件实战派上下册这本书。

所谓一分耕耘一份收获,我将我对RocketMQ的理解体系化的输出给喜欢技术的技术人,希望真的对大家有帮助。

 【博文视点】2023技术成长领路人

2022年,我开始涉足技术直播和技术讲师领域,并和博文视点合作几次技术直播,直播效果还不错,再加上我孜孜不倦的布道“Spring Cloud Alibaba微服务架构实战派上下册”这本书相关的技术,并且这些技术都是有助于“技术人”快速成长的,因此也获得了博文视点颁发的“2023技术成长领路人”这个技术奖项,这个奖项也是为了鼓励我继续通过技术直播的方式给技术人去布道技术,因此只要我有时间,我就会孜孜不倦的去讲和聊技术。

【四维口袋】2022 KVP最具价值技术专家 

2022年,我开始涉足企业培训和相关技术直播,并和“四维口袋”合作了几次技术直播,并荣获了2022 KVP最具价值技术专家的技术奖项。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/599896.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录刷题第三十六天| 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间

代码随想录刷题第三十六天 无重叠区间 (LC 435) 题目思路: 代码实现: class Solution:def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:intervals.sort(keylambda x: (x[0],x[1]))count 0right intervals[0][1]for i in ra…

手游开发项目经验简单总结

这是我最近一个完整的手游开发项目的简单总结,请大家指点 引擎 语言 编辑器 项目开发模块规划分 主项目工程,UI资源项目工程,模型场景资源项目工程 热更框架 前后端协议 UI 图集 多语言适配 SLG场景和其他场景 战斗 美术模型资源 人物 动作…

Python中常用的设计模式与实践分享

设计模式(Design Patterns)是在软件开发中常见问题的可复用解决方案。使用设计模式可以帮助我们创建更灵活、可维护和可复用的代码。在Python中,设计模式同样适用,并且由于Python的动态特性,某些设计模式在Python中的实…

mysql 添加用户并分配select权限

1.root用户先登录或者在可执行界面 1.1 选择mysql 点击mysql 或者在命令行 use mysql 1.2创建用户 CREATE USER username% IDENTIFIED BY password; 备注1:%替换为可访问数据库的ip,例如“127.0.0.1”“192.168.1.1”,使用“%”表示不限制…

如何通过HACS+Cpolar实现远程控制米家和HomeKit等智能家居设备

文章目录 基本条件一、下载HACS源码二、添加HACS集成三、绑定米家设备 ​ 上文介绍了如何实现群晖Docker部署HomeAssistant,通过内网穿透在户外控制家庭中枢。本文将介绍如何安装HACS插件商店,将米家,果家设备接入 Home Assistant。 基本条件…

c# vb.net查找是否存在某个键名HashSet、Collection,字典Dictionary对象用法

vb.net Collection对象如何设置忽略大小写,如何检测是否含有某项 在VB.NET中,可以使用StringComparer类来设置Collection对象的忽略大小写。StringComparer类提供了几个静态属性,可以用于创建不区分大小写的比较器。其中,StringC…

5G时代的电商:超高速网络如何改变购物体验?

随着5G技术的不断发展和商业化推广,超高速网络正深刻地改变着人们的生活方式,其中最显著的之一便是电子商务领域。本文将深入探讨5G时代电商的发展趋势,以及超高速网络如何深刻改变用户的购物体验。 5G技术的崛起 5G技术是第五代移动通信技术…

ROS执行命令发现找不到python2.7解决办法

ros链接的python是2.7的,如果链接到python3就会报错module找不到 第一步:执行:ls -n /usr/bin/python 发现python软链接到了python3.7 第二步删除软链接:sudo rm -rf /usr/bin/python 第三步:然后再重新建立到python2…

linux系统安全及应用

系统账号清理 将用户设置成无法登录 将用户的shell属性改成/sbin/nologin锁定用户 passwd -l 用户 锁定用户 passwd -u 用户 解锁用户删除用户 userdel -r 用户 删除用户及家目录锁定配置文件 chattr i 文件或文件夹 锁定文件或文件夹,锁定之后便无法修…

生成式 AI -颠覆软件开发

# 生成式AI如何重塑开发流程和开发工具 # 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:C/C精进之路 🎀CSDN主页 发狂的小花 🌄人生秘诀:学习的本质就是极致重复! 目录 1 引言 …

物奇平台蓝牙耳机SOC MIC气密性测试配置方法

物奇平台蓝牙耳机SOC MIC气密性测试配置方法 是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加我微信hezkz17, 本群提供音频技术答疑服务,+群赠送语音信号处理降噪算法,蓝牙耳机音频,DSP音频项目核心开发资料, 1 正常的MIC频响曲线 2 异常的MIC频响曲线 FF…

MySQL数据库设置主键自增、自增主键为什么不能保证连续递增

文章目录 一、设置主键自增1.1、建表时设置主键自增1.2、建表后设置主键自增1.3、删除自增约束 二、自增列:AUTO_INCREMENT2.1、自增起始值和自增步长2.2、自增主键存储策略2.3、自增值修改机制2.3、特点和要求 三、自增字段值不连续3.1、自增不连续的示例3.1.1、示…

【书生·浦语大模型实战营01】《书生·浦语大模型全链路开源体系》

《书生浦语大模型全链路开源体系》 1. 大模型成为热门关键词 LLM发展时间轴 2. 书生浦语全链条开源开放体系 微调:XTuner 支持全参数微调支持LoRA等低成本微调 评测:OpenCompass 全方位评测,性能可复现80套评测集, 40万道题目…

【金猿CIO展】现代咨询CIO崔恩博:数字化转型,CIO不仅要懂技术和业务,更要“懂人”...

‍ 崔恩博 本文由现代咨询CIO崔恩博撰写并投递参与“数据猿年度金猿策划活动——2023大数据产业年度优秀CIO榜单及奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 最近几年,大数据行业的发展备受关注,尤其是2019年以后,随着企业…

73.乐理基础-打拍子-还原号、临时变音记号在简谱中的规则

上一个内容:72.乐理基础-打拍子-加延音线的节奏型-CSDN博客 下图中1-13,就是四几拍中所有可能出现的节奏型,以及它们的组合方式,需要练习,可以买一本视唱书去练习,搜乐谱练习,自己写节奏型根据…

msyql迁移到人大金仓数据库

1,点击数据迁移工具 2,在浏览器上输入http://localhost:54523,默认账号和密码为kingbase,kingbase,进入之后,就是项目的页面 3,数据库管理 添加源数据库,点击确定就可以了,也可以测…

06Bean的作用域scope

scope标签值默认为:单例singleton **默认情况下(即不需要任何配置),Spring的IoC容器创建的Bean对象是单例的。**也就是说,对于 Test public void testScope(){ //由于默认该bean为单例,上下文初始化时实例化对象时,bean(也就是userService对象)已经完成了创建,且只…

字母异位词分组【哈希】

Problem: 49. 字母异位词分组 文章目录 思路解题方法复杂度Code 思路 hash 解题方法 对于每一个字符串,都按字符从小打到进行排序,然后用hash去存,如果排序后的结果在hash表里面存在的话,那么就只需要把这个字符串加入进行&#x…

Jmeter接口测试响应数据中文显示为Unicode码的解决方法

问题:使用jmeter测试接口,返回响应数据汉字显示为Unicode 解决结果: 解决过程: 1.修改jmeter配置文件中的默认编码 在Jmeter的安装路径下打开bin文件夹下的jmeter.properties文件,搜索关键词default.encoding定位到语句…

【工作日志】1月5日——指针分析 LLVM

目录 别名分析读LLVM每日谈3-创建LLVM工程 跟LLVM学习教程资料留存 别名分析 今天在群里看到一个朋友询问别名分析时为什么使用二元组的形式,而不是使用指针分析中的结合形式,我在CSDN中查阅资料时,发现了这篇文章1,其中区分了指…