← 中文资源

简体中文版本

保证读己之写一致性

写入后把用户读请求路由到主库,或携带版本令牌,使用户不会看到自己的改动在副本上消失。

阅读英文原文

概述

副本延迟在用户读取自己的写入之前都无妨。读己之写是按会话的例外:在有限窗口内把写者导向主库,或按复制位置门控读取,其余流量留在副本。

关键步骤

  1. 写入后把写入时间或版本记入用户会话。
  2. 会话需要新鲜度时把读取路由到主库,否则用副本。
  3. 在复制延迟被充分覆盖后让粘滞窗口过期。
  4. 也可跟踪副本回放位置,仅当其超过写入位置时才读取。

验证

  • 保存后用户立即看到自己的写入。
  • 窗口过后读取回落到副本。
  • 复制延迟不会掩盖用户最新改动。
  • 容量不会永久钉在主库上。

注意事项

  • 读己之写是按用户的,不提供全局一致,不适用于所有读者必须看到同一取值的场景。
  • 位置跟踪需要副本支持底层位置机制。

适用范围

本条目围绕「保证读己之写一致性」给出可复制的步骤、验证方式与常见问题,适合需要按此流程落地的工程团队。执行时请结合自身上下文调整命令与阈值,并在变更前后留存证据,便于后续复核与回滚。

const fresh = session.lastWriteAt && Date.now() - session.lastWriteAt < 5000;
const conn = fresh ? primary : replicaPool.pick();