【0】CAP定理

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

  • 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数据同步后在返回处理结果,这样就无法保证请求在特定时间内返回结果了,就丧失了服务的可用性了。

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

        以上均是个人理解,不妥之处往指正。

转载于:https://my.oschina.net/u/3293327/blog/3044006

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值