AI 年度盘点与2025发展趋势展望,50+案例解析亮相AICon 了解详情
写点什么

使用 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:004480
用户头像

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

关注

评论

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

同人于野,平常无边 | 对话 StarRocks 的三位女性工程师

StarRocks

数据工程师 38妇女节

VuePress 博客优化之开启 Algolia 全文搜索

冴羽

Vue 搜索 vuepress 博客搭建 Algolia

模块 9 作业(毕业设计)

miliving

好书推荐 ——《噪声:人类判断的缺陷》

天择

好书推荐 认知偏差 噪声 3月月更

Java最最基础入门知识总结回顾

逆锋起笔

Java java面试 javase 3月月更

乘数智之风,为世界造舟筏:女性在当下如何创造?

脑极体

Discuz! ML远程代码执行(CVE-2019-13956)

喀拉峻

网络安全

上手测试GaussDB(for Redis) 和开源 Redis,只为推荐质优价廉的Redis

华为云开发者联盟

数据库 redis 开源 GaussDB(for Redis) 开源Redis

论CTO的作用

hongfei

项目管理 个人提升 工程管理

图文详解:Kafka到底有哪些秘密让我对它情有独钟呢?

浅羽技术

gRPC 简介实践

yuexin_tech

gRPC

还在用递归,试试迭代吧

爱笑的小雨

Python从ECS内网拉取OSS数据

梦想橡皮擦

3月月更

天翼云SD-WAN斩获首批“SD-WAN 2.0 SASE”权威认证

天翼云开发者社区

SD-WAN

活动预告 | ArchSummit全球架构师峰会

第四范式开发者社区

人工智能 机器学习 数据库 架构师 热门活动

安全实战:webshell的几种免杀方式

网络安全学海

黑客 网络安全 信息安全 渗透测试 安全漏洞

超级群、群组、聊天室,IM 产品的场景化「特异功能」

融云 RongCloud

即时通讯 IM

猿桌派第 2 季回归,报名赢现场录制机会!

融云 RongCloud

程序员

模块九

撿破爛ぃ

架构训练营

商品库存管理和秒杀系统设计(19/100)

hackstoic

技术方案 互联网应用技术方案

设计模式:今天你设计了吗?

SFLYQ

设计模式 服务器端开发 后端技术

Committer 蔡正昕专访:勇敢迈出第一步,做开源没有那么难

Apache Pulsar

架构 云原生 中间件 Apache Pulsar 开源社区

基于区块链技术的超级账本(Hyperledger) - 从理论到实战

汪子熙

区块链 智能合约 云平台 Go 语言 2月月更

我要跳槽了!

IC男奋斗史

职业规划 芯片行业思考

Go语言实战之切片的内部实现和基础功能

山河已无恙

Go 语言 3月月更

Flutter 构建常见的App页面框架

岛上码农

flutter ios 安卓 移动端开发 3月月更

Python 学习路线(2022)

AlwaysBeta

Python django 编程语言 学习路线 编程入门

融云通信周边能力上新啦!一键 Get 美颜、CDN 服务

融云 RongCloud

CDN 人脸识别

华云数据加入龙蜥社区,推动开源产业快速有序成长

OpenAnolis小助手

云计算 Linux 开源 操作系统 国产

工作以后流的泪,就是当初校招时脑子进的水

IC男奋斗史

职业规划 芯片行业思考

AI提取图片里包含的文字信息-解决文字无法复制的痛点

DS小龙哥

3月月更

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