系统模型
分布式系统模型的主要性质是分布。更确切来说,程序运行在分布式系统。
- 同时运行在独立的节点上
- 通过网络互相连接,可能导致不确定节点以及消息丢失
没有共享的存储时钟
系统模型中的节点
node是用来计算和存储的。他们有
- 运行程序的能力
- 存储数据的能力(内存(不可靠)或硬盘(可靠))
- 时钟(不一定准确)
通信链路
节点之间可以通信的,通过相互发型消息,消息的读写是FIFO(先进先出),消息是可能丢失的
网络分割。当网络GG的时候,就可能发生网络分割,但是这时候有的节点本身却可以被部分客户端访问,所以网络分割的处理方式也和挂掉节点处理方式不同。
。
其实网络不用作提多假设,因为在商业环境中网络还是比较稳定的,除非是远距离传输(延迟)。
时间、序列假设
不同的节点以不同的方式运行。如果node之间的距离各部相同,从一个节点发送到其他节点的消息,到达的时间就会各不相同,消息队列顺序也会不同。
一致性问题
FLP impossibility
假设:节点只会因为crash宕机,网络是可靠度,异步时序,没有网络延迟。在这些假设下,FLP的意义是:不存在一个算法解决一致性问题,即使没有message被丢失。
CAP定理
CAP定理最初是计算机科学家Eric Brewer的一个猜测。是一个很好的思考tradeoff并设计分布式系统的方法。定理阐述了三个性质:
4. 一致性。所有的节点可以同一时间获取到同样的数据
5. 可靠性。节点挂掉不影响其他节点。
6. 网络分割容错。即使消息丢失或网络、节点挂掉,系统也可以继续运行。
只有两个性质可以被同时满足,如图
所以三种性质是不可能同时被满足的。这就让我们有三种选择。
- CA(一致性+可靠性) 例如严格全法定人数协议,例如two-phase commit。 GFS是典型的2PC。
- CP(Consistency + Availability)例如大多数法定人数协议,如果发生Partition,包含较少node的部分将不可用。例如Paxos。VMware的 vSAN 作为分布式存储系统,也属于这类应用
AP (Availibity + Partition tolerance). 弱一致系统。例如Dynamo
CA和CP是强一致性的系统。CA不能容忍网络分割。CP不能容忍2f+1个node中超过f个节点失灵。CA系统吧区分节点宕机还是网络失灵。并且会停止所有写入操作来避免分期。它不能区分几点是宕机了还是网络挂了,所以最安全的方式避免任何写入。
- CP系统通过强制小的网络块失效来保证不出现分歧。
CAP定理可以得出4条结论:
一、早起的分布式关系数据库设计没有考虑网络分割的问题(CA设计)。Partition tolerance 在现代系统中是一个很重要的特性,因为随着节点的增多,网络分割是很容易发生的。
二、强一致性和高可用是相互矛盾的。保证独立的节点们表现的跟一个节点一样(在不可靠的网络中),是很疯狂的。强一致性让我们必须放弃一些可靠性,在网络分割的时候。这是因为我们不可能阻止两个不能互相联系的副本集还要接受两边的写操作。
做法是需要加强一些假设(假设没网络分割)。或者放弃一些保证。一致性和可用性可以tradeoff一下。
三、强一致性和性能之间有矛盾。不解释了
四、如果我们不想放弃可用性(网络分割),那就应该放弃强一致性。当然可用性和一致性并不是恨得二选一,除非你非要强一致性。但是强一致性只是一种一致性model。一致性并非一个单一的且十分清晰的概念。
强一致性和其他一致性模型
一致性有两种情况。强一致性和若一致性。
强一致性。
1. Linearizable consistency
2. Sequential consistency
弱一致性。
1. Client-centric consistency models
2. SCausal consistency: strongest model available
3. Eventual consistency models
强一致性保证系统和非副本的系统是一样的。对系统的用来说是透明的。