这是我参与「第四届青训营 」笔记创作活动的第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% 的请求的延迟。相对于平均值,能更好的衡量长尾的情况。
尾部延迟放大
- 木桶原理:并行执行的任务的耗时取决于最慢的一个子任务。
- 尾部延迟放大:一个请求或任务需要访问多个数据节点,只要其中有一个慢,则整个请求或任务的响应就会变慢。
- 固定延迟阈值,访问的集群越大, 高于该延迟的请求占比越高。
- 固定延迟百分位,访问的集群越大,延迟越差。