副本( replica/copy)指在分布式系统中为数据或服务提供的冗余。分为数据副本和服务副本,对于数据副本指在不同的节点上持久化同一份数据,当出现某一个节点的存储的数据丢失时,可以从副本上读到数据。数据副本是分布式系统解决数据丢失异常的唯一手段。另一类副本是服务副本,指数个节点提供某种相同的服务,这种服务一般并不依赖于节点的本地存储,其所需数据一般来自其他节点。
副本的一致性:分布式系统通过副本控制协议,使得从系统外部读取系统内部各个副本的数据在一定的约束条件下相同
依据一致性的强弱即约束条件的不同苛刻程度,副本一致性分为若干变种或者级别,例如:强一致性 单调一致性 会话一致性 最终一致性 弱一致性
强一致性(strong consistency):任何时刻任何用户或节点都可以读到最近一次成功更新的副本数据。
单调一致性(monotonic consistency):任何时刻,任何用户一旦读到某个数据在某次更新后的值,这个用户不会再读到比这个值更旧的值。用户只关心从己方视角观察到的一致性,而不会关注其他用户的一致性情况。
会话一致性(session consistency):任何用户在某一次会话内一旦读到某个数据在某次更新后的值,这个用户在这次会话过程中不会再读到比这个值更旧的值。会话一致性只保证单个用户单次会话内数据的单调修改。例如 php 中的 session 概念,可以将数据版本号等信息保存在 session 中,读取数据时验证副本的版本号,只读取版本号大于等于 session 中版本号的副本,从而实现会话一致性。
最终一致性(eventual consistency):最终一致性要求一旦更新成功,各个副本上的数据最终将达到完全一致的状态,但达到完全一致状态所需要的时