阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |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:004297
用户头像

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

关注

评论

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

【网络安全】记一次挖矿病毒的应急响应

H

网络安全 应急响应

去吗?去啊!喜欢就不要再犹豫

码哥字节

爱情 2月春节不断更 情人节 情书 2月月更

1月月更获奖名单公布!快来获取专属海报

InfoQ写作社区官方

热门活动

Java&Go高性能队列之Disruptor性能测试

FunTester

Disruptor 性能测试 高性能 消息队列 FunTester

7*24 小时业务不中断!菜鸟乡村应用多活落地实践

阿里巴巴云原生

阿里云 云原生 实践案例 多活

实力卓越,旺链科技与IBM、华为等共登「超级账本」年度贡献榜!

旺链科技

区块链 超级账本 产业区块链

如何用建木CI发送邮件

Jianmu

html 自动化 发送邮件

如何利用 AHAS 保障 Web 服务稳如磐石?

阿里巴巴云原生

阿里云 高可用 云原生 AHAS

小程序框架与平台编译对比

Speedoooo

编译 ios开发 APP开发 Andriod开发 小程序框架

你的数据产品应该是一套解决方案

第519区

数据产品经理 解决方案 数据产品 2月月更

从冬奥看中国科技(三):数字人的觉醒与进化

脑极体

【附赠PPT】 KubeMeet 成都站回顾:让云原生应用交付和管理变得更简单!

阿里巴巴云原生

阿里云 Kubernetes 云原生 活动 开源项目

被催稿了,所以聊聊 长链接在移动端开发中如何做到和短链接一样高效

百瓶技术

TCP 计算机网络 websocket

我们找回了泄露的内存

Qunar技术沙龙

一篇文章讲懂prometheus

流沙

云原生 监控 Prometheus

网络安全kali渗透学习 web渗透入门 如何进行基于Nmap的扫描方式

学神来啦

阿里巴巴如何进行测试提效 | 阿里巴巴DevOps实践指南

阿里云云效

阿里云 DevOps 云原生 测试 研发提效

SAE 最佳实践范本:助力视野数科进入云原生“快车道”

阿里巴巴云原生

阿里云 Serverless 云原生 SAE

Serverless 架构开发手册 — “人人都是 Serverless 架构师”先导篇

阿里巴巴云原生

阿里云 Serverless 架构 云原生

书单 | 作为冬奥会的技术支持方,阿里云的技术都写在这些书里了!

博文视点Broadview

从IPv4 到 IPv6 的过渡技术

郑州埃文科技

ipv6 ipv4 过渡技术

DGIOT物联网架构设计

dgiot

物联网 2月月更 2月日更 dgiot dgiot物联网

dart系列之:集合使用最佳实践

程序那些事

flutter dart 程序那些事 2月月更

OceanBase 雄踞墨天轮2021年度中国数据库魔力象限领导者

OceanBase 数据库

魔力象限 OceanBase 开源 领导者

今天踩了一个基础坑

编程三昧

JavaScript 2月月更

【网络安全】什么是应急响应,应急响应中你到底该关注哪些指标?

H

网络安全 应急响应

情人节,码了一个程序员专属冰墩墩(内含源码免费获取)

ZEGO即构

前端 html/css 情人节 表白 冬奥会

带你掌握Visual Studio Code的格式化程序

华为云开发者联盟

Python 代码 格式化 Visual Studio Code linter

用python制作心型照片墙

36度道

Python基础

买贵不买对?这个情人节,你的礼物选对了吗?

易观分析

情人节 美妆

年轻用户逐渐成为数字营销主流受众,品牌营销方式该如何创新?

易观分析

内容营销

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