单调读一致性(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 (或更高)
  • 不退步:保证用户看到的数据状态是不断演进的,不会出现“一会儿看到新数据,一会儿又看到旧数据”的诡异现象。
  • 不保证最新:它并不保证你能读到全系统的最新值,只保证你读到的值不会比你之前读到的更旧。

实现手段

  • 数据路由:确保同一用户的请求按顺序路由到同步进度一致或更领先的副本。
  • 客户端版本跟踪:客户端记录已读到的最大版本号/时间戳,请求时携带此信息,服务端确保返回不低于该版本的数据。

适用场景

  • 消息流读取(不会出现已读消息突然消失又出现的情况)。
  • 分布式系统中的状态监控。