容错机制和规模挑战|学习笔记

简介: 快速学习容错机制和规模挑战

开发者学堂课程【分布式系统开发调度技术容错机制和规模挑战笔记与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/367/detail/4370


容错机制和规模挑战

内容介绍:

一、容错机制

1.任务调度的故障恢复

2.资源调度的 failover

二、规模挑战

1.增量的消息通讯

2.异步持续多线程


一、容错机制

在一个大规模的分布式系统当中,故障是常见的

1>来自硬件的故障

1.磁盘:一般有4%的年损坏率

2.主板

3.内存条

等硬件都存在一些异常情况。

2>来自软件的故障

1.存在 BUG

2.内存访问越界

3.进程 crush

4.整机重启

所以一个稳健的分布式系统,应该能够处理这种硬件或软件的故障。角色在恢复时,通常考虑以下四个方面:

1.正在运行的任务不应该被中断

2.对用户是透明的

3.自动故障恢复

4.系统在恢复时依然保持可用性,用户的体验不受影响

1.任务调度的故障恢复

任务调度主要有 app master 和 app worker,这两种角色都可能发生 failover。

1>app worker 发生 failover

instance可以通过重试的机制来挑选另一个 app worker 完成这个 instance 任务。

2>app master 发生 failover

app master 若发生过重启,它的状态首先可以从 walker 往上报的状态里恢复出之前的调度结果,还可以恢复出之前在哪些节点上分配了哪些 instance,而具体到每一个instance在处理数据时所在位置的进度信息,也可被 app master 进行持久化,称为打快照 Checkpoint,它会定期的存在持久化存储上,当 app master 进程发生 failover 时,能够从持久化存储中读取这个快照,从而恢复之前的 instance完成情况,通过这样的机制,整个任务在执行期间,任何角色发生 failover 都可以不影响整个作业的运行。

image.png

2.资源调度的 failover

参与资源调度的主要有 Fuxi master,app master 以Tubo 几个角色。

image.png

Fuxi Master 作为中控节点,恢复所需要的信息是非常大的,信息量很多,在工程实践时考虑一些细节,将这个角色所缺的状态分成两种,一种是可以从状态里恢复的,称之为 soft state(软状态);一种是无法从其他的状态里恢复的,称之为hard state(硬状态),例如用户提交的作业配置信息。

对于硬状态,会将它存储在持久化存储上,类似于前面打快照机制,这些状态变化的是不平凡的。

而 soft state,恢复时会通过命令的方式要求 Tubo 或 app master 将进程死之前的状态再发送一份,从而帮助 Fuxi master 恢复出在进程 crash 之前的状态,

如:

机器列表

每个 app master 的资源请求等信息。

具体的过程如下图,中间的 Fuxi Master 如进程发生重启要恢复之前的状态,一方面可以从每个 Tubo 上报的状态里恢复出之前给每个机器上分配的资源;另外一方面从每个 app master 上报的状态里恢复出在进程挂之前每个应用所产生的资源请求,从消息状态里就可以恢复出 soft state。

另外一方面,通过读取存储在持久化介质上的 checkpoint 可恢复出进程在挂之前用户提交上的所有作业的配置情况。

image.png

以上是关于资源调度和任务调度发生硬件或软件故障造成进程重启之后,如何恢复出之前的状态,称为容错的各种机制。


二、规模挑战

分布式系统设计目标之一是横向扩展,Scale-out。一为增量的消息通讯,另一为异步持续多线程的问题。主要包括多线程异步如何优化及增量资源调度。

1. 异步持续多线程

如下图一个作业所对应的 app master,实际上有两种通讯,一个和 FuxiMaste 进行资源的申请、释放等交互,另外一方面,需要和为数众多的 Tubo 进行通讯来起或停止 app worker。

在分布式计算当中,通常是通过RPC(远程调用)机制实现两个异地的进程进行通讯。假若在 app master 里将 FuxiMaster 和众多的 Tubo 对于 RPC 消息的处理,全部放在一个线程,虽然使用了线程池增加并发度,但由于 FuxiMaster 只有一个,而 Tubo 通常有5000个

规模之多,所以大量的RPC消息若拥挤在一个线程池里,则 FuxiMaster 重要的消息,可能会被处理的几率会大大降低,甚至为1/5000的概率。

因此为了避免 Fuximaster 该类重要消息得不到处理,采取的手段是在 app master里单独给 FuxiMaster 分配一个线程池来处理来自 FuxiMaster 的消息,而其他为数众多的Tubo的消息则用另外一个线程池来处理,这样可以避免在分布式系统中常见的堆头阻塞的问题。

等我这种手段,FuxiMaster 和 app master 间关于资源的申请和释放这一协议的通讯变得非常通畅。

在一个5000台规模的集群中 FuxiMaster 所完成的事情及处理的逻辑是非常复杂的,一方面需处理每个 app master 所发的资源请求,有时达上万个,另一方面需监控5000个Tubo 节点的健康状态,因此如何提高 FuxiMaster 这一个节点的处理速度,如何简化消息通讯的协议,是提高规模扩展性的非常重要的技术手段。

image.png

2.增量资源调度

如下图,当一个 app master 向 FuxiMaste 发起资源请求“需要1000份资源”,FuxiMaster 完成调度后,会部分的给一部分200份资源,app master 则再次发起请求“需要800个”,FuxiMaster 给150个,通过这样一来一往的消息通讯,1000个全部满足可能需达三个或四个交互来回,链度很长,这是常规的主从架构设计里面临的问题。在阿里云的实践里,采取了一种新的方式,增量的,在起初时app master 发起请求“需要1000分资源”,消息发送到 FuxiMaster 会被记录下来,FuxiMaster 了解 app master 最初的资源请求状况,当部分资源释放后,FuxiMaster将资源调度给 app master,则会给 app master 发送请求“可以分配200个资源”。

之后由于 FuxiMaster 已经记录了 app master 的资源请求,当有更多新的资源释放出时,例如又有新的150个资源出来后,这时 FuxiMaster 只需发送一次请求告知app master“又新分配150个资源”,从而省去中间 app master 再次提起请求,避免了冗余的交互过程,通过增量的通讯调度的协议之后,网络中所发起的RPC消息将会大大减少,从而有利于提高整体集训的规模。

image.png

相关文章
|
3月前
|
消息中间件 存储 Java
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的低延迟可用性机制方案实现
在充满挑战的2023年度,我们不可避免地面对了一系列棘手的问题,例如响应速度缓慢、系统陷入雪崩状态、用户遭受不佳的体验以及交易量的下滑。这些问题的出现,严重影响了我们的业务运行和用户满意度,为了应对这些问题,我们所在团队进行了大量的研究和实践,提出了低延迟高可用的解决方案,并在分布式存储领域广泛应用。
49 2
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的低延迟可用性机制方案实现
|
API 容器 Kubernetes
当 K8s 集群达到万级规模,阿里巴巴如何解决系统各组件性能问题?
作者 | 阿里云容器平台高级技术专家 曾凡松(逐灵) 本文主要介绍阿里巴巴在大规模生产环境中落地 Kubernetes 的过程中,在集群规模上遇到的典型问题以及对应的解决方案,内容包含对 etcd、kube-apiserver、kube-controller 的若干性能及稳定性增强,这些关键的增强是阿里巴巴内部上万节点的 Kubernetes 集群能够平稳支撑 2019 年天猫 618 大促的关键所在。
|
3月前
|
消息中间件 数据采集 缓存
探索分布式限流:挑战与解决方案
分布式限流是现代系统设计中的重要挑战之一。本文将探讨分布式限流的背景和意义,以及在实施分布式限流时需要注意的关键问题,并提供一些解决方案。
|
3月前
|
缓存 监控 负载均衡
系统健康长期“三高”:实现高性能、高可用性和高稳定性的关键要素
大家想必都知道在人类健康领域,我们常常警惕“三高”带来的风险,三高是一个不健康的意思,而在数字化世界中,恰恰相反,系统的高性能、高可用性和高稳定性代表着系统的健康和卓越运行,是一个健康的概念。作为开发者怎么能让我们开发的系统保证长期“三高”,那么本文就来简单讨论一下如何让系统长期维持理想的“三高”标准,以及“三高”在实际业务场景中的真实性,并探索一下在技术负责人角色中使用“三高”来评价系统开发工作的可行性等内容,欢迎大家在评论区留言交流。
90 1
系统健康长期“三高”:实现高性能、高可用性和高稳定性的关键要素
|
3月前
|
缓存 运维 负载均衡
系统层面的【三高】
【1月更文挑战第9天】系统层面的【三高】
|
7月前
|
消息中间件 存储 负载均衡
如何应对三高系统
如何应对三高系统
|
7月前
|
运维 监控 容灾
建设强大系统:提升高可用、可靠性和稳定性的秘诀
建设强大系统:提升高可用、可靠性和稳定性的秘诀
|
11月前
|
缓存 负载均衡 安全
【可用性设计】 GCP 面向规模和高可用性的设计
【可用性设计】 GCP 面向规模和高可用性的设计
|
存储 缓存 负载均衡
高并发架构都要考虑哪些方面?
高并发架构都要考虑哪些方面?
|
应用服务中间件 缓存 nginx
消除单点,一篇搞定 | 架构设计篇
系统架构中,为什么会存在单点?思路比结论重要。
5397 1

热门文章

最新文章