注册中心原理分析

注册中心的作用及设计分析

什么是注册中心

  • 服务注册中心:用来实现微服务实例的自动注册与发现,是分布式系统中的核心基础服务。
  • 需要实现非常三个重要的功能:数据存储,数据同步到其他实例,数据变更通知
  • 假如我们没有注册中心,我们就只能通过配置文件或者模块各自维护。

注册中心主要功能

注册中心架构图

注册中心原理分析_第1张图片

  • 服务注册:服务提供方将自身路由信息发布到注册中心,供消费方获取用于与提供方建立连接并发起调用
    • 路由信息:注册服务节点IP、监听端口等路由信息
    • 服务信息:序列化协议,路由规则,节点权重
  • 服务发现:服务消费方通过访问注册中心获取服务提供方节点路由信息
    • 启动拉取:服务消费方启动后,从注册中心拉取提供方节点列表,建立连接,进行RPC调用
    • 通知回调:接受注册中心变更通知,重新获取数据,更新节点列表
    • 轮训拉取:服务消费方运行过程中定时拉取服务提供方节点列表,用来更新本地数据
  • 健康检查:确保已注册节点健康度,能够及时准确剔除失效节点,保证服务发现正确性
    • 失效原因:部署重启,服务假死,异常终止
    • 解决方案:上报心跳,服务探测
  • 变更通知:当服务提供方节点发生变更时,注册中心应该能够第一时间把变更事件或变更后的数据推送到服务订阅方
    • 注册中心内为每个服务提供方建立订阅列表,当服务方节点变更时通知所有订阅该服务的消费方节点
  • 服务治理:注册中心除了实现服务注册与发现,还可以用来实现服务治理相关功能
    • 服务扩容/缩容, 机器迁移,权重,灰度流量
      注册中心原理分析_第2张图片

注册中心设计重要点

  • 数据可靠性:数据冗余存储,确保不会因为单节点故障导致数据丢失
  • 数据一致性:各节点间数据同步,保证数据一致性。采用什么协议来保证各个节点数据是一致的。我们可以采用Gossip 协议
    • Gossip协议基本思想就是:一个节点想要分享一些信息给网络中的其他的一些节点。于是,它周期性的随机选择一些节点,并把信息传递给这些节点。这些收到信息的节点接下来会做同样的事情,即把这些信息传递给其他一些随机选择的节点。一般而言,信息会周期性的传递给N个目标节点,而不只是一个
    • 主要特点就是:周期性散播消息、随机选择N个节点散播、散播不重复不回传
  • 服务可用性:多节点对等的对外提供服务,由数据可靠性和一致性保证了服务的可用性。

提到服务的可用性,就会出现一个非常重要的CAP 定理。对于注册中心来说,我们应该选择一个什么样的可用性呢?
注册中心原理分析_第3张图片

CAP

CAP理论是分布式架构中重要理论:

  • 一致性(Consistency):所有节点在同一时间具有相同的数据;
  • 可用性(Availability) :保证每个请求不管成功或者失败都有响应;
  • 分隔容忍(Partition tolerance) :系统中任意信息的丢失或失败不会影响系统的继续运作。
  • CAP 不可能都取,只能取其中2个的原因如下:
    • 如果C是第一需求的话,那么会影响A的性能,因为要数据同步,不然请求结果会有差异,但是数据同步会消耗时间,期间可用性就会降低。
    • 如果A是第一需求,那么只要有一个服务在,就能正常接受请求,但是对于返回结果变不能保证,原因是,在分布式部署的时候,数据一致的过程不可能想切线路那么快。
    • 如果同时满足一致性和可用性,那么分区容错就很难保证了,也就是单点,也是分布式的基本核心。

CAP中,其中有一个P是不能保证的,因为在现实的网络环境中,不能保证一定不能出现网络分区,在出现网络分区的时候,我们应该怎么选择A 或者 C?

  • AP/CP选择:我们从业务场景出发,从服务消费方来看:获取不同的节点列表好过无法获取,从服务提供方来看:部分节点提供服务好过全部不可用,
    • 选择AP意味着:牺牲一致性继续提供服务
    • 选择CP意味着:待恢复一致性状态后提供服务
      所以作为注册中心的使用场景AP模型更适合

开源注册中心对比

注册中心原理分析_第4张图片

注册中心选型指导原则

  • 关于CP还是AP的选择:选择 AP,因为可用性高于一致性。
  • 技术体系:选择符合自身对应的技术体系的注册中心。
  • 是否实现高可用
  • 产品的活跃度

你可能感兴趣的:(架构设计,分布式,微服务)