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

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.mzph.cn/news/187752.shtml

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

相关文章

虹科干货 | 适用于基于FPGA的网络设备的IEEE 1588透明时钟架构

导读:在基于FPGA的网络设备中,精确的时间同步至关重要。IEEE 1588标准定义的精确时间协议(PTP)为网络中的设备提供了纳秒级的时间同步。本文将介绍虹科提供的适用于基于FPGA的网络设备的IEEE 1588透明时钟(TC&#xff…

#HarmonyOS:软件安装window和mac预览Hello World

Window软件地址 https://developer.harmonyos.com/cn/develop/deveco-studio#download 安装的建议 这个界面这样选,其他界面全部按照默认路径往下走!!! 等待安装… 安装环境错误处理 一般就是本地node配置异常导致&#xff…

ubuntu22下使用nvidia 2080T显卡部署pytorch

1.直接到NVIDA官网下载相应的驱动,然后安装官方驱动 | NVIDIA 2.下载相应版本cuda,并安装,安装时不安装驱动 3.conda install pytorch2.1.0 torchvision0.16.0 torchaudio2.1.0 pytorch-cuda12.1 -c pytorch -c nvidia 安装pytorch。 安装…

centOS使用docker部署ElasticSearch和Kibana

一、docker部署ElasticSearch 1、创建网桥 docker network create xybnet 2、下载镜像 docker pull elasticsearch:8.2.0 3、先运行容器 docker run -d \ --name es \ --net xybnet \ -p 9200:9200 \ -p 9300:9300 \ -p 5601:5601 \ -e "discovery.typesing…

Docker容器中的OpenCV:轻松构建可移植的计算机视觉环境

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 构建可移植的计算机视觉环境 文章目录 前言引言简介:目的和重要性: 深入理解Docker和OpenCVDocker的基本概念和优势:OpenCV简介和应用领域:…

直播平台的选择

在选择直播平台时,可以根据自己的需求和目标进行决策。以下是一些常见的直播平台及其特点: 1.抖音/快手 这两个平台是短视频内容平台,商家或创作者可以在平台上发布自己的内容,打造人设,吸引粉丝。在直播间中,粉丝可…

VMware Linux(Centos)虚拟机扩容根目录磁盘空间

给VMWare虚拟机根目录扩容,简单有效!_迷倒万千少女的Csir的博客-CSDN博客 https://blog.csdn.net/m0_64206944/article/details/131453844?spm1001.2014.3001.5506 上述链接融合参考下面文章 VMware Linux(Centos)虚拟机扩容根目录磁盘空间 centosli…

Docker 容器日志查看和清理

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

在零信任架构下的API安全与滥用防护(下)

防御API滥用的策略 在零信任架构下,防御API滥用的策略是构建强健安全防线的关键一环。策略的制定应基于对API攻击深层次的理解,以及对大量API相关数据的分析和利用,这些都是识别和预防API滥用的重要手段。 扩展对API攻击的理解 API安全不仅…

Mac电脑Flutter环境搭建及运行

此文章借鉴参考此博客:https://blog.csdn.net/ws1836300/article/details/130766889 注意: *下载xcode 就包含git了, *苹果芯片和intel 芯片需要的环境不同,苹果芯片需要安装: Important: If you’re installing on an Apple Sili…

SAP BW层级结构小结属性数据源+专家例程实现层级结构增强加载

作者 idan lian 如需转载备注出处 BW信息对象-层级结构 RSH1 维护信息对象层级 这里的文本描述对应T表中的描述,文本数据源加载之后有数据 信息对象层级H表 以上描述都是根据自我理解翻译的,非官方翻译 层级标识:自动生成,其实…

AUTOSAR OS任务调度的底层逻辑

先参考 FreeRTOS的任务触发底层逻辑 简述RTOS任务调度底层逻辑 AUTOSAR-OS的调度机制-调度表(没理解透,继续更新) OSEK与FreeRTOS在任务调度上最大的区别在于,FreeRTOS是基于全抢占任务调度和时间片轮转调度机制,具有…

设计师必看!揭秘顶级外卖平台APP背后的设计原则

在数字化和移动互联网盛行的今天,外卖平台APP已经成为我们生活中的重要组成部分。作为设计师,你是否也曾思考过如何通过设计优化用户体验,提升品牌形象,甚至直接推动业务增长?今天,我们将向你揭示顶级外卖平…

使用opencv实现图片相似度检测

1.为什么学这个,我对图像处理非常感兴趣,我联想到海尔的指纹识别门锁是如何进行检测的,我在想不应该呀,单片机性能这么差,应该是使用了训练后的数据去检测图片的,如果我要实现草莓检测,知道它是不是草莓,我觉得单纯使用图片处理是不够的,我考虑过使用指纹模块来接触草莓从而实现…

AI - Crowd Simulation(集群模拟)

类似鱼群,鸟群这种群体运动模拟。 是Microscopic Models 微观模型,定义每一个个体的行为,然后合在一起。 主要是根据一定范围内族群其他对象的运动状态决定自己的运动状态 Cohesion 保证个体不会脱离群体 求物体一定半径范围内的其他临近物…

【计算机组成原理】指令系统

🎄欢迎来到边境矢梦的csdn博文🎄 🎄本文主要梳理计算机组成原理中 指令系统的知识点和值得注意的地方 🎄 🌈我是边境矢梦,一个正在为秋招和算法竞赛做准备的学生🌈 🎆喜欢的朋友可以…

vue 提交表单重复点击,重复提交防抖问题

问题:用户点击保存时,可能会多次点击。导致生成重复数据。 目标:多次点击时,1s内只允许提交一次数据。 解决方案: 1.在utils文件夹创建文件preventReClick.js export default {install (Vue) {// 防止按钮重复点击V…

10个顶级Linux开源反向代理服务器 - 解析与导航

反向代理服务器是一种部署在客户端和后端/源服务器之间的代理服务器,例如 NGINX、Apache 等 HTTP 服务器或用 Nodejs、Python、Java、Ruby 编写的应用程序服务器、PHP 和许多其他编程语言。 它是一个网关或中间服务器,它接受客户端请求,将其传…

2023.11.27 使用anoconda搭建tensorflow环境

2023.11.27 使用anoconda搭建tensorflow环境 提供一个简便安装tensorflow的方法 1. 首先安装anoconda,安装过程略,注意安装的时候勾选安装anoconda prompt 2. 进入anoconda prompt 3. 建立python版本 conda create -n tensorflow1 python3.84. 激活t…

勒索解密后oracle无法启动故障处理----惜分飞

客户linux平台被勒索病毒加密,其中有oracle数据库.客户联系黑客进行解密【勒索解密oracle失败】,但是数据库无法正常启动,dbv检查数据库文件报错 [oraclehisdb ~]$ dbv filesystem01.dbf DBVERIFY: Release 11.2.0.1.0 - Production on 星期一 11月 27 21:49:17 2023 Copyrig…