Distributed systems and CAP
718-lecture3
Distributed systems
A distributed system is a collection of independent computers that appear to the users as a single coherent system
两个程序分别运行在两个台主机的进程上,它们相互协作最终完成同一个服务(或者功能),那么理论上这两个程序所组成的系统,也可以称作是“分布式系统”
优势:
更快,更便宜,更可靠,可扩展
劣势:
- Software must be customized
- 网络设置难
- 程序奔溃的原因更复杂了
- 安全设置难
scale up 对比 scale out
- scale up 纵向
- scale out 横向
CAP Theorem / Brewer’s Theorem
1. Partition tolerance
Network failures are tolerated, the system continues to operate
分区容错. 大多数分布式系统都分布在多个子网络。每个子网络就叫做一个区(partition)。
分区容错的意思是,区间通信可能失败。比如,一台服务器放在中国,另一台服务器放在美国,这就是两个区,它们之间可能无法通信。
上图中,G1 和 G2 是两台跨区的服务器。G1 向 G2 发送一条消息,G2 可能无法收到。系统设计的时候,必须考虑到这种情况。
2. Consistency
All nodes see the same data at the same time
一致性。写操作之后的读操作,必须返回该值。举例来说,某条记录是 v0,用户向 G1 发起一个写操作,将其改为 v1。
之后读取就应该得到v1。
问题是,用户有可能向 G2 发起读操作,由于 G2 的值没有发生变化,因此返回的是 v0。G1 和 G2 读操作的结果不一致,这就不满足一致性了。
为了让 G2 也能变为 v1,就要在 G1 写操作的时候,让 G1 向 G2 发送消息,要求 G2 也改成 v1。
3. Availability
Assurances that every request can be processed.
只要收到用户的请求,服务器就必须给出回应。
用户可以选择向 G1 或 G2 发起读操作。不管是哪台服务器,只要收到请求,就必须告诉用户,到底是 v0 还是 v1,否则就不满足可用性。
为什么cap不能同时满足
Suppose we lose communication between nodes: We must ignore any updates the nodes receive, or sacrifice Consistency, or we must deny service until it becomes Available again.
简单的说,如果G1变了,那么在同步G2的过程中,G2的读和写都需要被锁定。不然就违背了一致性,而若是锁定G2那就违背了可用性。而分区容错是一定要有的,因为没人可以保证网络永远不出错。
几个数据库例子