Nacos注册中心原理解析

前言:

Nacos是Spring Cloud Alibaba中的组件,可以作为注册中心和配置中心,这里以作为注册中心做介绍。
这里不介绍nacos的基本使用,官方有案例很简单,引入一个依赖就可以了。

一、Nacos主要功能

  1. 服务注册: Nacos Client会通过发送REST请求的方式向Nacos
    Server注册自己的服务,提供自身的元数据,比如ip地址、端口等信息。Nacos
    Server接收到注册请求后,就会把这些元数据信息存储在一个双层的内存Map中。
  2. 服务心跳: 在服务注册后,Nacos
    Client会维护一个定时心跳来持续通知Nacos Server,说明服务一直处于可用状态,防止被剔除。默认5s发送一次心跳。
  3. 服务同步: Nacos Server集群之间会互相同步服务实例,用来保证服务信息的一致性。
  4. 服务发现:服务消费者(Nacos
    Client)在调用服务提供者的服务时,会发送一个REST请求给Nacos Server,获取上面注册的服务清单,并且缓存在Nacos
    Client本地,同时会在Nacos Client本地开启一个定时任务定时拉取服务端最新的注册表信息更新到本地缓存
  5. 服务健康检查:Nacos
    Server会开启一个定时任务用来检查注册服务实例的健康情况,对于超过15s没有收到客户端心跳的实例会将它的healthy属性置为false(客户端服务发现时不会发现),如果某个实例超过30秒没有收到心跳,直接剔除该实例(被剔除的实例如果恢复发送心跳则会重新注册)

Nacso作为注册中心:根据我们使用nacos的过程我们会产生几个问题。

  1. 为什么我自己的微服务启动后就会注册到nacos?
  2. nacos有客户端和服务端那么它们之间的通信方式是怎么样的?
  3. 为什么服务停了之后,nacos服务端注册的实例就下线了?

针对问题1:因为客户端服务在启动时就会向nacos服务端发起注册服务,所以启动成功之后,nacos服务端就能看到相关实例。
针对问题2:通信方式有两种http或者grpc。具体使用那种取决于服务节点类型是临时实例还是持久实例,默认是临时而且大多数情况我们用的就是临时实例,所以下面也将对grpc方式说明。
针对问题3:因为客户端会有线程定时和服务端通信,如果客户端停止了服务端就能感受到。
1.为什么我们在服务中引入了 spring-cloud-starter-alibaba-nacos-discovery 这样的依赖之后,服务在启动时就能自动注册到nacos服务端?
在这里插入图片描述
2.服务端明明是一个标准的springboot工程,为什么tomcat启动后,还可以接受客户端的rpc请求呢?
在这里插入图片描述

二、Nacos的集群结构(支持CP和AP)

1. 什么是CAP
C:一致性
A:可用性
P:分区容错性
CAP只能同时保证两个特性,在集群环境下一般都是在不同的服务器上部署节点,如果集群间节点由于网络原因无法通信,那么集群仍然对外对外提供服务(这个是分区容错性P),在分布式系统下P是一定要满足的,在满足了P的前提下,如果我们要保证C那么由于部分节点数据没法同步,就会出现不可用。如果我们保证服务的可用性,那么因为网络分区的存在就会出现集群间节点的数据不一致,就无法保证A。
2. 什么是BASE
BA:服务基本可用
S:软状态
E:最终一致性
用nacos的ap架构解释base理论:满足ap架构的系统可以说是符合了ba,比如nacos的ap集群挂两个节点,那么单节点也可以用。但是当两外两个节点恢复后最终会从另一个节点将数据同步,最终数据是一致的。中间暂时的数据不一致就是软状态。

3. nacos实现的raft协议和zookeeper使用zab协议有什么区别?
首先raft和zookeeper都是基于paxos协议的简化。他们之间有共同点和差异
共同点:

  1. 需要集群选举出一个主节点master或者leader
  2. 集群间的数据同步,只有主节点可以写数据,再把数据同步到集群其它节点。

差异

  1. zookeeper的集群节点类型是 leader、follower、observer
  2. nacso的集群节点类型是 leader、follower、candidate
  3. zookeeper集群中每个节点都会发起选票,最终需要根据选举规则进行投票比较。
  4. nacos集群中每个节点都有随机休眠时间,最先苏醒的节点会发起投票,其它节点收到投票后就直接返回了,然后重置休眠时间。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值