知识卡片

双重ACK确保写操作的持久性与一致性

专业/工作 · 513.c.2

内容

从副本对一次同步写操作要回两次 ACK:一次是事务已提交到本地日志(commit,代表数据已持久化不会丢),一次是事务已经真正应用到对象数据上(applied)。主副本必须等所有处于 up 状态的副本都返回成功的 commit ACK,才向客户端回复写成功,这比笼统地”等所有从副本应答”更精细——应答本身被拆成两个独立的确认点。把”数据不会丢”和”数据已经生效可读”分成两个可以独立观测的状态,使得系统能够精确知道每个副本当前处于哪个中间状态,为后续判断某个副本是否需要恢复提供了更细粒度的依据。

参考来源

《Ceph源码分析》第6章《Ceph的数据读写》