Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

  以上这段介绍引用自nacos官方文档,说的比较官方,术语比较专业,通俗一点说,其实nacos有两大最为核心的功能:注册中心与配置中心,下面就先从nacos主要功能点出发对nacos进行展开介绍。本篇文章主要是介绍nacos的一些核心功能,然后接下来我将分成多篇文章来对这些功能和原理进行详细介绍。
关于nacos环境搭建、安装和配置我就不再详述,官方文档提供了很详细的说明,可以参考nacos官网

  我使用的版本是1.4.1,不同版本之间会有细节上的差别,但是主体流程是差不多的。

1、nacos总体架构

2、nacos主要功能
2.1 注册中心(AP和CP)

  nacos最为核心功能:服务治理,随着微服务概念的流行,越来越多的系统被拆分成了多个服务,每个服务进行分布式部署,以往我们使用nginx对服务进行负载,客户端只需要调用nginx暴露出的地址即可,但是随着系统对可用性要求的提高,这种方式的弊端也随之暴露出来:假设某个服务集群部署了3台机器,由nginx将客户端请求进行负载转发到这3台机器中的某一台,如果某台机器上的服务挂掉了,nginx是无法感知到的,下一次请求还是有可能会转发到这台机器上,这时请求就会失败,这对于可用性要求较高的系统是无法接受的。而注册中心的出现就很好地解决了这个问题。
  通俗来说,注册中心就是用于服务提供者注册服务、服务调用者从中拉取服务列表然后采用负载均衡策略(如Ribbon)从列表中选出一个服务,从而完成请求调用。市面上可以用来作为注册中心的开源框架也比较多,如:Eureka、Zookeeper、Consul、nacos,本文主要介绍nacos,nacos的功能非常强大,也比较容易使用,支持AP和CP模型(相对于Eureka只支持AP模型、Zookeeper只支持CP模型、Consul只支持CP来说是一个优势),而且nacos性能也非常出色,未来注册中心大概率将是nacos的天下,因为Eureka从2.X版本开始已经闭源了,并且Eureka服务注册时延比nacos大得多,而Zookeeper是CP架构,虽然极大可能保证了数据的强一致性,但是很大程度上牺牲了可用性,对于注册中心来说,绝大部分场景下对可用性的需求要大于一致性(即使集群节点间数据暂时不一致,其实并不影响本次请求的调用,因为还有负载策略重试其它机器,而且最终集群节点间数据最终也会一致,对于nacos来说不一致的时间最多也就短暂的几秒,完全可以接受),Consul没用过,这里不做评论,所以未来nacos大概率会替代其它注册中心框架成为主流。

(1) 服务注册与发现
  服务注册与发现显然是注册中心的核心了,这里首先明确几个概念:
  nacos-server: 用于接收nacos-client端的服务注册请求并保存到注册表;
  nacos-client: 用于将服务注册到nacos-server,如用户下单操作,用户服务调用订单服务,此时订单服务就是服务提供者,服务提供者需要注册到注册中心,那么它就是nacos-client;
  服务调用者: 用户服务就是服务调用者。

(1.1)服务注册工作流程
  nacos-client(如订单服务)启动时,就会去注册中心进行服务注册,其实就是通过HTTP请求调用nacos-server,当nacos-server端接收到客户端的注册请求时,会将客户端的实例数据(包括ip、端口、微服务名等)保存到server端的注册表中(内存),如果订单服务是集群部署,那么同一个微服务名就会有多个实例数据形成一个实例列表。

(1.2)服务发现工作流程
  当用户服务调用订单服务时,首先会去nacos-server端获取注册表中的实例列表并存放在用户服务的本地内存中,再根据负载策略从实例列表中选出一个实例进行调用。

(2)客户端心跳机制
  nacos-client进行服务注册时(具体时机是调用nacos-server注册接口之前),会开启心跳任务,默认每5秒(可通过元数据参数preserved.heart.beat.interval进行设置)向nacos-server发送心跳,告诉服务端我还活着,不要将我剔除。

(3)服务端健康检查
  nacos-server接收到client端的服务注册请求后,将注册的实例数据写到注册表之前,会首先开启一个健康检查的定时任务(首次启动会延迟5秒执行,之后每5秒执行一次),其实主要就是处理nacos-client的心跳信息的,如果客户端实例超过15秒还没有发送心跳过来,则将实例健康状态改成false;如果客户端实例超过30秒还没有发送心跳过来,则剔除该实例。

(4)集群数据一致性管理
  如果nacos-server是集群部署,那么还需要考虑集群节点之间的数据一致性的问题,如何保证集群数据一致?集群挂了部分节点如何应对?节点恢复了如何保证数据跟其它节点一致?等等。nacos也有一系列的处理策略:
(4.1)客户端实例注册信息同步到nacos-server集群其它节点
nacos-server完成服务注册后,会开启一个定时任务,定时将自己注册表数据广播给集群其它节点,完成同步,相关代码:DistroProtocol.sync(…)。

(4.2)集群节点状态同步任务
  集群节点之间相互同步节点状态,如果有节点宕机了,集群其它节点会感知到并更新集群节点的状态,这个会影响权威节点的计算,相关代码:ServerStatusReporter。

(4.3)注册服务实例信息在机器节点间的同步任务
  nacos-server服务启动时,会开启该任务,这里需要说一个概念:权威节点,对于集群部署,服务注册时只会注册到其中一个集群节点,然后该节点数据会同步到其它节点,同步数据时,会根据注册实例的服务名进行hash计算并对集群节点数量取模,计算方式如:istroHash(serviceName) % servers.size(),根据得到的下标获取对应的集群节点,实际上是由该节点进行数据广播给其它节点,该节点就叫做权威节点,因此每个实例只会由固定一个权威节点负责同步给其它集群节点。每个实例数据不用所有server节点都去同步一遍,没有那个必要,这样做的好处是节省资源,提高了性能,同时也避免了多个节点数据如果某时刻不一致的话,都去同步这个实例可能会造成最新的数据被老的覆盖,相关代码:ServiceReporter类。

(4.4)集群数据拉取
  nacos-server服务启动时,会开启该任务,该任务是一个线程,递归执行,会以轮询的方式去其它集群节点的本地快照中(就是注册表的一个缓存,数据同注册表)拉取实例数据(拉到了就返回,所以实际上只会到其中个集群节点去拉取,没有必须去所有节点都拉取一遍,这样也是为了节约资源、提升性能),更新到自己的注册表和本地快照中。这个线程主要保障了一个场景:如果某个server节点挂了,那么它的数据跟其它节点肯定不一致了,下次重新启动的时候该线程就会从其它节点拉取保证数据的同步,相关代码:DistroProtocol.startLoadTask()。

(4.5)集群数据对账
  nacos-server服务启动时,会开启该定时任务,5秒一次,数据对账是4.4的补偿措施,作为兜底,定时将本节点数据广播给其它节点,处理流程跟4.4类似,相关代码:DistroProtocol.startVerifyTask()。

(5)客户端与服务端交互
(5.1)客户端定时拉取服务端注册实例数据

  客户端会有一个定时任务,定时去拉取服务端的实例列表数据并更新到客户端本地内存中,相关实现代码:HostReactor类;

(5.2)服务端推送
  服务端注册数据发生了变更,会通过udp推送到客户端,如果客户端需要实时监听到服务端注册数据的变化,就需要客户端开通udp端口,相关实现代码:PushService类;

2.2 配置中心
  配置中心相对更好理解一些,即可以将项目中的配置放到nacos配置中心中,这样配置与项目即可实现解耦。

2.3 OpenAPI
  nacos也对外也提供了关于服务注册与发现、配置管理、命名空间相关操作的OpenAPI,参考官网:https://nacos.io/zh-cn/docs/open-api.html,主要用于支持异构项目,虽然目前nacos客户端主要是以Java语言开发的项目为主,而且官方当前也仅提供了Java版本的客户端(不过nacos开源社区已经有了多种语言的SDK),但是nacos立意深远,目标远不止于此,将来官方很可能还会提供其它语言版本的客户端,但是目前异构版本需要用户自己与nacos进行整合,因此nacos对外提供了这些OpenAPI供用户使用。

  本文对nacos的核心功能做了一些大致的介绍,后面会以这些功能点为维度配以源码+画图的方式分别讲解它们的实现原理,详情请见下文。

1、nacos功能简介相关推荐

  1. autoware框架与功能简介(一)

    autoware框架与功能简介(一) Autoware.AI是世界上第一个用于自动驾驶技术的"All-in-One"开源软件.它ROS1操作系统,并在Apache2.0许可下使用. ...

  2. 【Android 逆向】代码调试器开发 ( 代码调试器功能简介 | 设置断点 | 读写内存 | 读写寄存器 | 恢复运行 | Attach 进程 )

    文章目录 一.代码调试器功能简介 二.Attach 进程 一.代码调试器功能简介 代码调试器功能 : 设置断点 : 无论什么类型的调试器 , 都必须可以设置断点 , 运行到断点处 , 挂起被调试进程 ...

  3. Arduino终于支持代码补全了!小白们终于可以愉快的写代码了!Arduino IDE 2.0beta功能简介...

    Arduino终于支持代码补全了!小白们终于可以愉快的写代码了!Arduino IDE 2.0beta功能简介 前一段时间听到有人说Arduino的IDE特别不好用,功能太单一,最重要的是没有代码补全 ...

  4. RTOS原理及功能简介

    文章目录 1 RTOS原理及功能简介 1.1 RTOS概述 1.2 RTOS工作原理简介 1.3 RTOS如何解决前后台代码结构存在的问题 1 RTOS原理及功能简介 1.1 RTOS概述 百度百科的 ...

  5. html台风路径,常用气象网站功能简介

    常用气象网站部分功能简介 主要对如下网站进行介绍: 主要介绍常用气象网站的查询功能,以及信息提示 南汇气象局气象服务网站http://www.doczj.com/doc/16ee71ebf8c75fb ...

  6. MKL学习——功能简介

    基本术语 BLAS : Basic Linear Algebra Subprograms 基本线性代数子程序 BLACS : Basic Linear Algebra Communication Su ...

  7. 商场楼层导视牌图片_百宝图商场电子导视软件中预约产品功能简介

    百宝图商场电子导视软件中预约产品功能简介 管理端,可配合百宝图商场电子导视软件配套使用 1:数据展示:图形展示总预约数/预约时间峰值/预约途径/各途径数量对比 2:数据统计:有效预约数量/无效预约数量 ...

  8. Hadoop生态圈-Ambari控制台功能简介

    Hadoop生态圈-Ambari控制台功能简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在经历一系列安装过程之后(部署过HDP后我终于发现为什么大家喜欢用它了,部署比CDH简 ...

  9. uc浏览器TV版最新版本功能简介

    uc浏览器TV版最新版本功能简介 UC浏览器TV版怎么样?提起UC很多人都知道,不就是那款在手机上很火的浏览器么?而要说到UC电视版,知道的人就不多了.本月初,UC发布了旗下首款PC版浏览器,网友们试 ...

最新文章

  1. LeetCode1262 可被三整除的最大和(动态规划)
  2. 【OpenGL】十三、OpenGL 绘制三角形 ( 绘制单个三角形 | 三角形绘制顺序 | 绘制多个三角形 )
  3. php 预处理原理,PHP的PDO对象预处理的2种实现方法,实现原理详解
  4. android自定义dialog开源库,android-dialog: 此框架提供五种对话框的显示,并支持对话框的扩展,目的是为了提供对话框的统一管理,并提供对话框显示的公共接口。...
  5. hdu 4417 Super Mario 树状数组||主席树
  6. Python自动化办公之Excel拆分并自动发邮件
  7. 谷歌五笔输入法电脑版_“五笔输入法”打字速度更快,为什么却没啥人用?
  8. mysql主从北_mysql主从复制(超简单)
  9. django用sqlite跟mysql_django框架学习:九. django连接mysql,sqlite
  10. matlab在遥感数字图像处理方面的应用
  11. 孙鑫VC学习笔记:第十三讲 (六) 关于释放内存
  12. win10更新后开不了机_坚决不更新!被微软雪藏的win10系统版本,只要3GB,老爷机的克星!...
  13. python正则表达式 身份证_正则表达式实现身份证信息验证
  14. 炫酷报表制作工具推荐:RDP报表工具
  15. 高等教育中的人工智能市场现状研究分析报告-
  16. 利用云服务器搭建解锁网易云变灰歌曲的代理
  17. 分享20个增长黑客经典案例。
  18. Magic Leap开发指南(7)-- 眼球追踪(Unity)
  19. 名帖98 赵孟頫 小楷《黄庭经》
  20. 再见了,曾经喜欢过的歌手

热门文章

  1. pytorch模型转ONNX转TensorRT,模型转换和推理部署
  2. css字体加横线方法
  3. 基于VS2012 C#调用bartender自动打印条形码
  4. 如何用c语言输出太阳图案,闪亮的太阳上色简笔画图片教程步骤
  5. 华为腾讯游戏因分成开“撕“,“内容“与“渠道“谁能称王?
  6. 春季开学必备物品清单、数码好物推荐篇
  7. 基础Java练习08:由卡号计算幸运数字
  8. conda anaconda切换清华源
  9. HICA:数通/网络域
  10. Chrome中“Adobe Flash Player 已不再受支持”的处理方法