HDFS 高可用与高扩展性机制分析 | 青训营笔记

137 阅读4分钟

这是我参与「第四届青训营 」笔记创作活动的第9天

HDFS 元数据服务的高可用

高可用:系统在困境(adversity,比如硬件故障、软件故障、人为错误)中仍可正常工作(正确完成功能,并能达到期望的性能水准)

容灾:在相隔较远的异地,建立两套或多套功能相同的系统,互相之间可以进行健康状态监视和功能切换,当一处系统因意外(如火灾、地震等)停止工作时,整个应用系统可以切换到另一处,使得该系统功能可以继续正常工作。

故障度量的指标

MTTR (Mean Time To Repair,平均修复时间),指系统从发生故障到维修结束之间的时间段的平均值。

MTBF (Mean Time Between Failure,平均失效间隔),指系统两次故障发生时间之间的时间段的平均值。

MTTF (Mean Time To Failure,平均无故障时间),指系统无故障运行的平均时间,取所有从系统开始正常运行到发生故障之间的时间段的平均值。

可靠性的衡量指标是MTTF或者MTBF。 可用性的计算公式是Availability = MTBF/(MTBF + MTTR)。

备份方式

  • 冷备份:备份服务的数据,可以和数据归档相结合。在主服务故障时,利用备份的数据重启。
  • 热备份:主服务和备服务同时运行,在主服务故障时,随时可以切换到备服务。

切换方式

  • 人工切换:在故障发生时,运维人员接收报警后,手动执行服务切主操作。一般较慢,难以满足全年不可用时间的目标。
  • 自动切换:通过探活组件、分布式共识协议等手段,系统能自动发现主服务的故障,并切换到备份不符。

单点故障 SPOF:指系统中一旦失效,就会让整个系统无法运作的组件。

HDFS 数据存储高可用

RAID:将多个廉价、不可靠、低性能、容量小的磁盘组装在一起,提供高可靠、高性能、大容量逻辑磁盘服务的一组磁盘列阵方案。

多副本方案:将数据块存储在多个 DN 上

Erasure Coding 方案:将数据分段,通过特殊的编码方式存储额外的校验块,并条带化的组成块,存储在 DN 上。

数据中心架构

故障域

  • 故障域是基础设施中可能发生故障的区域或组件。每一个域都有自己的风险和挑战,由个别几个因素决定整个故障域的服务能力,需要进行架构。

多机房容灾:服务和数据需要存放在多个机房,并配合合理的架构。使得发生机房故障时依然可以提供服务。

HDFS 元数据服务的高扩展性

扩展性方案

  • scale up:通过单机的 CPU、内存、磁盘、网卡能力的提升来提升系统服务能力,受到机器成本和物理定律的限制。
  • scale out:通过让多台机器组成集群,共同对外提供服务来提升系统服务能力。一般也称为高扩展、水平扩展。

partition 方法

  • 水平分区和垂直分区:水平分区指按 key 来将数据划分到不同的存储上;垂直分区指将一份数据的不同部分拆开存储,用 key 关联起来。partition 一般都水平分区,又称 shard。
  • 常用于 KV 模型,通过 hash 或者分段的手段,将不同类型 key 的访问、存储能力分配到不同的服务器上,实现了 scale out。
  • 重点:不同单元之间不能有关联和依赖,不然访问就难以在一个节点内完成。例如 MySQL 的分库分表方案,难以应对复杂跨库 join。

HDFS 数据存储的高扩展性

长尾

  • 二八定律:在任何一组东西中,最重要的只占其中一小部分,约 20%,其余 80% 尽管是多数,却是次要的。
  • 长尾:占绝大多数的,重要性低的东西就被称为长尾。

百分位延迟

  • 将所有请求的响应速度从快到慢排序,取其中某百分位的请求的延迟时间。
  • 例如 pct99 代表排在 99% 的请求的延迟。相对于平均值,能更好的衡量长尾的情况。

尾部延迟放大

  • 木桶原理:并行执行的任务的耗时取决于最慢的一个子任务。
  • 尾部延迟放大:一个请求或任务需要访问多个数据节点,只要其中有一个慢,则整个请求或任务的响应就会变慢。
  • 固定延迟阈值,访问的集群越大, 高于该延迟的请求占比越高。
  • 固定延迟百分位,访问的集群越大,延迟越差。