分布式系统 (大规模分布式系统原理解析和架构实践)
http://blog.csdn.net/u010738184/article/details/49472795
分布式系统的基础理论:
分布式系统:多台机器通过网络连接在一起,作为一个整体为上层提供服务。
一、基础理论知识:数据分布、复制、一致性、容错。
1、异常
(1)服务器宕机(内存错误,服务器停电):如何通过读取持久化戒指(机械硬盘/固态硬盘)中的数据恢复内存信息,从而恢复宕机前某个一致性状态。
(2)网络异常(消息丢失,消息异常):网络永远不可靠,任何一个消息只有接到对方回复才可以认为是成功的。系统设计时要假设出现异常,并采取相应的处理措施。
(3)磁盘故障(磁盘损坏,磁盘数据错误):将数据存储到多台计算机上,校验
2、“超时”
分布式存储系统的“三态”:“成功”,“失败”,‘超时“。
客户端像服务器端发出请求,并且服务器端执行完了此请求,但服务器宕机或者网络异常,导致服务器端不能想客户端发送回复。此时执行结果为超时。(幂等:一直重试直到成功)
二、性能分析
三、数据分布:哈希分布,顺序分布。
(1)哈希分布
根据数据的特征计算哈希值,并将哈希值与集群中的服务器建立映射关系,从而将不同哈希值的数据分布到不同的服务器上。
哈希函数取模。(一致性哈希)
(2)顺序分布(B+树存储结构类似)
(3)负载均衡
每个集群中有一个总控节点,其他为工作节点,由总控节点进行全局调控。
工作节点通过心跳包,将节点负载相关信息(cpu,内存,磁盘,网络等资源使用率)发送给主控节点,主控节点计算出工作节点负载以及需要迁移的数据,生成迁移任务,放入迁移队列中等待执行,负载均衡要控制节奏,若将大量数据同时迁移到工作节点,系统在新增节点的过程中性能会大幅下降。要平滑地进行迁移,一般需要30分钟到一小时。
(4)复制
一般有多个副本。一个主副本多个备副本,主副本的数据复制到其他备副本。通过复制协议将数据同步到多个存储节点,并确保多个副本之间数据的一致性。
复制协议:强同步复制和异步复制(用户请求是否需要同步到被副本才返回成功)
组提交: 主备副本的复制通过操作日志来实现。积攒一定的操作日志,再批量写入到磁盘中。
操作日志的原理:利用磁盘的顺序读写特性,将客户端的写请求顺序写入磁盘, 然后应用到内存中,由于内存是随机读写设备,可以很容易的通过各种数据结构,比如B+树将数据有效的组织起来。
一致性与可用性
一致性:读操作总是能读出前一个写操作的数据。
可用性:当某主机发生故障的时候,不影响读写操作。
(5)容错
故障检测: 租约机制(带有超时时间的一种授权)
机器A检测机器B是否发生故障,则A向B发放租约,B持有的租约在有效期内才允许服务,当B的租约快过期时,可以向A请求续约。当B发生故障,或与A的网络发生故障时,机器B的租约将过期,由于不能及时续约,所以B的租约到期,即主动停止服务。A可确保B不再提供服务,B的服务可安全迁移到其他服务。
故障恢复:
分布式存储系统分为两种结构:单层结构和双层结构
单层结构:当一个主副本失效时,主控节点选另一个备副本作为主副本提供服务。若为临时故障,就等待一小时,重新将其作为副本。若为永久性故障,则重新增加节点,再拷贝数据,成为备副本。
双层机构:在副本底层有个分布式文件系统,将所有节点中的数据存储起来,当主副本发生故障时,主控节点选择一个节点加载发生故障节点的服务,(通过分布式文件系统)
总控节点发生故障:要选主。Paxos协议实现分布式锁服务。
四、分布式协议(租约,复制协议,一致性协议【两阶段提交协议,Paxos协议】)
两阶段提交协议:为了保证跨多个节点操作的原子性。
请求阶段:协调者通知所有的参与者准备提交或取消事务,然后进入表决过程。
提交阶段:协调者基于第一阶段的投票结果进行决策:是提交还是取消。当所有的参与者都同意提交,则提交;若有一个没有则取消。
Paxos协议:为了确保多个节点对某个投票达成一致。(选主) 提议者(Proposer),接收者(acceptor)
准备:提议者选择一个提议序号n,向接收者发送prepare消息。 接收者收到prepare消息后,如果提议序号大于他所回复的所有提议序号,则将上次接收的提议回复给提议者,并承诺不再回复比n小的提议。
批准:提议者收到了接收者的回复后,进入批准阶段。如果接收者回复了上次回复的提议,则提议者选择提议号最大的值发给接受者;否则生成一个新的题议值发送给接受者。接受者在不诶被自己的承诺的情况下接受这个请求。
确认:若果超过一半的接收者接受,题议值生效。提议者发送acknowleage 消息通知所有的接收者提议生效。