注册中心
注册中心是什么
注册中心将所有的服务都注册到这里来统一管理,调用者到注册中心获取提供服务的地址,然后再进行调用,避免了服务之间的直接调用,方便后续的水平扩展、故障转移等。
主流的注册中心有 Zookeeper、Eureka、Consul、Nacos
等。
CAP
在一个分布式系统中,Consistency(一致性),Availability(可用性),Partition tolerance(分区容错性),三者不可兼得。
- 一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(所有节点在同一时间的数据完全一致,越多节点,数据同步越耗时)
- 可用性(A):负载过大后,集群整体是否还能响应客户端的读写请求。(服务一直可用,而且是正常响应时间)
- 分区容错性(P):分区容忍性,就是高可用性,一个节点崩了,并不影响其它的节点(100个节点,挂了几个,不影响服务,越多机器越好)
CA 满足的情况下,P 不能满足的原因:数据同步(C)需要时间,也要正常的时间内响应(A),那么机器数量就要少,所以 P 不满足。
CP 满足的情况下,A 不能满足的原因:数据同步(C)需要时间,机器数量也多(P),但是同步数据需要时间,所以不能再正常时间内响应,所以 A 不满足。
AP 满足的情况下,C 不能满足的原因:机器数量也多(P),正常的时间内响应(A),那么数据就不能及时同步到其他节点,所以 C 不满足。
在分布式存储系统中,最多只能实现上面的两点。由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容忍性是必须需要实现的。所以只能在一致性和可用性之间进行权衡。
Zookeeper
CP 设计,保证了一致性,牺牲了可用性。
集群搭建的时候,某个节点失效,则会进行选举行的 leader,选举 leader 过程中集群不可用。或者半数以上节点不可用时,则无法提供服务,因此可用性没法满足。适合金融项目,与钱相关。对数据一致性要求较高时使用,数据最终一致。
当向注册中心查询服务列表时,可以容忍注册中心返回的是几分钟前的注册信息,但不能接受服务直接 Down 掉不可用。也就是服务注册功能对可用性的要求高与一致性。
Zookeeper 一旦 master 节点因为网络故障与其他节点失去联系时,剩余节点会重新进行 leader 选举,时间约(30-120s),期间整个集群不可用,注册服务瘫痪。在云部署环境下,因网络问题使集群失去 master 节点是较大概率事件,虽然服务最终能够恢复,但是漫长的选举时间导致的注册长期不可用是难以容忍的。