分布式系统
分布式系统的挑战
CAP原则
一致性 ─ 每次访问都能获得最新数据(但可能会收到错误响应)
可用性 ─ 每次访问都能收到非错响应(但不保证获取到最新数据)
分区容错性 ─ 在任意分区网络故障的情况下系统仍能继续运行
网络并不可靠,分区容错(P)是一定需要的, 因此设计系统时需要在可用性(A)和一致性(C)间进行权衡。如果你的业务需求需要原子读写,CP 是不错的选择;如果业务需求允许最终一致性或当有外部故障时要求系统继续运行,AP 是一个不错的选择。
Object Oriented Programming != Network Programming
实现一致性的方法:冗余、分片。
处理网络分区:如果系统组件之间的通信时延大于系统事件(比如说系统请求)的间隔,则会发生网络分区。
不可靠的时钟:需要使用逻辑时钟等保序。
有两种支持高可用性的模式: 故障切换(fail-over) 和复制(replication)。 需要考虑一些临界状态机状态,包括主从切换、负载均衡(主主切换)。
Fault tolerance
Replica solves fail-stop and faults, but not bug.
调试理论:如果我们能判定任意程序状态的正确性,那么给定一个 failure(可观测),我们可以通过二分查找定位到第一个 error 的状态,此时的代码就是 fault (bug)。
虚拟机容错的一些细节:
VMM 作为控制平面,模拟了网络,虚拟机之前是分享以太网资源的(共用 TCP channel,如果接管时返回了两次响应,SEQ 也会被重用,会在 Client 端作为重传 TCP 帧被忽略)。
为保持一致性,异步的网络控制默认是关闭的,多核等不确定性状态转换指令也不受支持。
OUTPUT RULE

TAS(Test-and-Set Server)对共享资源的某个地方设置标识位等,达到类似于“锁”的效果。即 P/B 交互网络断线而与 client 通信的网络正常,为防止发生 split-brain,引入此第三方仲裁决定谁是P。
最后更新于
这有帮助吗?
