分布式系统

分布式系统的挑战

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。

最后更新于

这有帮助吗?