cap理论? cp ap原则的含义

CAP的定义

一、C全称Consistency(一致性) 这个表示所有节点返回的数据是一致的。

二、A全称Availability(可用性)说白了就是某个节点坏了,不能影响其他的节点业务。

三、P全称Partition tolerance(分区容错性)当系统中有节点因网络原因无法通信时,系统依然可以继续运行。

可用性和容错性的区别

可用性是针对非故障节点,如主mysql节点挂了,但从mysql没有挂,而且从mysql照样提供服务,就说明此分布式系统具有可用性。

分区容错性是各个节点出现网络问题时,系统依然可用。如主Mysql和从Mysql 之间没法通信时,系统可用。

总结:可用性针对节点出现故障,系统可用;分区容错性针对网络出现问题,系统可用

CAP定理

我们了解了CAP中的三个定义,CAP定理是表示分布式系统只能满足三项中的两项,而不可能满足全部三项。即分布式系统只能满足三种情况:CA、AP、CP。

我们来分析一下,我们先看P,也就是分区容错性;在分布式系统中,网络异常是不可避免的,所以如果不保证分区容错性,除非节点间网络不会发生异常,这个是不可能的(除非单机系统,单机系统就不是分布式系统)。

分布式系统肯定要实现P,那其实CA是理论上面的,其实不存在。

在我们架构师开发分布式系统时,是需要根据业务进行权衡的。在我们大型互联网公司,因为机器数量庞大,网络故障是常态,一般选择AP原则,牺牲掉数据一致性。(一些金融产品对数据一致性要求很高的,就会选择CP)。

我们看看常用的分布式系统的权衡:

1、Redis中间件 ----> AP

2、RocketMQ中间件 -----> AP

3、分布式事务-2pc ----> CP
4、分布式事务-最大努力尝试 —> AP

5、Eureka —> AP

Nacos CP/AP模式切换及微服务临时/永久实例配置

Nacos 集群默认支持的是CAP原则中的AP原则,但是也可切换为CP原则,切换命令如下:

curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'

同时微服务的bootstrap.properties 需配置如下选项指明注册为临时/永久实例
AP模式不支持数据一致性,所以只支持服务注册的临时实例,CP模式支持服务注册的永久实例,满足配置文件的一致性

#false为永久实例,true表示临时实例开启,注册为临时实例
spring.cloud.nacos.discovery.ephemeral=false

  

posted @ 2021-03-25 13:55  hzy_叶子  阅读(1148)  评论(0编辑  收藏  举报