1. Read Your Writes、Monotonic Reads、Read After Write、Causal Consistency 在客户端/代理/数据库协同实现?
请说明 Read Your Writes、Monotonic Reads、Read After Write、Causal Consistency 在客户端/代理/数据库协同实现?
- 四种一致性保证语义
- 客户端/代理/数据库协同
- 会话级一致性弱于强一致、强于最终一致
这些是会话级一致性保证(Session Guarantees),可在客户端、代理、数据库协同实现:
- Read Your Writes(读己之写):客户端写入后能读到自己的写入。实现:客户端把写入路由到能反映该写入的副本(粘性会话),或记录写入版本,读取时等待该版本。
- Monotonic Reads(单调读):客户端不会读到比之前更旧的数据。实现:客户端记录上次读到的版本,读取时选择不落后于该版本的副本,或路由到同一副本。
- Read After Write(读后写):写后读必须读到新写,是 Read Your Writes 的强化(保证写入后立即读到)。
- Causal Consistency(因果一致):有因果关系的操作按因果顺序可见(如 A 发消息 B 回复,B 的回复不能在 A 的消息之前可见)。实现:用版本向量/因果依赖跟踪,客户端/代理按因果顺序返回。 协同实现:客户端生成/记录版本与因果关系,代理(网关/路由)根据版本选择副本或等待,数据库管理副本与版本。三者协作:客户端跟踪会话状态,代理做路由/等待,数据库提供版本与副本,实现"按会话/因果关系有序"的保证,而非全局强一致。
这四种一致性是"按会话/因果"的弱于强一致、强于最终一致的保证。客户端跟踪版本、代理路由等待、数据库版本化副本,协同实现用户可感知的一致性。