知识卡片
两阶段确认降低强一致写入的延迟感知
内容
如果一定要等所有副本都把数据真正落盘才告诉客户端”写完成”,整体延迟会难以忍受。Ceph把确认拆成两次:所有副本把数据写入内存缓冲区后,就先给客户端发一次确认,客户端此时就可以继续往下执行;等所有副本真正把数据持久化到磁盘后,再发一个最终确认,客户端收到后才可以放心删除本地暂存的数据。这样客户端感知到的延迟只是”写到内存”的速度,而不是”写到磁盘”的速度,同时磁盘持久化这件事仍然在后台按副本一致性的要求完成,安全性没有被牺牲。发散:这是”把耗时的持久化步骤挪到用户感知不到的地方”这一思路的具体体现——多数高性能存储系统在强一致的前提下追求低延迟,靠的都不是绕开持久化,而是把确认时机和真正落盘的时机解耦。
参考来源
《Linux开源存储全栈详解从Ceph到容器存储》第7章《分布式存储与Ceph》