会话一致性(Session Consistency) 是一种“不让用户感到困惑”的一致性。它允许系统在后台慢慢同步数据(最终一致性),但通过技术手段(如让你的请求一直落在同一台机器上)确保你不会看到自己刚提交的数据“离奇失踪”。

核心概念

它保证在同一个会话(Session)内,用户能够立刻读到自己刚刚提交的更新。但对于其他会话的用户,可能在短时间内仍然看到旧数据。

sequenceDiagram
    participant User as 同一用户
    participant App as 应用节点 A
    participant DB as 数据库 (Master)
    participant Replica as 从库 (Slave)

    User->>App: 1. 更新资料 (X=1)
    App->>DB: 2. 写入主库
    DB-->>App: 3. 成功
    App-->>User: 4. 更新成功
    Note over User, Replica: 此时主从同步尚未完成
    User->>App: 5. 再次读取 (Session 保持)
    App->>DB: 6. 强制读主 (或路由到已同步节点)
    DB-->>User: 7. 返回 X=1 (自己刚写的)
  • 单用户视角:只保证“我写的我能看见”。
  • 性能平衡:相比强一致性,它允许副本间存在短暂的同步延迟,从而提升了系统的响应速度。

实现手段

  • 会话粘性 (Session Stickiness):通过负载均衡(如 IP Hash)确保同一用户的请求始终发往同一个节点。
  • 版本跟踪 (Version Tracking):客户端记录写入的版本号,读取时要求服务端返回不低于该版本的数据。
  • 主库路由:在写操作发生后的短时间内,该用户的读请求被强制路由到主库。

适用场景

  • 社交媒体发布(发完朋友圈自己能立刻看到)。
  • 个人资料修改。