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

在代码的编写、编辑、测试与发布等工程流程当中,我们需要依靠后端服务及设备以执行各类任务,具体包括构建新软件包、安装依赖关系并运行测试任务。考虑到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的功能完全可供各类其它系统引入并使用。最后,希望我们的这一实践经验与发现能够为软件工程领域带来更为广泛的助益

本文转自d1net(转载)

时间: 2024-11-02 02:11:22

Jupiter:Facebook的高性能job-matching服务的相关文章

高性能高并发服务的瓶颈及突破思路

关于高性能高并发服务这个概念大家应该也都比较熟悉了,今天我主要是想讲一下对于如何做一个高性能高并发服务架构的一些自己的思考. 本次分享主要包括三个部分: 1. 服务的瓶颈有哪些 2. 如何提升整体服务的性能及并发 3. 如何提升单机服务的性能及并发 一.服务的瓶颈有哪些 通常来说程序的定义是算法+数据结构+数据,算法简单的理解就是一种计算方式,数据结构顾名思义是一种存储组织数据的结构,这两者体现了程序需要用到的计算机资源涉及到CPU资源.内存资源,而数据部分除了内存资源,往往还可能涉及到硬盘资源

Facebook宣布推出新版问答服务

近期,Facebook宣布推出新版问答服务"Questions".新版Questions与此前的版本几乎完全不同,同时也将不再是问答网站Quora的威胁. Facebook于去年7月推出了Questions,业内人士当时对Facebook的这一新服务表示看好.Facebook当时已拥有5亿用户,因此该服务有可能取代流量巨大的雅虎Answers.此外,该服务也将与备受外界关注的创业企业Quora发生直接竞争,后者是由Facebook前CTO亚当·德安格洛(Adam D'angelo)创立

【Facebook】Facebook推好友名单分组服务 应对Google+

北京时间9月14日消息,据国外http://www.aliyun.com/zixun/aggregation/31646.html">媒体报道,Facebook周二宣布,从本周三(美国当地时间)开始,将向用户提供名为"智能名单"(smart lists)的好友分组服务,以方便用户针对不同好友的兴趣爱好而分享不同内容.业界人士认为,Facebook此举意在回应来自谷歌Google+社交网络服务类似功能的挑战. Facebook表示,利用"智能名单"服务

传Facebook将开发地理位置追踪服务运用

据彭博社报道,知情人士透露,http://www.aliyun.com/zixun/aggregation/1560.html">Facebook正在开发一款独立应用,帮助用户找到现实生活中附近的好友,借机进入一个对手云集但却尚未获得广泛成功的领域. 彭博社称,该应用尚未定名,但有望在下月的SXSW大会上发布.该应用将追踪用户所在的地理位置,并将其与附近的好友分享. Facebook尚未对此置评. 这款应用将与Foursquare.Highlight.谷歌Latitude和苹果Find M

传Facebook将推在线招聘服务 威胁LinkedIn

中介交易 SEO诊断 淘宝客 云主机 技术大厅 新浪科技讯 北京时间7月10日早间消息,消息人士表示,Facebook正计划今年夏季晚些时候推出在线招聘服务.这一招聘服务将聚合第三方厂商的职位信息,方便Facebook用户的搜索. 消息人士称,这一举措并不意味着Facebook将全面进军在线招聘市场,不过如果Facebook认真对待这一项目,那么对LinkedIn等职业社交网络来说是一个巨大的威胁. 至少3家招聘公司的职位信息将被纳入Facebook的招聘服务中,包括BranchOut.Jobv

Facebook推新移动支付服务:自动填写支付信息

新浪科技讯 北京时间9月24日上午消息,Facebook周一推出了名为"Autofill with Facebook"的移动支付服务.这是Facebook在支付服务领域的又一次尝试.美国科技博客AllThingsD此前报道称,Facebook正在与一些零售商合作,帮助顾客利用Facebook帐户向移动设备自动输入支付信息.从美国当地时间周一晚间开始,Facebook正式推出了这一服务.Facebook将把这一服务逐渐推向其逾10亿用户.Autofill with Facebook是一款

使用Ratpack与Spring Boot构建高性能JVM微服务

在微服务天堂中Ratpack和Spring Boot是天造地设的一对.它们都是以开发者为中心的运行于JVM之上的web框架,侧重于生产率.效率以及轻量级部署.他们在服务程序的开发中带来了各自的好处.Ratpack通过一个高吞吐量.非阻塞式的web层提供了一个反应式编程模型,而且对应用程序结构的定义和HTTP请求过程提供了一个便利的处理程序链:Spring Boot集成了整个Spring生态系统,为应用程序提供了一种简单的方式来配置和启用组件.Ratpack和Spring Boot是构建原生支持计

Twitter和Facebook竞相推出地理定位服务

北京时间3月12日下午消息,据国外媒体报道,Twitter周三宣布推出地理定位服务,而Facebook也将允许用户分享定位信息. 由于Twitter此前已经将地理定位服务添加到API(应用编程接口)中,而且一些第三方应用已经支持这一功能,所以Twitter网站支持这一服务并不出人意料.美国科技博客TechCrunch表示,Twitter网站的地理定位服务只是暂时上线,目前无法使用,但一周内有望恢复. 相比而言,Facebook的声明则更加令人惊喜.<纽约时报>最早报道了这一消息,并且引用了Fa

Facebook将涉水地理定位服务

代码显示,Facebook将在专门为触摸屏手机开发的网站上推出地理定位服务 北京时间5月10日下午消息,据国外媒体昨日报道,Javascript代码显示,Facebook将在专门为触摸屏手机开发的网站上推出地理定位服务. 过去几周来,一直有传言称Facebook将推出地理定位功能.而在Facebook专门针对iPhone和Android等触摸屏手机设计的touch.facebook.com网站中,Javascrip代码显示该网站的确将推出地理定位功能. 通过Safari浏览器访问touch.fa