单调读一致性(Monotonic Read Consistency) 保证了数据读取的“时间轴永远向前”。它确保用户在观察数据时,不会经历数据状态的“时光倒流”,即一旦读到了某个较新的版本,后续就不会再读到更旧的版本。
核心概念
如果一个进程已经读到了数据的某个版本 ,那么该进程在后续的所有读操作中,绝不会读到比 更旧的版本。
sequenceDiagram participant User as 用户 participant S1 as 副本 A (较新) participant S2 as 副本 B (较旧) User->>S1: 1. 读请求 S1-->>User: 2. 返回版本 V2 Note over User: 客户端记录已读到 V2 User->>S2: 3. 读请求 (路由到较旧副本) Note over S2: 发现 V1 < V2 S2-->>User: 4. 阻塞等待同步或重定向 S2-->>User: 5. 返回版本 V2 (或更高)
- 不退步:保证用户看到的数据状态是不断演进的,不会出现“一会儿看到新数据,一会儿又看到旧数据”的诡异现象。
- 不保证最新:它并不保证你能读到全系统的最新值,只保证你读到的值不会比你之前读到的更旧。
实现手段
- 数据路由:确保同一用户的请求按顺序路由到同步进度一致或更领先的副本。
- 客户端版本跟踪:客户端记录已读到的最大版本号/时间戳,请求时携带此信息,服务端确保返回不低于该版本的数据。
适用场景
- 消息流读取(不会出现已读消息突然消失又出现的情况)。
- 分布式系统中的状态监控。