【0】CAP定理

        要讨论分布式,CAP就是一个没法避免的话题。了解些分布式知识的都能轻松说出CAP定理的内容:一致性、可用性和分区容错性只能三取其二,而不能同时知足三者,彷佛这一句话就把这个定理描述完了。这是我以前一个粗鄙的理解,随着学习得不断深刻发现这样去解释CAP定理是不正确的,那么到底该怎么理解呢?咱们再来看看CAP每一个字母的含义:spring

  • Consistency(一致性):在分布式系统中,全部的数据备份,在同一时刻是否一样的值,若是是,则咱们认为知足了一致性。这里的一致性是指的是强一致性。
  • Availability(可用性):在集群的部分节点故障后,集群总体是否能够正常响应请求。
  • Partition tolerance (分区容错性):这里的分区是指网络分区,网络分区能够这样理解,一个服务集群有A、B两个节点,原本A、B之间是能够网络通讯的(来保证数据一致性),但是忽然发生了网络故障,A、B不能再相互访问,这时候咱们认为集群发生了网络分区。

        其实CAP定理本意是想表达当发生网络分区状况时,一致性和可用性只能二选其一。咱们举例说明,一个服务集群由A、B两个节点,A和B分别维护本身的数据副本,而后经过网络达到数据的一致性。当发生网络分区时,A、B之间不能互相访问了,此时,数据的一致性和服务的可用性必须作出二选一的抉择,也就是说当请求发送到A节点时,若是保证服务可用性,则A接收请求而后返回处理结果,此刻A和B的数据副本出现了不一致的状况(B此刻也能够独立处理请求);若是保证数据的一致性,则A接收到请求后,就要等A、B数据同步后在返回处理结果,这样就没法保证请求在特定时间内返回结果了,就丧失了服务的可用性了。sql

        CAP定理在分布式数据库中讨论的比较多,如今流行的Nosql数据库中常常被讨论。分布式服务中是否适用CAP定理,我以为仍是要看具体的设计,若是服务维护多个数据副本(多个数据库),则就会涉及CAP讨论的内容,若是你的数据副本就一份,那就没有讨论CAP的必要了。因此具体要看本身系统的设计,不是说咱们用了spring cloud这种分布式服务架构,就必定会有CAP的问题。数据库

        以上均是我的理解,不妥之处往指正。网络

相关文章
相关标签/搜索