在了解CAP之前我们要知道微服务架构中的注册中心,比如springcloud全家桶中的eruka或者是Dubbo中的zookeeper,那么注册中心的作用是什么呢?为什么微服务架构中要设计注册中心这么一个不可缺少的角色呢?

  • 那么注册中心的作用是什么呢?
    • 首先就是服务管理
      • 服务提供方(provider)在启动时向注册中心注册自己能提供的服务,也就是告诉注册中心自己有哪些接口可以被进行调用
      • 服务消费方  (consumer) 在启动时向注册中心提取需要的服务,也就是从注册中心中获取自己需要的接口信息
    • 心跳机制动态维护
      • provider注册的服务信息并不是注册一次之后就不管了,而是会定时的告诉注册中心自己能提供服务,在consumer来抓取服务的时候,注册中心就会将存活的服务告知consumer
      • 如果provider注册的服务在一定时间内没有向注册中心传递心跳,那么这个服务就不会提供给consumer
  • 为什么微服务架构需要注册中心呢?
    • 首先考虑如果没有注册中心,我们如何管理提供服务的地址呢?
      •  可能会采用配置文件的方式,但是微服务为了保证服务的高可用通常会通过集群部署,服务可能部署了10个?100个?那么当我们需要在微服务中对provier地址进行修改的时候,我们需要修改很多个配置文件,并且我们并不知道这些服务的地址是否能正常的进行访问
    • 使用注册中心呢?
      •  注册中心会根据心跳,负载均衡来提供给我们provider地址,consumer只需要拿取服务即可
  •     CAP定理:指的是在⼀个分布式系统中,Consistency(⼀致性)、 Availability(可⽤性)、 Partition tolerance(分区容错性),三者不可同时获得,只能三选二。
    •   C(数据一致性):所有的节点在同一时间内,数据全部一致,节点越多,数据同步耗时越久
    •         A(可用性):正常响应请求,并且在合理的时间内
    •         P(分区容错性):也就是高可用性,节点越多,那么可用性越强
  •     为何CAP只能二选一?
    • C A 满⾜的情况下,P不能满⾜的原因: 数据同步(C)需要时间,也要正常的时间内响应(A),那么机器数量就要少,所以P就不满⾜
    • CP 满⾜的情况下,A不能满⾜的原因: 数据同步(C)需要时间, 机器数量也多(P),但是同步数据需要时间,所以不能再正常时间内 响应,所以A就不满⾜
    •  AP 满⾜的情况下,C不能满⾜的原因: 机器数量也多(P),正常的时间内响应(A),那么数据就不能及时同步到其他节点,所以C不满足
  •     注册中⼼选择:

       Zookeeper:CP设计,保证了⼀致性,集群搭建的时候,某个节点失效,则会进⾏选举⾏的 leader,或者半数以上节点不可⽤,则⽆法提供服务,因此可⽤性没法满⾜

       Eureka:AP原则,⽆主从节点,⼀个节点挂了,⾃动切换其他节点可以使⽤,去中⼼化

posted on 2021-05-30 22:20  程英俊  阅读(187)  评论(0编辑  收藏  举报