随着业务系统的不断壮大,单点的服务已经不能够满足庞大的业务数据,分布式服务也就应际而生。
一个系统可能有多个节点组成,每个节点都可能需要维护一份数据。那么如何维护各个节点之间的状态,如何保障各个节点之间数据的同步问题就是大家急需关注的事情了。
CAP定理是分布式系统中最基础的原则。所以理解和掌握了CAP,对系统架构的设计至关重要。
CAP
Consisteny(一致性)
Availability(可用性)
Partition tolerance(分区容错性)
CAP定理也称为布鲁尔定理,它提出对于一个分布式系统而言,任何分布式系统只能同时满足这三项中的两项。
我们先分别看一下 Consisteny(一致性)、Availability(可用性)、Partition tolerance(分区容错性)的含义。
Consisteny
对于任何客户端来说,每次的读操作,都能获得最新的数据。
也就是说当某个节点写入一条数据,这个时候其他节点能读取到,保持数据一致性。
Availability
可用性的要求是指,每个请求都能在合理的时间内获得符合预期的响应(不保证获取的结果是最新的数据)
简单理解就是客户端每次向任意节点发起请求都能得到响应,但不要求保证数据的时效性
Partition tolerance
分区容错性指:当节点之间的网络出现问题之后,系统依然能正常提供服务。
CAP组合应用
我们知道有 CA、CP、AP 三种组合方式,但是在分布式系统的结构下,网络是不可能做到100%可靠的。既然网络不能保证绝对可靠,那 P(分区容错性)就是一个必选项了。
原因如下:
如果选择 CA组合,放弃 P,当发生节点间网络故障时,为了保证 C(一致性),那么就必须将系统锁住,不允许任何写入操作,否者就会出现节点之间数据不一致了,但是锁住了系统,就意味着当有写请求进来的时候,系统是不可用的,这一点又违背了 A(可用性)原则。
因此分布式系统理论上是不可能有CA组合的,所以我们只能选择 CP 和 AP组合架构。
CAP 注意事项
当我们构建服务的时候,就需要根据业务特性作出权衡考虑,哪些点是当前系统可以取舍的,哪些是应该重点保障的。
比如:
用户模块的数据(账密、钱包余额等)对一致性的要求很高,就可以采用CP架构。
而对于一些商品信息方面的数据对一致性要求没那么高,对可用性要求更高一些,那么这个模块的数据就可以采用AP架构。
总结
喜欢文章的小伙伴麻烦点赞、关注作者,欢迎留言交流!