/**
* @一致性和复制
* @进行复制的原因
* @数据复制可以提高系统的可靠性。如果一个文件系统已经实现数据复制,当一个副本损坏之后,文件系统只需要转换到另一个数据副本就可以继续工作
* @数据复制可以提高系统性能,当区域和数量线性扩展时,通过对服务器的复制便意味着对数据的复制,更好的利用多集群处理能力
*
* @作为扩展技术的复制
* @可扩展问题往往以性能问题的形式出现
* 将数据和对象的副本放置在使用他们的进程的附近,可以减少访问时间,提高性能,从而解决可扩展性问题。
*
* @以数据为中心的一致性模型
* @一致性模型实质上是进程和数据存储之间的一个约定
* 即如果进程同意遵守某些规则,那么数据存储将正常运行,
*
* @持续一致性
* 暂时性的把这些更新应用到一个本地副本,等待所有副本达成全局一致
* 因此可能需要回滚某些更新,在成为永久更新之前,以不同的顺序进行更新
*
* @一致性单元
* 一致性单元表示的是其一致性可以度量的单元
*
* @一致的操作顺序
* @顺序一致性
* 时间轴的水平绘制方式————从左到右
*
* @因果一致性
* 所有进程必须以相同的顺序看到具有潜在因果关系的写操作。
* 不同机器可以以不同的顺序看到并发的写操作
*
* @分组操作
* @在一个进程对被保护的共享数据的所有更新操作执行完成之前,不允许另一个进程执行对同步化变量的获取访问
* @如果一个进程对某个同步化变量正进行互斥模式访问,那么其他进程就不能拥有该同步化变量,即使是非互斥模式也不行
* @某个进程对某个同步化变量的互斥模式访问完成后,除非该变量的拥有者执行完操作,否则任何其他进程对该变量的下一个非互斥模式访问也是不允许的。
*
* @一致性与相干性
* @一致性模型描述的更多的是多个进程并发的作用于数据的数据集
* 如果该数据集遵守模型的描述的规则,那么一致性
*
* @数据一致性关注的是数据项集,而相关性模型关注的只是单个数据项
* 假设某个数据项在多个地方被复制,当各个副本遵守相关模型定义的规则时,我们称之为相关的
*
* @以客户为中心的一致性模型
* @最终一致性
* 这种形式——如果一段很长时间内没有更新操作,那么所有的副本将逐渐的称为已执行的
* 如果没有更新操作,所有副本逐渐成为相互完全相同的副本
* @最终一致性要求更新操作被保证传播到所有副本
*
* @单调读
* 如果一个进程读取数据项x的值,那么该进程对x执行的任何后续读操作将总是得到第一次读取的那个值或更新值
*
* @单调写
* 一个进程对数据项x执行的写操作必须在该进程对x执行任何后续写操作之前完成
*
* @读写一致性
* 一个进程对数据项x执行一次写操作的结果总是会被该进程对x执行的后续读操作可见。
*
* @写读一致性
* 同一进程对数据项x执行的读操作之后的写操作,保证发生在与x读取值相同或比之更新的值上
*
* @复制管理
* @副本服务器的位置
* 管理和商业问题而不是技术优化问题主要,对客户和网络属性的分析有助于做出决策。
*
* @内容复制与放置
* @永久副本
* 构成分布式数据存储的副本的初始集
* @服务器启动的脚本
* 是为了提高性能而存在数据存储副本,改副本是在初始化数据存储的所有者创建。
* @客户启动的副本
* 客户初始化时候创建的副本——普遍认为是客户高速缓存
* 高速缓存的管理完全是有客户负责,客户从中获取副本而不负责保持高速缓存数据的一致性
* 客户可以依靠数据存储通知缓存什么时候过时
*
* @内容分发
* @状态和操作
* 一个重要的设计问题是,将要实际传播哪些信息?
* @只传播更新的通知
* @把数据从一个副本传递到另一个副本
* @把更新操作传播到其他副本
*
* @无效化协议
* 使用传播通知方式,通知其它副本已经发生了更新操作,其他副本包含的数据不在有效。
*
* @复制协议
* 不传送任何参数,副本自己知道应该执行的更新操作
*
* @推拉协议
* @基于推协议
* 基于服务器协议
* 不需要其它副本请求更新,这些更新就会传播到那些副本里
* 永久副本和服务器启动副本之间通常基于推的方式
*
* @基于拉协议
* 一台服务器或客户请求其它服务器,向它发送该服务器此时持有的任何更新
*
*/
图片来源《分布式系统原理和范型》