.. _dist-sys-consistency: Consistency (一致性) ============================================================================== 本章讨论为了实现一致性, 通常由那些解决方案. 首先要明白, 一致性有多个不同级别. 简单来说有两种: - 强一致 - 最终一致 .. contents:: Table of Content :depth: 2 :local: 什么是 Consistency ------------------------------------------------------------------------------ 在分布式系统语境下, 一致性指的是在分布式的多个节点中, 一旦系统确认状态发生了更改, 所有的节点上的状态应该是一致的. 举例来说集群说你的把银行账户余额变更为了 1200 元, 那么所有的节点上你余额的状态应该都是 1200 元. 在该语境下, 一致性也有不同级别: - Strong consistency (强一致), 最高级别. 你的写入成功后, 立即从任意节点读获得的数据应该是一样的. - Eventual consistency (弱一致), 工业常用, 你写入成功后立刻读, 大概率读到正确数据, 小概率读到的是旧数据. 过一段时间后 (工业界通常是 1 秒以内) 所有的节点都能读到正确数据. Strong Consistency (强一致) ------------------------------------------------------------------------------ 我们来讨论两种场景: - 银行 A 要求向银行 B 转账 $100, 两个银行的数据库系统记录必须要同时完成或者同时失败. - 用户在某银行中要求从 账户 A 向 账户 B 转账 $100, 两条记录保存在同一个数据库的同一个表中. Eventual Consistency 弱一致 ------------------------------------------------------------------------------