标准答案

  1. 先按业务对象和操作阶段定义一致性等级,不要把“读副本”作为通用性能开关。
  2. 用户刚写入后需要读己之写的流程,可在短时间内粘到主库、携带最小复制位点或返回写入结果避免立即回读。
  3. 余额、支付、订单状态推进、权限撤销和库存确认应以强一致来源为准,不能因副本延迟做错误决策。
  4. 商品详情、历史报表、搜索结果和趋势统计通常可标注更新时间后读取副本或异步读模型。
  5. 需要监控复制延迟、落后副本比例和路由命中,延迟超过阈值时降级到主库或限制非关键查询。

题目解析

一致性不是技术团队单独决定的参数,而是产品契约。比如“订单列表晚几秒看到新订单”可能可接受,“支付成功后显示待支付并允许再次付款”则不可接受。把这些差异写进接口和路由策略,才能避免隐性事故。

回主库也不是无限制的兜底。若复制长期落后,所有读都回主库会把主库压垮,因此还要修复复制瓶颈、限制流量并对用户暴露可解释的延迟状态。

常见误区

  • 只按接口是 GET 还是 POST 判定一致性,而不看 GET 是否参与资金、权限或状态决策。
  • 复制延迟报警后简单把全部读切回主库,导致主库过载引发更大故障。

作者信息