[JD] 三、注册中心原理分析

[JD] 三、注册中心原理分析

一、注册中心的作用与设计分析
二、开源注册中心选型
三、Nacos注册中心分析
四、ZK实现与ZK注册中心分析
五、注册中心与服务治理

一、注册中心的作用
1.注册中心是用来实现为服务实例的自动注册与发现,是分布式系统中的核心基础服务。
2.注册中心的主要功能:服务注册、服务发现、健康检查、变更通知

· 服务注册:服务提供方将自身路由信息发布到注册中心,供消费方获取,用于与提供方建立连接并发起调用。
    路由信息包括注册服务节点ip、监听端口等
    服务信息包括:序列化协议、路由规则、节点权重
· 服务发现:服务消费方通过注册中心获取服务提供方节点路由信息。
    > 启动拉取:服务消费方启动后,从注册中心拉取提供方节点列表,建立连接,进行rpc调用
    > 通知回调:接受注册中心变更通知,重新获取数据,更新节点列表
    > 轮询拉取:服务消费方运行过程中,定时拉取服务提供方节点列表,用来更新本地数据
· 健康检查:确保已注册节点健康度,能够及时准确剔除失效节点,保证服务发现正确性。
    > 节点失效原因:部署重启、服务假死、异常终止
    > 健康检查解决方案:上报心跳、服务探测
· 变更通知:提供方节点发生变更时,注册中心应该能够第一时间把变更事件或变更后的数据推送到服务订阅方。
    > 注册中心内,为每个服务提供方建立订阅列表。当服务方节点变更时通知所有订阅该服务的消费方节点
3.注册中心设计分析
    注册中心设计主要考虑数据存储、超时处理、节点变更通知。
    > 数据存储:要保证数据可靠性,数据一致性,服务可用性。可靠性通过数据冗余存储,保证不会因单个节点故障导致数据丢失。各节点间数据同步共同保证数据一致。多节点对等的对外提供服务,保障服务可用。同CAP定理的角度出发,作为注册中心的使用场景AP模型更合适。
    > 节点变更通知:节点变更通知可以采用gossip协议。gossip协议特点:六度分离理论、周期性散播消息、随机选择n个节点散播、散播不重复不回传。
4.注册中心的作用除了实现服务注册与发现,还可以用来实现服务治理相关功能。比如,服务扩容缩容、机器迁移、权重、灰度流量

二、开源注册中心选型
1.注册中心选型维度:数据模型、数据一致性、健康检查、性能与容量、稳定性、易用性、集群扩展能力、成熟度、社区活跃程度。
2.注册中心选型对比

三、Nacos注册中心分析
    服务注册与健康检查:对于临时节点,心跳注册;持久化节点使用tcp或者http探测。5秒上报,15秒标记为不健康,30秒剔除。
    数据模型:主要包括数据存储和数据隔离。数据隔离做了四层数据隔离,分别是账号、命名空间、集群分组及服务名称标识。
    数据一致性:通过Raft CP一致性和Distro AP一致性保证。

四、ZK实现与ZK注册中心分析
1.Zookeeper的 Server节点组成一个集群,在集群中存在的唯一的leader节点负责响应写入请求,其他节点只负责接收,转发client请求。
    Leader: 响应写入请求,发起提案,超过半数follower同意写入,写入成功。
    Follower: 响应查询,将写入请求发给leader,参与选举和写入投票。
    Observer:响应查询,将写入请求发送给leader,不参与投票,直接接收写入结果。
2.选主逻辑
  2.1 选择机制中的概念
    Serverid:服务器ID,比如有三台服务器,编号分别是1,2,3。编号越大在选择算法中的权重越大。
    Zxid:数据ID,服务器中存放的最大数据ID。值越大说明数据越新,在选举算法中数据越新权重越大。
    Epoch:逻辑时钟,或者叫投票的次数,同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加,然后与接收到的其它服务器返回的投票信息中的数值相比,根据不同的值做出不同的判断。
    Server状态:选举状态
        LOOKING,竞选状态。
        FOLLOWING,随从状态,同步leader状态,参与投票。
        OBSERVING,观察状态,同步leader状态,不参与投票。
        LEADING,领导者状态。
  2.2 选举流程
  
  2.3 选举流程详述
    > 首先开始选举阶段,每个Server读取自身的zxid。
    > 发送投票信息
    · 首先,每个Server第一轮都会投票给自己。
    · 投票信息包含 :所选举leader的Serverid,Zxid,Epoch。Epoch会随着选举轮数的增加而递增。
    > 接收投票信息
    · 如果服务器B接收到服务器A的数据(服务器A处于选举状态(LOOKING 状态)
        1)首先,判断逻辑时钟值:
            a)如果发送过来的逻辑时钟Epoch大于目前的逻辑时钟,先更新本逻辑时钟Epoch,同时清空本轮逻辑时钟收集到的来自其他server的选举数据。再判断是否需要更新当前自己的选举leader Serverid,保存的zxid最大值和leader Serverid来进行判断的。先看数据zxid,数据zxid大者胜出;其次再判断leader Serverid,leader Serverid大者胜出;然后再将自身最新的选举结果(也就是上面提到的三种数据(leader Serverid,Zxid,Epoch)广播给其他server)
            b)如果发送过来的逻辑时钟Epoch小于目前的逻辑时钟,说明对方server在一个相对较早的Epoch中,这里只需要将本机的三种数据(leader Serverid,Zxid,Epoch)发送过去就行。
            c)如果发送过来的逻辑时钟Epoch等于目前的逻辑时钟。再根据上述判断规则来选举leader ,然后再将自身最新的选举结果(也就是上面提到的三种数据(leader  Serverid,Zxid,Epoch)广播给其他server)。
        2)其次,判断服务器是不是已经收集到了所有服务器的选举状态:若是,根据选举结果设置自己的角色(FOLLOWER还是LEADER),退出选举过程就是了。
        3)最后,若没有收到没有收集到所有服务器的选举状态:也可以判断一下根据以上过程之后最新的选举leader是不是得到了超过半数以上服务器的支持,如果是,那么尝试在200ms内接收一下数据,如果没有新的数据到来,说明大家都已经默认了这个结果,同样也设置角色退出选举过程。
    · 如果所接收服务器A处在其它状态(FOLLOWING或者LEADING)。
        1)逻辑时钟Epoch等于目前的逻辑时钟,将该数据保存到recvset。此时Server已经处于LEADING状态,说明此时这个server已经投票选出结果。若此时这个接收服务器宣称自己是leader,那么将判断是不是有半数以上的服务器选举它,如果是则设置选举状态退出选举过程。
        2)否则这是一条与当前逻辑时钟不符合的消息,那么说明在另一个选举过程中已经有了选举结果,于是将该选举结果加入到out of election集合中,再根据out of election来判断是否可以结束选举,如果可以也是保存逻辑时钟,设置选举状态,退出选举过程。
  2.4 比较策略:任期大的胜出,任期相同比较zxid大的胜出,zxid相同比较server_id(SID)大的胜出
3.zookeeper数据一致性保障
    通过Zab协议保证数据一致性。Zab 协议包括两种基本的模式:崩溃恢复 和 消息广播
    协议过程:
        当整个集群启动过程中,或者当 Leader 服务器出现网络中弄断、崩溃退出或重启等异常时,Zab协议就会 进入崩溃恢复模式,选举产生新的Leader。
        当选举产生了新的 Leader,同时集群中有过半的机器与该 Leader 服务器完成了状态同步(即数据同步)之后,Zab协议就会退出崩溃恢复模式,进入消息广播模式。
        这时,如果有一台遵守Zab协议的服务器加入集群,因为此时集群中已经存在一个Leader服务器在广播消息,那么该新加入的服务器自动进入恢复模式:找到Leader服务器,并且完成数据同步。同步完成后,作为新的Follower一起参与到消息广播流程中。

    协议状态切换:
        当Leader出现崩溃退出或者机器重启,亦或是集群中不存在超过半数的服务器与Leader保存正常通信,Zab就会再一次进入崩溃恢复,发起新一轮Leader选举并实现数据同步。同步完成后又会进入消息广播模式,接收事务请求。    
    在整个消息广播中,Leader会将每一个事务请求转换成对应的 proposal 来进行广播,并且在广播 事务Proposal 之前,Leader服务器会首先为这个事务Proposal分配一个全局单递增的唯一ID,称之为事务ID(即zxid),由于Zab协议需要保证每一个消息的严格的顺序关系,因此必须将每一个proposal按照其zxid的先后顺序进行排序和处理。    
4.zookeeper数据存储
    zookeeper数据存储为树状结构传输数据,分为永久节点和临时节点
    DataNode:zookeeper数据存储最小单元,是持久化数据节点描述的最小单位。包括的属性有:父节点的引用、该节点存储的数据、acl控制权限、持久化节点状态、子节点列表。
    DataTree:以树形结构存储了所有的数据信息。包括的属性:节点信息、节点路径信息、节点变更通知、数据变更通知。
    ZKDataBase:负责管理Zookeeper的数据、会话信息和事务日志。
5.zookeeper注册中心分析
    · zookeeper节点类型有:持久化节点、持久化顺序节点、临时节点,临时顺序节点。
    · 通知机制有:数据改变、被删除、子目录增加或者删除节点

五、注册中心与服务治理
1.注册中心除了实现服务注册与发现,从系统架构角度,基于注册中心在微服务架构中所处的位置,还可以有的扩展功能:动态权重、流量路由、服务熔断降级、权限管理、动态过载保护、Ab测试
2.注册中心扩展之灰度上线功能
    灰度上线步骤:降低权重、发布服务、观察业务,最后全量发布。
3.注册中心扩展之服务熔断
    当服务提供方异常不可用,或者实际情况需要暂停掉某些业务,有损提供服务,可以通过注册中心下发熔断指令。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值