大规模分布式存储系统的重要目标就是节省成本
性价比较高的PC服务器。这些服务器性能很好,但是故障率很高。软件层面实现自动容错。
分布式系统中有两个重要的协议,
proxy选举协议(多个节点之间达成一致,往往用于实现总控节点选举。),
两阶段提交协议。(保证跨多个节点操作的原子性,这些操作要么全部成功,要么全部失败。)
异常
大规模分布式存储系统的一个核心问题在于自动容错
异常类型
服务器宕机
;如何通过读取持久化介质中的数据来恢复内存信息,从而恢复到宕机前的某个一致的状态。
网络异常
特殊的网络异常称为“网络分区”,集群的所有节点被划分为多个区域,每个区域内部可以正常通信,但是区域之间无法通信。
设计容错系统的一个基本原则是:网络永远是不可靠的,任何一个消息只有收到对方的回复后才可以认为发送成功,设计时总是假设网络将会出现异常并采取相应的处理措施。
磁盘故障;
磁盘损坏(分布式存储系统需要考虑将数据存储到多台服务器,即使其中一台服务器磁盘出现故障,也能从其他服务器上恢复数据。)
磁盘数据错误(校验和checksum机制来解决,.在操作系统层面实现,又可以在上层的分布式存储系统层面实现。)
“超时”
RPC执行的结果有三种状态:”成功”、‘“失败”、’‘超时” 分布式存储系统的三态。
一致性
两个角度理解一致性:第一个角度是用户,第二个角度是存储系统,
‘客户端的角度来看,一致性包含如下二种情况:
强一致性;弱一致性;最终一致性
衡量指标
评价分布式存储系统有一些常用的指标
性能
系统的吞吐能力。每秒处理的读操作数(QPS),写操作数(TPS)
系统的响应时间。}平均延时,·99 .9%以上请求的最大延时:
可用性
系统在面对各种异常时可以提供正常服务的能力
系统可用性往往体现了系统的整体代码质量以及容错能力。
一致性
越是强的一致性模型,;月户使用起来越简单
可扩展性
分布式存储系统通过扩展集群服务器规模来提高系统存储容量、计算量和性能的能.力。
’线性可扩展,随着集群规模的增加,系统的整体性能与服务器数量呈线性关系
性能分析
数据分布
哈希分布,
顺序分布
自动负载均衡。
分布式存储系统的一个基本要求就是透明性,包括数据分布透明性,数据迁移透明性,数据复制透明性,故障处理透明性。
哈希分布
根据数据的某一种特征计算哈希值,将哈希值与集群中的服务器建立映射关系,从而将不同哈希值的数据分布到不同的服务器上:
一致性哈希
顺序分布
哈希散列破坏了数据的有序性,只支持随机读取操作,不能够支持顺序扫描。
顺序分布在分布式表格系统中比较常见,
负载均衡
分布式存储系统的每个集群中一般有,一个总控节点(根据全局负载信息进行整体调度),其他节点为工作节点,
工作节点通过心跳包(Heartbeat,定时发送)将节点负载相关的信息,
负载均衡操作需要控制节奏,负载均衡操作需要做到比较平滑
复制
数据在系统中一般存储多个副本。当某个副本所在的存储节点出现故障时,分布式存储系统能够自动将服务切换到其他的副本,从而实现自动容错。
复制协议:强同步复制(保证主备副本之间的一致性),异步复制(可用性相对较好,但是一致性得不到保障)
一致性和可用性是矛盾的
一致性与可用性
eric Brewer教授提出一个著名的CAP理论:一致性(consistent),可用性(availability),分区可容忍性(tolerance of Network partition)三者不能同时满足
一致性:读操作总是能读取到之前完成的写操作结果
可用性:读写操作在羊台机器发生故障的情况下仍然能够正常执行
分区可容忍性:机器故障、网络故障、机房停电等异常情况下仍然能够满足一致性和可用性。
容错
容错是分布式存储系统设i日勺重要目标,只有实现了自动化容错,才能减少人工运维成本,实现分布式存储的规模效。
常见故障
故障检测
:故障检测,心跳是一种很自然的想法。
故障恢复
分布式存储系统分为两种结构:单层结构和双层结构。
单层结构的分布式存储系统维护了多个副木,
两层结构的分布式存储系统会将所有的数据持久化写人底层的分布式文件系统,每个数据分片同一时刻只有一个提供服务的节点::
节点故障会影响系统服务,在故障检测以及故障恢复的过程中,不能提供写服务及强一致性读服务。
故障检测时间,故障恢复时间
可扩展性
通过增加副本个数或者缓存提高读取能力,将数据分片使得每个分片可以被分配到不同的工作节点以实现分布式处理,把数据复制到多个数据中心
总控节点(执行全局调度,;维护文件系统目录树)
用于维护数据分布信息,执行工作机管理,数据定位,故障检测和恢复,负载均衡等全局调度工作:
数据库扩容
主从复制提高系统的读取能力,通过垂直拆分和水平拆分将数据分布到多个存储节点,通过主从复制将系统扩展到多个数据中心。
常.见的做法为双倍扩容,即将每个分片的数据拆分为两个分片,扩容的过程中需要迁移一半的数据到新加人的存储节点。
异构系统
大规模分布式存储系统要求具有线性可扩展性
为了实现线性可扩展性,存储系统的存储节点之间是异构的
异构系统将数据划分为很多大小接近的分片,每个分片的多个副本可以分布到集群中的任何一个存储节点。
分布式协议
租约,复制协议,一致性协议。两阶段提交协议和Paxos协议最具有代表性。
paxos协议用于确保多个节点对某个投票达成一致。
两阶段提交协议
实现分布式事务
两阶段提交协议可能面临两种故障: 事务参与者发生故障。协调者发生故障。
Paxos协议
:解决多个节点之间的一致性问题。
分布式锁服务,全局命名和配置服务
paxos协议需要考虑两个问题:正确性,即只有一个提议值会生效;可终止性,即最后总会有一个提议值生效。
Paxos与2PC
Paxos协议用于保证同一个数据分片的多个副木之间的数据一致性。
2PC协议用于保证属于多个数据分片上的操作的原子性。
paxos协议有两种用法:一种用法是用它来实现全局的锁服务或者命名和配置服务,另外一种用法是用它来将用户数据复制到多个数据中心,
2PC协议最大的缺陷在于无法处理协调者宕机问题。
2PC和Paxos协议结合起来,通过2PC保证多个数据分片上的操作的原子性,通过Paxos协议实现同一个数据分片的多个副本之间的一致性。
通过paxos协议解决2PC协议中协调者宕机问题。
跨机房部署
数据同步以及服务切换
集群整体切换、单个集群跨机房、Paxcs选主副本。
集群整体切换(常用)
异步模式,那么,备机房的数据总是落后于主机房
主机房整体出现故障时,有两种选择:
将服务切换到备机房(手工),忍受数据丢失的风险。停止服务,直到主机房恢复为止。
强同步模式
备机房的数据和主机房保持一致。
自动切换的方式,即通过分布式锁服务检测主机房的服务,当主机房出现故障时,自动将备机房切换为主机房。
单个集群跨机房
单个集群部署到多个机房,允许不同数据分片的主副本位于不同的机房
尽量将同一个数据分片的多个副本分布到多个机房,从而防止单个机房出现故障而影响正常服务
Paxos选主副本
降低对总控节点的依赖,缺点在于工程复杂度太高,很难在线下模拟所有的异常情况。