1. 注册中心是什么
注册中心是微服务体系中一个关键组件,是协调各服务调用和状态监控以及服务路由的关键点,
2. 注册中心特性
- 服务注册、
- 服务发现、
- 健康检查、
- 集群节点间的心跳机制等等,
- 集群架构要么是平级结构、要么是主从结构。节点之间必须考虑服务的数据信息同步,而一旦是主从结构,就必须考虑主节点leader的选举等等功能,而选举过程,只是算法不一样而已。
2.1 CAP(布鲁尔定理)
它指出对于一个分布式计算系统来说,不可能同时满足以下三点:
- 一致性(Consistency) (等同于所有节点访问同一份最新的数据副本)
- 可用性(Availability)(每次请求都能获取到非错的响应——但是不保证获取的数据为最新数据)
- 分区容错性(Partition tolerance)(以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。)
根据定理,分布式系统只能满足三项中的两项而不可能满足全部三项。理解CAP理论的最简单方式是想象两个节点分处分区两侧。允许至少一个节点更新状态会导致数据不一致,即丧失了C性质。如果为了保证数据一致性,将分区一侧的节点设置为不可用,那么又丧失了A性质。除非两个节点可以互相通信,才能既保证C又保证A,这又会导致丧失P性质。
-
CAP三个特性只能满足其中两个,那么取舍的策略就共有三种:
-
CA without P:如果不要求P(不允许分区),则C(强一致性)和A(可用性)是可以保证的。但放弃P的同时也就意味着放弃了系统的扩展性,也就是分布式节点受限,没办法部署子节点,这是违背分布式系统设计的初衷的。传统的关系型数据库RDBMS:Oracle、MySQL就是CA。
-
CP without A:如果不要求A(可用),相当于每个请求都需要在服务器之间保持强一致,而P(分区)会导致同步时间无限延长(也就是等待数据同步完才能正常访问服务),一旦发生网络故障或者消息丢失等情况,就要牺牲用户的体验,等待所有数据全部一致了之后再让用户访问系统。设计成CP的系统其实不少,最典型的就是分布式数据库,如Redis、HBase等。对于这些分布式数据库来说,数据的一致性是最基本的要求,因为如果连这个标准都达不到,那么直接采用关系型数据库就好,没必要再浪费资源来部署分布式数据库。
-
AP wihtout C:要高可用并允许分区,则需放弃一致性。一旦分区发生,节点之间可能会失去联系,为了高可用,每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。典型的应用就如某米的抢购手机场景,可能前几秒你浏览商品的时候页面提示是有库存的,当你选择完商品准备下单的时候,系统提示你下单失败,商品已售完。这其实就是先在 A(可用性)方面保证系统可以正常的服务,然后在数据的一致性方面做了些牺牲,虽然多少会影响一些用户体验,但也不至于造成用户购物流程的严重阻塞。
-
3. 选型
- eureka
- console
- zookeeper
- Nacos
序号 | 比较项 | Eureka | zookeeper | Nacos | Consul |
---|---|---|---|---|---|
1 | 集群结构 | 平级 | 主从 | 支持平级和主从 | 主从 |
2 | 集群角色 | 主人 | Leader、follower observer | leader、follower、candidate | server-leader、server以及client |
3 | 是否可以及时知道服务状态变化 | 不能及时知道 | 会及时知道 | 不能及时知道 | 不能及时知道 |
4 | 一致性协议(CAP) | 注重可用性(AP) | 注重一致性(CP) | 支持CP和AP-如何实现 | 注重一致性(CP) |
5 | 雪崩保护 | 有 | 没有 | 有 | 没有 |
6 | 社区是否活跃 | Eureka2.0不再维护了 | 持续维护 | 持续维护 | 持续维护 |
7 | 管理端 | 有现成的eureka管理端 | 没有现成的管理端 | 有现成的管理端 | 有现成的管理端 |
8 | 负载均衡策略 | 使用ribbon实现 | 一般可以直接采用RPC的负载均衡 | 权重/metadata/Selector | Fabio |
9 | 权限控制 | 无 | 使用ACL实现节点权限控制 | RBAC-用户、角色、权限 | ACL |
10 | Spring Cloud集成 | 支持 | 支持 | 支持 | 支持 |
11 | 健康检查 | Client Beat | Keep Alive | TCP/HTTP/MYSQL/Client Beat | TCP/HTTP/gRPC/Cmd |
12 | 自动注销实例 | 支持 | 支持 | 支持 | 不支持 |
13 | 访问协议 | HTTP | TCP | HTTP/DNS | HTTP/DNS |
14 | 是否可用作配置中心 | 否 | 是 | 是 | 是 |
15 | 多数据中心 | 不支持 | 不支持 | 不支持 | 支持 |
16 | 跨注册中心同步 | 不支持 | 不支持 | 支持 | 支持 |
17 | Dubbo集成 | 不支持 | 支持 | 支持 | 不支持 |
18 | K8S集成 | 支持 | 支持 | 支持 | 支持 |
4. 总结
注册中心多样化,根据不同场景选用合适的组件.