概述
副本延迟在用户读取自己的写入之前都无妨。读己之写是按会话的例外:在有限窗口内把写者导向主库,或按复制位置门控读取,其余流量留在副本。
关键步骤
- 写入后把写入时间或版本记入用户会话。
- 会话需要新鲜度时把读取路由到主库,否则用副本。
- 在复制延迟被充分覆盖后让粘滞窗口过期。
- 也可跟踪副本回放位置,仅当其超过写入位置时才读取。
验证
- 保存后用户立即看到自己的写入。
- 窗口过后读取回落到副本。
- 复制延迟不会掩盖用户最新改动。
- 容量不会永久钉在主库上。
注意事项
- 读己之写是按用户的,不提供全局一致,不适用于所有读者必须看到同一取值的场景。
- 位置跟踪需要副本支持底层位置机制。
适用范围
本条目围绕「保证读己之写一致性」给出可复制的步骤、验证方式与常见问题,适合需要按此流程落地的工程团队。执行时请结合自身上下文调整命令与阈值,并在变更前后留存证据,便于后续复核与回滚。
const fresh = session.lastWriteAt && Date.now() - session.lastWriteAt < 5000;
const conn = fresh ? primary : replicaPool.pick();