直接回答:最终一致性是弱一致性模型:系统不保证写入后立刻所有副本都读到新值,但保证如果没有新的写入,经过一段时间后所有副本会收敛到同一状态。它是分布式系统在可用性与强一致之间的常见取舍。
展开解析:典型实现机制:
- 异步复制:主库写入即返回,从库滞后应用日志(如 MySQL 异步主从)。
- 消息驱动:业务写库后发消息,下游异步更新缓存/搜索索引,配合重试与幂等。
- 冲突解决:多主写入需要向量时钟、LWW(最后写入获胜)或 CRDT 收敛。
工程要点:"最终"多久没有保证,要做好监控延迟;常见增强手段有读己之写(读自己写过的主库)、单调读、会话一致性;对账任务兜底修复不一致。适合场景:社交 feed、库存展示、缓存刷新;不适合强一致场景:扣款、库存强约束。
追问方向:与强一致(线性一致性)的区别、BASE 与 ACID 的关系、常见的不一致窗口如何处理。