大模型“四虎”出山,亮相 4 月 QCon 北京。 了解详情
写点什么

使用 Apache Mesos 打造分布式资源调度系统

  • 2016-08-18
  • 本文字数:2847 字

    阅读完需:约 9 分钟

Netflix 使用 Apache Mesos 运行了一系列批处理、流式处理,以及服务类型的工作负载。两年多来,我们创建了层出不穷的用例,例如实时异常检测、批处理作业的训练和模型构建、机器学习编排,以及基于 Node.js 的微服务。最近发布的 Apache Mesos 1.0 意味着这项技术已经成熟,相比我们首次使用该服务时已经有了巨大的改进。

我们最初使用 Apache Mesos 的动力主要在于该技术能够将来自同一个 EC2 实例的资源更为细化地分配给不同规模的任务。如果不使用 Mesos 或其他类似的资源管理器,将无法为数量日益增加的实例进行更细化的分配,导致无法获得令人满意的利用率,或只能自行开发类似于 Mesos 的技术,至少也要开发出其中的部分功能。

越来越多的流式处理和批处理作业开始使用容器,这也推动了基于 Mesos 的资源调度技术的使用。最近开发者已经可以从基于 Docker 的容器通过 Mesos 集群获得一系列服务类型的工作负载。本文将概括介绍 Netflix 工程团队使用 Apache Mesos 打造的一些项目。我们将介绍该技术所满足的不同用例,以及每个用例是如何高效使用这种技术的。有关每个项目的进一步细节请参阅下文给出的博文链接。

使用 Apache Mesos 打造云端原生调度机制

为了从不同 EC2 实例为任务分配资源,我们需要一种能对可用资源进行调度,并能在分布式 EC2 实例上启动和监控任务的资源管理器。Apache Mesos 可将要使用集群的“框架”的资源分配,与框架任务的资源调度区分处理。当 Mesos 确定要将多少资源分配给框架后,将由框架的调度器决定在什么时候将哪些资源分配给哪个任务。这样的调度器是一种相当简单的 API,因此也能更专注于调度逻辑,并对分布式系统中不可避免出现的故障做出回应。借此用户可以针对不同用例编写不同调度器,不像 Mesos 那样为所有用例使用一个统一的调度器。下图来自 Mesos 文档,展示了“框架 1”收到“代理 1”的指令启动两个任务的过程。

一段时间来,Mesos 社区已经出现了多种针对不同用例的调度器,并为用户提供了相应的 API。

Netflix 在 AWS EC2 弹性云中运行了多个微服务。在原生云环境中运维 Mesos 集群要求我们必须确保除了与数据中心内部运维类似的任务外,调度器还能同时处理另外两方面内容:运行任务的代理寿命更短暂,以及 Mesos 代理集群具备根据需求变化自动伸缩的能力。另外我们所处理的用例需要实现一种比 First fit 类型的分配更先进的资源调度机制。例如按照 CPU、内存,以及网络带宽的用量将多个任务装箱(Bin packing)到不同代理,借此实现资源碎片最小化。装箱还可以帮助我们释放尽可能多的代理,在不影响运行中任务的前提下终止空闲代理,让代理集群的扩张速度放缓。

为找出现有调度器在此类能力方面的缺失,去年我们开发了一种名为 Fenzo 的调度库。Fenzo 可以根据需求自动缩放代理集群,并根据由健康标准(Fitness criteria)和约束组成的多种调度目标为任务分配资源。这些健康标准和约束可通过插件进行扩展,并具备少量内建的通用实现,例如为了实现高可用跨越 EC2 可用区对作业进行任务装箱和分散。JVM 上运行的任何 Mesos 框架都可使用 Fenzo Java 库。

Netflix 对 Mesos 的运用

目前我们通过 Apache Mesos 集群运行了三个项目。

Mantis

Mantis 是一种以原生云服务方式运行的反应式流处理平台,主要侧重于运维数据流的处理。Mantis 包含多种不同用例,例如实时仪表盘、预警、异常检测、衡量指标生成,以及流数据的即席交互式探索。我们使用 Mantis 主要是为了简化团队成员访问实时事件和以此为基础构建的计费应用程序的过程。目前 Mantis 的事件流处理能力已高达每秒 800 万条事件,可不间断运行数百个流处理作业。我们有一个此类作业主要侧重于视频内容的处理,可以针对内容提供细化的洞察,例如巴西地区 iPad 上播放纸牌屋第四季第一集时遇到了问题。这一功能需要不间断追踪数百万不同的数据排列组合方式。

Mantis 平台包含一个主(Master)集群和一个代理(Agent)集群。用户可以将流处理应用程序以作业的形式提交,并在代理集群内一个或多个工作进程(Worker)上运行。主集群会使用 Apache Mesos 中包含的 Fenzo 调度库优化作业工作进程的资源分配。这种分配操作的目标之一在于将需要持续不间断运行的流处理作业与只需要短时间运行的交互式作业分布到不同代理上,这样当短时间运行的作业运行完毕后,即可收缩代理集群的规模。下图展示了 Mantis 的体系结构。来自不同作业的工作进程可以通过基于 Cgroups 的资源隔离机制在同一个代理上运行。

Titus

Titus 是一种 Docker 容器作业管理和执行平台。最初 Titus 主要用于实现包含算法训练(类似于视频推荐、A/B 测试单元体分析等任务)的批处理作业,以及需要每小时运行一次的即席报表和分析作业。最近为了提供一致的本地开发体验以及实现更细化的资源管理,Titus 开始为服务类型的作业(Netflix 微服务)提供支持。Titus 首个服务类型的用途是使用服务器端的 NodeJS 进行 API 的重构

上述 Titus 体系结构示意图展示了使用 Fenzo 从 Mesos 代理分配资源的主节点。Titus 可与 Netflix 微服务和 AWS 生态系统实现紧密集成,包括与服务发现、基于软件的负载平衡、监控,以及我们的 CI/CD 管线、Spinnaker 等技术进行集成。在 Mesos 中编写自定义执行器的能力使得我们能够轻松地对容器运行时进行优化,使其与生态系统的其他部分更为匹配。

Meson

Meson 是一种通用的工作流编排和调度框架,主要可用于管理机器学习管线。

Meson 主要适用于对 CPU、内存,以及磁盘空间等资源有着不同要求的作业所组成的异构环境。它可以支持通过一个共享集群运行 Spark 作业和其他批处理作业。在基于 Cgroups 的隔离机制帮助下,代理上的不同任务将使用相互隔离的资源运行。Meson 的调度器会根据图表(Graph)评估任务的就绪情况,并通过 Mesos 提供的资源启动已经就绪的任务。失败处理措施包括重新启动失败的任务,以及自动终止被确定为已经出错的任务。

上述示意图展示了 Meson 的体系结构。Meson 团队目前正在着手使用 Fenzo 调度库增强其调度能力。

Apache Mesos 的继续完善

在我们持续完善 Mantis、Titus 和 Meson 项目的过程中,Apache Mesos 提供了稳定、可靠、可伸缩的资源管理平台。我们通过开源的 Fenzo 以及在 MesosCon 大会上分享创意等方式参与到了 Mesos 的社区贡献中。您可以在即将举办的 MesosCon Europe 2016 大会上与我们交流,或查看我们之前参与 2014 2015 年,以及今年上半年活动的总结(学到的经验 Meson )。

对于这些项目,我们的未来计划包括增加 SLA(服务级别协议,例如为服务和批处理形式的作业提供不同的容量担保),对代理和容器的安全加固,改善运维效率和能见度,以及对更广泛用例的支持。为了取得更长足的进展,目前我们正在围绕 Mesos、Fenzo 以及我们的框架开展一些非常激动人心的项目。

查看英文原文 Distributed Resource Scheduling with Apache Mesos


感谢陈兴璐对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-08-18 19:004619
用户头像

发布了 283 篇内容, 共 111.1 次阅读, 收获喜欢 62 次。

关注

评论

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

新思科技网络安全研究中心发现Jetty Web服务器存在漏洞

InfoQ_434670063458

新思科技 Jetty Web

装在套子里的人

Dc

淘宝推荐、视频搜索背后的检索技术:阿里达摩院向量检索Proxima核心能力揭秘

Proxima 技术社区

人工智能 大数据 阿里巴巴 搜索 非结构化数据

腾讯五面、快手三面已拿offer(Java岗位),分享个人面经

Java架构之路

Java 程序员 架构 面试 编程语言

他喵的,Google大佬的这份LeetCode刷题笔记太强了,提升算法能力必备!

Java架构之路

Java 程序员 架构 面试 编程语言

Kubectl Plugin 推荐(二)| 简化操作篇

郭旭东

Kubernetes kubectl kubectl plugin

面试看这个就够了!最新BAT大厂面试者整理的Android面试题目模板,先收藏了

欢喜学安卓

android 程序员 面试 移动开发

数据库周刊60丨3月国产数据库排行榜出炉;日本银行数据迁移失败致使业务宕机;阿里云RDS PG13发布;亚健康Oracle数据库故障定位;Redis最佳实践;MySQL查询优化……

墨天轮

MySQL 数据库 oracle 运维 postgre

滚雪球学 Python 之 lambda 表达式

梦想橡皮擦

28天写作 3月日更

区块链:热追背后需冷静 技术应用要同步

CECBC

区块链

高盛:机构需求量巨大,比特币年内或有望涨至10万美元

CECBC

比特币

第二章-利益相关方分析

阿珍爱上阿强

利益相关者

这操作真香!一线互联网企业高级Android工程师面试题大全,面试真题解析

欢喜学安卓

android 程序员 面试 移动开发

【点评必看】这道 Hard 到底难在哪里?大概是难在考察的是违反“人性直觉”的内容吧 ...

宫水三叶的刷题日记

面试 LeetCode 数据结构与算法

2021年3月国产数据库排行榜:雏凤声清阿里三连 绝代双骄华为合璧

墨天轮

数据库 腾讯云 阿里云 华为云 TiDB

场景demo落地 - 视频通话 2.0 ARCall

anyRTC开发者

flutter uni-app android WebRTC RTC

一场发生在“田间地头”的数字化变革

CECBC

三农

如果延迟退休势在必行,区块链如何助力“养老助老”?

CECBC

养老

第五.需求评审与产品发布 (承上启下的作用)

让我思考一会儿

网点数字化也要适老化 浦发银行为老年人跨越“数字鸿沟”制定服务范本

CECBC

数字鸿沟

2021最新发布拼多多/字节/360/网易/面经总结

比伯

Java 编程 程序员 架构 面试

谷歌大佬回国发展,吊打各大厂面试官!吐血总结大厂面试高频点及笔记解析

Java架构之路

Java 程序员 架构 面试 编程语言

LeetCode题解:125. 验证回文串,翻转数组,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

当跨国企业女职业经理人遇上创业女 CEO,两者会擦出什么样的火花?

科技新消息

选择IDaaS解决方案的6个技巧

龙归科技

Idaas

Python3 * 和 ** 运算符

老王说编程

Python3

两会引爆数字经济 银行与科技公司找到合作新赛道

CECBC

数字经济

如何凝聚党员力量?智慧组工系统构架组织部管理平台解决方案

源中瑞-龙先生

解决方案 党员 智慧组工

为什么我们开发 San 项目时要用 CLI?

百度Geek说

service SLI san command

产品经路训练营 -- 第四章作业(一)

Lucas zhou

产品经理训练

书单|互联网企业面试案头书之程序员技术篇

博文视点Broadview

使用Apache Mesos打造分布式资源调度系统_开源_Sharma Podila_InfoQ精选文章