写点什么

Jupiter:Facebook 的高性能 job-matching 服务

  • 2017-06-07
  • 本文字数:2423 字

    阅读完需:约 8 分钟

在代码的编写、编辑、测试与发布等工程流程当中,我们需要依靠后端服务及设备以执行各类任务,具体包括构建新软件包、安装依赖关系并运行测试任务。考虑到 Facebook 极为可观的业务规模,执行上述工作的员工数量及职务种类每一天都可能不断增加,这显然会成为系统性能的瓶颈所在。我们的目标在于尽可能减少工程师在设备上的等待时长,确保其能够快速获取反馈,并将更多时间与精力投入到生产任务身上。

每项任务实际上都运行在一个被称为“工作程序”的隔离环境当中,而这些环境则分布在不同数据中心的不同主机之上。各工作程序会通过预配置以针对某些特定任务类型进行优化——例如输入的 Android 任务会被交付至拥有正确代码库且完成了依赖性更新的工作程序处。

此类分布式系统需要一些保障性机制以可靠且高效地为正确的工作程序交付对应的任务内容。作为一类常见解决方案,人们通常会利用分布式队列以及调度器 / 调度程序系统等追踪当前全书状态,并尝试以最佳方式进行工作负载分配。然而,这些解决方案亦各有利弊 ; 举例来说,调度器往往会对系统的可扩展性造成负面影响。在今天的文章中,我们将介绍的 Jupiter 项目正是专门为此而生——一项负责任务匹配的服务。

对于各工作程序,其职能的本质在于对其特征或者所能处理之任务的声明。其中的具体特征可能表现为内存大小、工作程序所处之数据中心、设备的当前负载因子、工作程序接入的智能手机型号以及预加载至设备之上的存储库或数据部件等等。每个工作程序都拥有多项功能与特征,且各功能特性在实际上属于一个或者一组值(例如,内存大小即为一个值,而多套预加载源代码库则为一组值)。同样的,不同任务亦会对其所需功能特性提出要求。举例来说,资源密集型构建任务需要强大的设备作为支持 ; 特定代码库中的 CI 任务更适合由已经预加载对应代码的工作程序来完成 ; 需要特定内核版本的任务只能匹配运行在该内核之上的工作程序 ; 而一组分布式构建任务则最好能够在集群环境下执行。

在由更新与并发请求构成的持续流当中,我们往往很难准确对具有多维功能要求的任务进行快速匹配。而作为一项服务,Jupiter 非常擅长高效响应工作程序的任务要求,同时追踪当前可用的工作负载,且确切符合工作程序与负载需求所作出的多层级功能限定条件。Jupiter 服务能够为工作匹配提供基础性保障——即使同时存在多项请求,每项任务也只会被分配给一个工作程序 ; 而一旦工作程序确认收到该任务,那么此任务将不再进行分配。

与众多其它 Facebook 后端服务一样,Jupiter 服务同样由 C++ 编写而成,且可通过 Thrift 进行访问。Jupiter 拥有横向可扩展性——意味着其能够进行轻松拆分,并确保其中各个分区根据不同任务集要求作出独立决策,且不存在任何负责全部判断的单一领导节点。Jupiter 强调任务队列顺序,各分区可采取最为简单的先进先出型排序策略,但亦支持其它一些更为复杂的概念——例如作业优先级机制。在性能方面,Jupiter 服务的每个分区每秒能够处理数十万项请求。

工作程序向 Jupiter 发送请求以描述其具备的全部功能特性,而 Jupiter 则查询内部数据结构以找到最佳匹配选项。在实际生产工作负载场景下,Jupiter 的任务获取请求延迟通常在数十微秒左右。收取到合适的任务后,工作程序将向 Jupiter 发送新的请求以确认接受或者加以拒绝。如果加以拒绝,则该任务会被放置在请求所指定的暂存区域内 ; 在此段时间中该任务无法被分配给其它工作程序。Jupiter 亦可对接各类不同类型的 API 使用方式。举例来说,工作程序可以向 Jupiter 发送租约请求,通知自身已经开始处理相关任务,但只有在真正成功处理完成后方可进行确认。从高层级角度来看,全部 Jupiter 客户皆遵循获取任务、确认工作、处理工作并再次循环这一基本模式。

由于 Jupiter 掌握着队列中全部任务的相关信息,因此其亦能够执行高级调度决策——例如仅在某些高优先级任务完成后才允许向工作程序提供其它任务。在大多数情况下,Jupiter 的主要优势在于能够通过一组(异构)工作程序高效消费处理能力,同时实现理想的可靠性与原子性。在 Facebook 公司,Jupiter 被用于支持各类不同内部客户——包括我们的资源管理系统 One World 以及我们的持续集成系统 Sandcastle。由于数据与匹配模块之间的 API 边界非常明确,因此与新系统之间的集成也就非常简单。

同样值得一提的是,Jupiter 在某些场景下并不适用。其并不属于数据持久层。因此如果需要对任务数据进行记录,则应由数据产生方负责进行——而 Jupiter 则仅不断从持久层处获取增量更新以保持上下文同步。之所以选择这样的处理方式,主要出于两大考量。第一,我们认为服务应该专注于特定任务,而非面向一切需求。第二,通过将任务存储与任务匹配加以拆分,我们能够确保 Jupiter 不致成为整体系统中的单点故障来源:一旦 Jupiter 发生故障,任务生产方仍然能够以队列方式正常运作 ; 而 Jupiter 顺利恢复后,全部队列内工作则可继续由其交付至工作程序。Jupiter 将数据供应接口背后的所有状态操作抽象出来,这意味着其能够随意使用选定的任意存储引擎——包括关系型数据库、分布式文件系统或者是在无需对数据加以持久保留的情况下使用 Jupiter 的内存内存储。

Jupiter 亦不具备对工作程序状态的全局性了解(例如特定时间点上哪些工作程序正处于忙碌状态,或者哪些工作程序有能力处理某一任务),亦无法将任务的具体分配趋向作出任何中央式决策。相反,Jupiter 的惟一原则就是以高效方式进行任务分配,这是因为工作程序只负责提出其适合处理的任务类型、而任务本身则提出工作程序所需要具备的具体特性——在其之中,Jupiter 将作为有效的仲裁者,单纯为最适合处理对应任务的工作程序提供接入任务负载的途径。

总而言之,Jupiter 是一项高效的任务匹配服务,非常适用于生产者 / 消费者类型的分布式系统。通过将全局任务保留在这项专用服务当中,Jupiter 的功能完全可供各类其它系统引入并使用。最后,希望我们的这一实践经验与发现能够为软件工程领域带来更为广泛的助益。

2017-06-07 19:001936
用户头像

发布了 24 篇内容, 共 11.5 次阅读, 收获喜欢 7 次。

关注

评论

发布
暂无评论
发现更多内容

[开源免费]基于 STM32 的物流分拣小车设计与实现

申公豹

Opentelemetry字节数组转十六进制字符串源码解析

喝水不抬头

AI Browser:我用 CC 做了个桌面版 Manus

lsustc

人工智能 开源 AIGC Manus AI 浏览器

CAD如何导入三维软件绘制的三维模型.sat

极客天地

DeepSeek-V3.2正式登陆火山方舟

火山引擎开发者社区

信息化项目管理制度,软件项目管理方案

金陵老街

项目管理 pmp 软件信息化

大模型知识库AI助手:让技术落地像搭积木一样简单

上海拔俗

Vector Bucket:云原生向量存储新范式

火山引擎开发者社区

球星 C 罗投资 AI 初创 Perplexity;微软开源 VibeVoice-Realtime,低延迟流式输出丨日报

RTE开发者社区

北大、智源联合国际顶尖机构发布全球首个AI 欺骗系统性报告,敲响前沿系统安全警钟

智源研究院

人工智能

AI校园科学文化互动云平台:让知识“活”在指尖

上海拔俗

AI 医疗技术智能评估系统:帮医院选对 “医疗好帮手”

上海拔俗

绝美云锦机身加持!华为Mate X7首销在即,内外都很美!

最新动态

DNS 缓存 TTL:从分钟级到秒级的博弈

柯杰

系统架构 高并发 DNS 技术干货 架构师成长

大数据-176 Elasticsearch Filter DSL 全面实战:过滤查询、排序分页、高亮与批量操作

武子康

nosql 大数据 elasticsearch 分布式 ES

CAD内如何开启WORD及EXCEL

极客天地

国家智库发文回应AI就业焦虑:替代之外,人机协作、灵活就业是趋势

网易伏羲

人机协作 网易伏羲 数字游民 有灵智能体 灵活就业

AI Browser:从想法到产品,我们走了多远?

lsustc

人工智能 开源项目 AIGC Manus AI 浏览器

除了MindManager,Mac上有哪些好用的思维导图软件?

职场工具箱

效率 思维导图 办公软件 思维导图软件 AI生成思维导图

构建拥有记忆的端到端实时语音助手:TEN Framework + memU 教程丨社区来稿

RTE开发者社区

大数据-174 Elasticsearch 查询 DSL 实战:match/match_phrase/query_string/multi_match 全解析

武子康

nosql 大数据 elasticsearch 分布式 ES

AI智联穿戴生态系统:让穿戴设备从“单打”变“团战”

上海拔俗

Meta 挖角苹果设计师,重塑 AI 硬件交互;健康追踪应用 Healthify 升级 AI 助手:实时语音与摄像头交互丨日报

RTE开发者社区

四可装置:分布式光伏智能化转型的 “必答题”

西格电力

光伏发电 双碳 光伏产业 光伏 光伏四可装置

开发者 | 2025 智能驾驶开发者系列培训在京顺利召开!

地平线开发者

IDEA创建thymeleaf模板 创建vue模板

刘大猫

人工智能 云计算 算法 物联网 大模型

IDEA快捷键设置搜索 全文搜索 快速复制 代码全部折叠/全部展开 删除一行

刘大猫

人工智能 云计算 算法 物联网 大模型

大数据-175 Elasticsearch Term 精确查询与 Bool 组合实战:range/regexp/fuzzy 全示例

武子康

nosql 大数据 elasticsearch 分布式 ES

Jupiter:Facebook的高性能job-matching服务_Meta_Sergey Doroshenko_InfoQ精选文章