《大规模分布式存储系统》第三章 分布式系统

  • 基本概念

1. 异常类型

    服务器宕机、网络异常、磁盘故障。

2. 超时

    在分布式系统中,机器交互有三个结果,即成功、失败、超时。超时单作为一小节讲述,表明了其特殊性。节点间交互超时返回,并不意味着失败,也可能成功,这种不确定性需要特殊的设计机制保证系统的确定性。一个典型的解决方案是,所有的操作是幂等的,这样重试即可。

3. 一致性

    分片内数据的一致性,可以从用户角度和存储系统两个角度描述。

    用户角度:强一致、弱一致、最终一致(弱一致的特例)。

    最终一致包括:读写一致(同一个客户端读写一致)、会话一致、单调读一致、单调写一致。

    存储系统角度:副本一致(弱一致有时间窗口)、更新顺序一致。    

:总感觉本章的介绍逻辑不清晰,更新顺序一致性 与 分片内一致性 不是对等的概念,在这里介绍略微不妥。

4. 衡量指标

    性能:QPS、UPS、延迟(平均、长尾-99.9%)。

    可用性:99.99%——全年52.56min不可用,99.97%——全年52.54min不可用。

    一致性

    可扩展性:线性可扩展是理想情况,即系统性能随着机器数量线性变化。

  • 性能分析

性能分析的目标是在设计阶段找到系统的瓶颈点,针对瓶颈点权衡多种设计方案,确定最终方案。

性能分析的结果,既是设计目标,这样可以防止设计阶段出现重大Bug。系统运行阶段,性能分析的结果,更是性能优化的目标(靠近设计目标)。性能分析是比较复杂的过程,与具体实际情况密切相关(网络、CPU、内存等等,不同外部环境,瓶颈点会变换)。系统运行阶段,性能分析的核心是找到系统的平静点。


:性能分析是RD的核心能力之一。


  • 数据分布

Hash分布

    Amazon Dynamo 典型的Hash分布(一致性hash)。Hash分布有如下两个问题:

    1. 评价散列函数优劣的标准是散列程度,很难有较好的散列函数,一般都会有“数据倾斜”的问题(数据集中),解决版本有两个,第一是业务手动拆分,第二个是自动拆分,算法能够动态调整。

    2. Hash值与机器数量N取摸,机器数量变更直接导致大量hash失效。解决办法有两个,第一是hash值与机器映射关系作为meta信息,第二是一致性hash,尽量减少rehash的数据量。


顺序分布

    Table存储系统常用的分布方式(很好地支持扫描),例如,BigTable、CockRoachDB。
    常见的做法是,将大表按顺序拆分为N个子表存储在不同的节点,映射关系作为Meta信息。随着删除、插入,伴随着子表的合并与拆分,极大的增加了系统的复杂度。


负载均衡

    常见的做法是,节点通过心跳将本地信息上报给Master,Matser做全局调度。需要注意的是负载均衡需要平滑完成,否则影响可用性。上报的信息可以是CPU、磁盘使用等等。


  • 复制

    这部分主要说的是分片内数据的一致性,主要分为,强一致、弱一致、NWR等。

    需要注意的是,一致性与可用性是一对矛盾的性质。强一致性会由于节点故障影响可用性。高可用性需要牺牲一定程度的一致性。

    CAP理论中,P代表分区容忍性(脑裂)是分布式系统一定要解决的,所以绝大部分实在C(一致性)和A(高可用)之间在取舍。

    

  • 容错

故障检测

    中心配置的分布式系统,常见的故障检测方式是心跳,节点向Master汇报心跳可以方便Master掌握节点的情况,但是节点可能临时故障后由自动恢复,这种情况需要节点知道他自己下线,所以单程的交互是不够的,常用的办法是租约,双程通信,节点汇报心跳后,Master会返回一个带超时时间的Token。租约机制需要注意时间差。

    另外,如果是追加写系统,即数据只要存在就是最新的数据,不存在数据过期的问题,此时可以只用单程的心跳,及时旧机器回归也不会引入脏数据。


故障恢复

    本部分所述的故障恢复,指的是分片的Failover。常见的存储系统分为两种,第一种是单层结构,进行中就切换即可,第二种是两层结构,类似BigTable(服务层 + 存储层),方式其实差不多。    


  • 可扩展性

中心节点    

    随着数据量的增加,中心化配置的分布式服务,中心节点可能单机是不够用的,例如Hadoop。常见的分布式存储系统,合理的设计方案单机中心节点能够支持1w台以内的集群规模。中心节点数据量过大,就需要中心节点也需要一定的扩展性。常见的解决方案,增加一个小集群专门存储元数据,类似Haddoop 的 AN等。另外一种将元数据分级,中心节点存储一部分,数据节点存储一部分。


:随着业务的发展,需要提高系统的吞吐量,需要中心节点具备更高的性能,目前超大规模的分布式系统(1w台机器以上)不仅拆分元数据,还将中心节点的功能模块拆分成集群的方式来满足预期目标。


数据扩容

    最理想的扩容方式就是按需扩容,或线性扩容。但是在常规的数据库扩容中,常常面临如下三个问题(传统数据库扩展性差的原因):

    1. 扩容不灵活:常见的是成倍扩容,浪费资源。

    2. 扩容不够自动化:数据库的拆分与业务强耦合,扩容需要业务制定计划很难做到自动化。

    3. 增加副本时间长:传统的数据库扩容(或副本恢复),需要大量的数据CP,耗时很长。

    

异构系统

    本部分的叙述内容,指的是节点间数据是否异构,例如A机器存储数据分片1、2、3,B机器也是1、2、3,那么A与B同构,并不是机器硬件的异构同构,显然同构模型容错性更差。


  • 分布式协议

2PC vs. Paxos

    两者的区别,2PC是一种分布式事务,可以保证分布式系统中一个事务要么全执行,要么全部执行。Paxos主要是用来保证分布式系统中节点间数据的一致性。

    Paxos主要用来选主、分布式锁等。例如Google Chubby、ZK等。2PC最主要的问题是无法处理机器宕机问题,即无法做到协调的问题。Paxos做协调保证数据状态机一致,2PC保证操作的原子性。


  • 跨机房部署

整集群切换:机房主从互备,意义不大

单个集群跨机房:目前比较流行的跨机房部署。


  • 总结

    本章介绍的内容乍一看逻辑想不强,仔细品味一番可能是本书是五年前出版的,很多相同意思的表达有一些变化,细细理解还是可以找到脉络。另一方面,随着数据量增长,很多大公司技术发展很快,领先本书。但是书中介绍的基础知识还是技术人员应该夯实的。

    本部分先是介绍了分布式系统中常见的异常情况,与单机有所不同,主要是对超时的理解和处理方式。接着说明了性能分析的重要性,性能分析表面看是一个很虚的东西,但是它直接表示了技术人员的技术水平,更是进阶道路上的核心技能。

    揭下来,从数据分片(数据分布)、分片内一致性(复制)、扩展性、分片Failover(容错)4个方面介绍了分布式存储系统。同时介绍了两个分布式协议2PC、Paxos,着重理解他们的功能与区别。

    最后,介绍了一下跨机房部署的常见方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值