系统设计面试指南之分布式任务调度

1 简介

任务是需要资源(CPU 时间、内存、存储、网络带宽等)在指定时间内完成的一段计算工作。

通过智能地将资源分配给任务以满足任务级和系统级目标的系统称为任务调度程序。

任务调度程序:

及时决定和分配资源给任务的过程称为任务调度。

当我们在 Facebook 发表评论时。我们不会让评论发布者等待直到那条评论被交付给所有关注者。交付被委托给一个异步任务调度程序离线完成。

在分布式系统中,许多任务是在用户的单个请求的背景下运行。考虑Facebook、WhatsApp 或 Instagram 这样的热门系统有数亿用户。这些系统需要一个任务调度程序来处理数十亿个任务。Facebook 使用 Async 根据其用户的数十亿个并行异步请求来调度其所有任务。

Async 是 Facebook 自己的分布式任务调度程序,调度其所有任务。一些任务时间敏感,如应该运行的通知用户某项活动开始直播的任务。如果用户在直播结束后才收到通知就没意义了。某些任务可延迟,如向用户提出好友建议的任务。Async 根据适当的优先级调度任务。

2 需求

  • 可用性:系统应高可用以调度和执行任务
  • 持久性:系统收到的任务应持久化,不应丢失
  • 可扩展性:系统应能每天调度和执行越来越多的任务
  • 有限的等待时间:这是任务在开始执行之前需要等待的时间。我们不能在预期时间之后执行任务。用户不应该无限期地等待。如果用户的等待时间超过一定阈值,他们应该收到通知

3 组件设计

3.1 任务调度程序架构设计

① Task Submitter(任务提交者)

接受任务。没有单一的任务提交者。相反,我们有一组接收越来越多任务的节点。

② Database(数据库)

任务提交者接收的所有任务都存储在分布式数据库。使用关系数据库来存储:

  • task IDs
  • user IDs
  • 所需资源
  • 执行上限
  • 客户端尝试总次数
  • 延迟容忍度
  • ...

使用有向无环图(DAG)存储依赖任务的数据的图数据结构的非关系数据库。

③ Batching and prioritization(批处理和优先级)

将任务存储在 RDB 后,将任务分批。优先级基于任务的属性,如:

  • 延迟容忍度
  • 或执行时间短的任务等。

将最高 K 优先级的任务推送到分布式队列,K限制可以推送到队列的元素数量。K值取决许多因素,如:

  • 当前可用资源
  • 客户端
  • 或任务优先级
  • 订阅级别
④ Queue manager(队列管理器)

队列管理器在队列中添加、更新或删除任务。它跟踪我们使用的队列的类型。它还负责保持任务在队列中直到成功执行。如果任务执行失败,该任务将再次出现在队列。队列管理器知道在高峰时段、非高峰时段应该运行什么队列。

⑤ Resource manager(资源管理器)

知道哪些资源空闲。它从分布式队列中拉取任务并分配给它们资源。资源管理器:

  • 跟踪每个任务的执行情况
  • 并将其状态发送回队列管理器

若任务超出其能力或所需的资源使用,则终止该任务,并将状态发送回任务提交者,后者将通过错误消息通知客户端有关任务终止的情况。

4 执行上限

4.1 任务分类

  • 不能延迟的任务 - 紧急任务
  • 可延迟的任务
  • 需定期执行的任务 - 周期性任务

基于任务类别的多个队列:

系统需确保非紧急队列中的任务不会被饿死。一旦某些任务的延迟限制即将达到,它就会被移动到紧急任务队列以获得优先服务。

4.2 优先级

一些任务执行时间很长并占用资源,阻塞其他任务。在调度任务时,执行上限(execution cap)是个重要参数。

若我们完全分配资源给单个任务并等待该任务完成,则由于任务脚本错误,某些任务可能不会停止,无法完成执行。我们允许用户为其任务设置执行上限。指定时间后停止任务执行,释放资源并分配给队列中的下一任务。若由于执行上限而停止任务执行,系统会通知所属用户的这些实例。他们需针对这种情况采取人工兜底。

5 任务紧急执行

有些任务需紧急执行。如Facebook社交应用中,用户可在紧急情况下标记自己是安全的,如地震。执行此活动的任务应及时执行,否则此功能对 Facebook 用户毫无用处。向客户发送电子邮件通知,告知其账户扣除一定金额的资金,是另一个需要紧急执行的任务示例。

为优先处理任务,任务调度程序为每个任务维护一个delay tolerance(延迟容忍度)参数,并在接近其延迟容忍度时执行该任务。

延迟容忍度是任务执行可延迟的最大时间量。首先执行延迟容忍时间最短的任务。通过使用延迟容忍参数,可在高峰时段推迟延迟容忍值更长的任务,为紧急任务留出空间。

6 资源容量优化

有时资源接近过载阈值(如超过 80% 利用率),这就是高峰期。同一资源在非高峰时段可能闲置。所以,须考虑如何在非高峰时段更好利用资源及如何在高峰时段保持资源可用。

有些任务无需紧急执行。如Facebook社交应用,建议好友不是紧急任务。可以为这样的任务创建一个单独的队列,并在非高峰时段执行它们。如果我们一直有比可用资源更多的工作要做,我们可能会遇到容量问题,就该配置更多资源。

7 任务幂等性

如果任务成功执行,但由于某些原因机器无法发送确认,则调度程序将再次调度该任务。再次执行该任务。

我们不希望再次执行任务时最终结果发生更改。这在转账时对金融应用程序至关重要。我们要求任务是幂等的。幂等任务无论执行多少次都会产生相同的结果。

此属性是由开发人员在实现中添加的,通过某些内容(例如名称)来标识该属性并覆盖旧的。

8 评估

8.1 可用性

任务提交是由多个节点完成的。若提交任务的节点失败,其他节点将接替其位置。推送任务的队列在本质上也是分布式,确保可用性。由于持续监控是否需要添加或删除资源,可尽力保证始终有可用资源。设计中的每个组件都是分布式的,使得整个系统可用性大大增强。

8.2 持久性

我们将任务存储在持久化分布式数据库中,并在接近执行时间时将任务推送到队列中。一旦提交任务,它就会在数据库中直到执行完成。

8.3 可扩展性

任务调度程序提供可扩展性,因为设计中任务提交者是分布式的。可向集群添加更多节点以提交大规模数量的任务。

然后将这些任务保存到也是可扩展的分布式关系数据库中。

再从 RDB 将任务推送到分布式队列,它可随任务数量增加而扩展。可为不同类型的任务添加更多队列。还可根据资源与需求比添加更多资源。

8.4 容错性

任务在首次发送执行时不会从队列中删除。如果执行失败,将尝试最大允许次数的重试。若任务包含死循环,会在指定时间后终止任务并通知用户。

参考:

  • 编程严选网

    本文由博客一文多发平台 OpenWrite 发布!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/206860.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【EasyExcel】导出excel并支持自定义设置数据行背景颜色等

需求背景: 根据查询条件将列表数据导出,并筛选出满足某个条件的数据,将满足条件的数据的背景颜色设置成黄色。 (本文例子如:name出现的次数大于等于2,将相关数据背景颜色都设置为黄色) …

MySQL备份与恢复(重点)

MySQL备份与恢复(重点) 一、用户管理与权限管理 ☆ 用户管理 1、创建MySQL用户 注意:MySQL中不能单纯通过用户名来说明用户,必须要加上主机。如jack10.1.1.1 基本语法: mysql> create user 用户名被允许连接的主…

java springboot测试类虚拟MVC环境 匹配返回值与预期内容是否相同 (JSON数据格式) 版

上文java springboot测试类鉴定虚拟MVC请求 返回内容与预期值是否相同我们讲了测试类中 虚拟MVC发送请求 匹配返回内容是否与预期值相同 但是 让我意外的是 既然没人骂我 因为我们实际开发 返回的基本都是json数据 字符串的接口场景是少数的 我们在java文件目录下创建一个 dom…

3分钟使用 WebSocket 搭建属于自己的聊天室(WebSocket 原理、应用解析)

文章目录 WebSocket 的由来WebSocket 是什么WebSocket 优缺点优点缺点 WebSocket 适用场景主流浏览器对 WebSocket 的兼容性WebSocket 通信过程以及原理建立连接具体过程示例Sec-WebSocket-KeySec-WebSocket-Extensions 数据通信数据帧帧头(Frame Header&#xff09…

Spring整合web环境

目录 Javaweb三大组件及环境特点 Spring整合web环境的思路及实现 Spring的web开发组件spring-web MVC框架思想及其设计思路 Javaweb三大组件及环境特点 Spring整合web环境的思路及实现 package com.xfy.listener;import com.xfy.config.SpringConfig; import org.springfra…

具备这四个特征的项目经理,牛逼!

大家好,我是老原。 成为一个业绩第一又能准时下班的工作强人,应该是每个职场人的梦想,但现实往往不那么尽如人意…… 虽然如此,但是不代表我们不能向能做到这样的大佬看齐啊。 工作十余年,见过各种各样的职场人士&a…

高级IO select 多路转接实现思路

文章目录 select 函数fd_set 类型timeval 结构体select 函数的基本使用流程文件描述符就绪条件以select函数为中心实现多路转接的思路select 缺陷 select 函数 int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); selec…

6.1 Windows驱动开发:内核枚举SSDT表基址

SSDT表(System Service Descriptor Table)是Windows操作系统内核中的关键组成部分,负责存储系统服务调用的相关信息。具体而言,SSDT表包含了系统调用的函数地址以及其他与系统服务相关的信息。每个系统调用对应SSDT表中的一个表项…

Android中实现RecyclerView,并对item及其多个子控件的点击事件监听

目录 背景 实现RecyclerView 第一步、 新建item的xml 第二步、在activity的布局中引入 RecyclerView 第三步、新建一个adapter 第四步、在activity中初始化绑定adapter即可 实现item及其多个子组件点击事件监听 第一步、 适配器中创建监听对象 第二步、适配器中绑定监听…

搭建测试平台开发(一):Django基本配置与项目创建

一、安装Django最新版本 1 pip install django二、创建Django项目 首先进入要存放项目的目录,再执行创建项目的命令 1 django-admin startproject testplatform三、Django项目目录详解 1 testplatform 2 ├── testplatform  # 项目的容器 3 │ ├── …

提升技能素养,AMCAP做出合适的决策

近年来,智能配置投资与理财逐渐受到关注并走俏。这是一种简单快捷的智慧化理财方式,通过将个人和家族的闲置资金投入到低风险高流动性的产品中。 国际财富管理投资机构AMCAP集团金融分析师表示:智能配置投资与理财之所以持续走俏&#xff0c…

如何选择共模噪声滤波器

在当前电子产品中,绝大多数的高速信号都使用地差分对结构。 差分结构有一个好处就是可以降低外界对信号的干扰,但是由于设计的原因,在传输结构上还会受到共模噪声的影响。 共模噪声滤波器就可以用于抑制不必要的共模噪声,而不会对…

什么是网络攻击?阿里云服务器可以避免被攻击吗?

网络攻击是指:损害网络系统安全属性的任何类型的进攻动作。进攻行为导致网络系统的机密性、完整性、可控性、真实性、抗抵赖性等受到不同程度的破坏。 网络攻击有很多种,网络上常见的攻击有DDOS攻击、CC攻击、SYN攻击、ARP攻击以及木马、病毒等等,所以再…

算法:Java计算二叉树从根节点到叶子结点的最大路径和

要求从根节点到叶子结点的最大路径和,可以通过递归遍历二叉树来实现。对于二叉树中的每个节点,我们都可以考虑包含该节点的最大路径和。在递归的过程中,我们需要不断更新全局最大路径和。 具体的思路 递归函数设计: 设计一个递归函…

蓝桥杯day02——第三大的数

题目 给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。 示例 1: 输入:[3, 2, 1] 输出:1 解释:第三大的数是 1 。 示例 2: 输入:[1, 2] 输出&…

02-鸿蒙学习之4.0todoList练习

02-鸿蒙学习之4.0todoList练习 代码 /*** 1:组件必须使用Component装饰* 2.Entry 装饰哪个组件,哪个组件就呈现在页面上* 3.被Entry 装饰的入口组件。build()必须有且仅有一个根 ** 容器 ** 组件* 其他的自定义组件,build() 中…

详解API开发【电商平台API封装商品详情SKU数据接口开发】

1、电商API开发 RESTful API的设计 RESTful API是一种通过HTTP协议发送和接收数据的API设计风格。它基于一些简单的原则,如使用HTTP动词来操作资源、使用URI来标识资源、使用HTTP状态码来表示操作结果等等。在本文中,我们将探讨如何设计一个符合RESTfu…

Re54:读论文 How Context Affects Language Models‘ Factual Predictions

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文名称:How Context Affects Language Models’ Factual Predictions ArXiv网址:https://arxiv.org/abs/2005.04611 2020年AKBC论文,作者来自脸书和UCL。 本文主要关注…

vscode Markdown 预览样式美化多方案推荐

优雅的使用 vscode写 Markdown,预览样式美化 1 介绍 我已经习惯使用 vscode 写 markdown。不是很喜欢他的 markdown 样式,尤其是代码块高亮的样式。当然用 vscode 大家基本上都会选择安装一个Markdown-preview-enhanced的插件,这个插件的确…

【C++】了解模板

这里是目录 前言函数模板函数模板的实例化类模板 前言 如果我们要交换两个数字,那么我们就需要写一个Swap函数来进行交换,那如果我们要交换char类型的数据呢?那又要写一份Swap的函数重载,参数的两个类型是char,那我们…