本文主要是介绍分布式之CAP定理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
总结自:
1.CAP Theorem:Revisited
2.网络编程(七):CAP原理推导和应用
先说定义吧
一致性(Consistency):对于某次读取返回的内容是该信息的最新版本。
可用性(Availability):一个正常工作的节点,对于client的请求会在合理的时间内返回一个合理的响应,这个响应不应该是错误也不应该是请求超时。
分区容忍性(Partition Tolerance):当网络分区发生时,系统仍然工作正常。
说说一些注意事项以及认识
1.一致性
不一致并不是像移动通信里面的错误一样,由于干扰的存在产生传输的数据都解码出来错误了。
比如本来拷贝一个变量x,值为1,从node1拷贝到node2,发生错误变成了值为2。
(1)不一致主要是因为需要维护变量x的多个副本,在有些节点或者网络故障的时候,一些对于x变量的修改操作没有在某些节点里面进行,
导致了不同节点之内表示的同一个变量的值不一致。
(2)少数派在crash之后或者在被partition之后,recovery出来执行一些已经执行、没有执行反正不一样的动作。
2.可用性
可用性的概念就是上面提到的概念。值得注意的是,在分析系统的时候我们也经常会将具备可用性的概率也称作可用性。
比如,如果对于单机系统,如果宕机的概率是p,那么就有1-p的概率是具备可用性的,习惯上我们也说可用性是1-p
3.分区容忍性
要弄清分区容忍性,首先就要清楚什么是network partition
network partition就是说,由于网络设备的故障导致原来的网络分裂为2个,分裂出来的2个网络现在是不能互通的了。
而分区容忍性就是说,当network partition发生的时候,系统也能工作正常。
系统也能正常工作的意思是说,系统并没有随着network partition也表现出分裂为两部分的现象,
系统对外仍然表现为仿佛只存在一个统一的整体,并对外提供服务。
4.可用性和分区容忍性的区别
其实在上面的3中,关于分区容忍性的概念还有一个比较模糊的地方,就是什么是系统工作正常。
其实这个系统正常工作就是能不能正常对外提供服务,换句话说就是client来了一个请求,会是一个怎样的结果。
从这个角度来说可用性和分区容忍性的确有很大的相似程度。
我们不妨将整个系统划分为以下几个部分:client、distributed system(node + network)
而我们又可以将distributed system划分为:network和node部分,其中network是node之间通信的网络,而node是对client提供服务的逻辑实体。
我现在的认识是,凡是node对于提供服务的影响就是可用性,凡是network对于提供服务的影响就是分区容忍性。
将这个概念带入到网络编程(七):CAP原理推导和应用里面提供的几个模型中去分析,感觉还是比较清晰地。
特别要注意的是,其实可用性说穿了就是一个请求是否能够顺利达到目的,但是在分析的时候应该对于读请求和写请求分别对待。
因为正如网络编程(七):CAP原理推导和应用里面所列举的,同一个架构下读请求和写请求的可用性改变甚至是相反的。
5.几种网络架构
总结自网络编程(七):CAP原理推导和应用
(1)单机系统
(2)Sharding
(3)多副本读写
(4)Clustering--多副本同步
(5)Clustering--多副本非同步
这篇关于分布式之CAP定理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!