1、分布式复制的原因
目的
有两个:可靠性和性能
- 为何可以提高可靠性
如果只有数据,如果这个数据本体坏了,这样就没有数据可以访问了,所以如果多个副本即使一个坏了,还有一个备份可以访问 - 为何可以提高性能
如果所有的用户访问都只访问一个数据,增加了访问负载,如果对服务器进行复制,分担负载,自然就提高性能
问题
多个副本就存在数据不一致的问题,所以一致性又是一个需要解决的前提问题
2、一致性模型
没有绝对的一致性(实现原子是相当的困难),解决方案
放宽一致性的限制
2.1 数据为中心的一致性模型(从数据存储的角度提供一致性)
副本之间的数值偏差
副本之间新旧程度的偏差
更新操作顺序的偏差
2.2 客户为中心的一致性模型(最终一致性)
2.2.1 最终一致性
如果在很长一段时间内没有更新操作,那么所有的副本会逐渐的一致,这种形式成为最终一致性
但是如果用户移动了,前一个访问的副本的数据换了个位置访问一个新的位置,如果之前的同步还没有同步到这个副本咋办呢?这就需要一客户为中心的模型了
2.2.2 单调读一致性模型
如果一个进程读取数据项X的值,那么该进程对X执行的任何后续读操作将总是得到对此读取的那个值或者更新的值。
2.2.3 单调写一致性模型
一个进程对数据项X执行的写操作必须在该进程对X执行任何写后续操作之前完成。
2.2.4 读写一致性模型
一个进程对数据项X执行一次写操作的结果总是会被盖进程对X执行的后续读操作看见
2.2.5 写读一致性模型
同一个进程对数据项X执行的读操作之后的写操作,保证发生在与X读取值相同或比之更新的值上
2.3复制管理
2.3.1副本服务器的放置
通过距离(延迟和带宽度量)找到最优的副本
通过区域知道最优的副本
2.3.2内容复制
1.永久副本原始的数据集
2.服务器启动的副本
服务器启动的副本是为提高性能而存在的数据存储的副本,通过原始数据创建根据需要动态的产生的临时性副本;eg比如热点问题负载过高产生临时的热点副本提高性能
3.客户启动的副本
客户端创建的副本,存储在本机或者临近的局域网的计算机上,改善访问速度,一般有过期时间的限制
2.4内容分发(如何更新副本)
2.4.1分发哪些操作
1.只传播更新的通知
通知指定的副本无效了,有请求过来需要根据一致性更新副本
2.把数据从一个副本传递到另一个副本
直接传递被修改的数据,适用于读写比率高时,比较有用
3.把更新操作传播到其他副本
告诉各个副本应该执行的更新操作
2.4.2更新是通过推协议还是拉协议
1.推协议服务器要向每个客户发送更新
2.拉协议客户需要轮询服务器
3.最终要变了一种租用机制(在指定的时间内推送更新到期之后客户自己去拉取数据或者快到期再去租用一个新的)
2.4.3单播多播
与推拉关联的一个问题是用单播还是多播
2.5一致性协议
1、基于主动备份的协议
1.1远程写协议
1.2本地写协议
2、复制的写协议
2.1主动复制
2.2基于多数表决的协议
基本思想要求客户在读或写一个复制的数据项之前向多个服务器提出请求,获得许可。