Mesos 在爱奇艺的实践

简介: 本文讲的是Mesos 在爱奇艺的实践Mesos 平台每周启动的容器超过 500 万,峰值在线容器数近 2 万;适当的资源超卖给我们带来的是在最近一个季度中,所有集群 CPU 平均利用率超过 20%,而最繁忙的集群超过 50%,这对于一家互联网公司来说非常不易。
【编者的话】 Mesos  在爱奇艺目前管理着大约 2000 台物理机,分布在多个数据中心,单个集群最大节点数接近 600。

本文讲的是Mesos 在爱奇艺的实践Mesos 平台每周启动的容器超过 500 万,峰值在线容器数近 2 万;适当的资源超卖给我们带来的是在最近一个季度中,所有集群 CPU 平均利用率超过 20%,而最繁忙的集群超过 50%,这对于一家互联网公司来说非常不易。

在这些惊讶的数字背后,Mesos 支撑着许多重要业务,包括但不限于,几乎所有视频、音频、图片转码,对服务质量和稳定性要求非常高的在线服务以及  Storm Spark  这类实时计算分析业务等。

牛刀小试

时光如逝,回望 Mesos 在爱奇艺的发展历程,也并非一番风顺。且不论起初的时候人员不足,借人帮助开发,开源代码成熟度不够,一日三坑,不得不暂时搁置一些项目;更别提在一家发展迅速的科技娱乐公司去推动基础设施服务变革的乏力感。
1.jpeg

爱奇艺从 2013 年底开始调研 Mesos,这个声称受到  Google Borg  集群管理系统启发的开源数据中心操作系统核心。

Mesos 是一个  ASF  顶级开源项目,Mesos的作者也创建了  Mesosphere  公司来更好的推动 Mesos 生态的发展。

并且,基于 Mesos,Mesosphere 发布了开源的数据中心操作系统  DC/OS ,这一次,暴露在你眼前的不仅是内核,而是一个完整的数据中心操作系统。

在 2014 年初,我们将 Mesos 0.16.0 部署到了生产环境,之上运行了一个自研的任务调度器,以短任务的形式运行视频转码业务。

这之后,由于人员和开发量的关系,以及到了年中的时候,我们发现  Chronos  作为基于 Mesos 的短任务调度器已经变得比较完善,顺理成章的,我们尝试从自研的转码框架切换到 Chronos,由此开始了一段新的征程。

有得有失

2.jpeg

和使用 Mesos 的感觉不一样,Chronos 并没有 Mesos 那样稳定,以至于在后面大半年的时间里,我们使用了一些临时手段来维持稳定,直到后来有更多时间彻底解决了 Chronos 的稳定性问题,在那之后,Chronos 几乎没有再出过问题。

我们对 Chronos 进行了大量开发,其中有超过 30 个 commit 回馈到 Chronos 社区并被接受,而大部分则是我们内部私有的改动,不够通用,所以没有提交到社区,而我们内部则为修改后的 Chronos 取名为 Sisyphus,古希腊中推着石头上山的神,这也是我们为数不多的自认为取得好的项目名字!
3.jpeg

伴随着 Chronos 稳定性的提高,转码业务量逐步切换到 Mesos 集群,直到 2015 年中转码团队不再维护任何生产集群;至此,Chronos 完全支撑了公司的转码生产业务。

在开发 Chronos 的同时,我们也上线了  Hadoop  on Mesos 业务,不过由于业务量不大,以及后来 YARN/MapReduce2 的推出,我们将运行在 Mesos 上的业务全部迁移到了 YARN 集群。

另一方面,Storm 在解决了一些问题之后,能够稳定的提供服务,所以我们也将 Storm 业务接入了 Mesos 集群。对于另一个可以运行在 Mesos 之上的框架 Spark 来说,彼时的 Spark 运行在 Mesos 上还不够稳定,所以我们并没有上线 Spark on Mesos 业务。
4.jpeg

因为,2014 年底我们开始了对  Marathon  的调研,并且在 Marathon 之上设计和开发我们自己的 PaaS 平台 QAE(iQIYI App Engine)。

自研 PaaS 平台 QAE

QAE 是一个完全自助式的(除了配额申请)容器云平台,用户(公司内部开发者)只需要申请资源配额,就能在 QAE 上实现对 App 的全自助式管理,生命周期管理自不必说,其它的高级功能例如:
  • 基于角色的鉴权
  • App 和容器的监控
  • 非侵入式的接入自定义监控
  • 订阅式的报警
  • 根据任何监控指标自动伸缩
  • 支持灰度发布、AB 测试
  • App 的高级分布策略
  • 健康检查
  • 日志管理
  • 历史容器管理(方便排障)
  • 在线控制台
  • CI/CD,自动部署

这里还想啰嗦几句,我对  IaaS  和  PaaS  的理解。

从用户角度来看,IaaS 和 PaaS 面向的用户群有所区别,前者要求用户对系统有更好的理解,更高的熟悉度,类似管理员的角色;而后者要求用户对软件开发环境有更好的熟练度,类似开发者角色。

另一方面,从用户的角度来说,IaaS 提供虚机本非用户所需,用户得到的虚机和物理机并没有本质区别,所以对用户来说,没有什么附加值;IaaS 之所以普遍存在,出发点并不是为了给用户提供更好,更高级的服务,而是节约计算成本,提高大规模计算资源的维护能力。

所以,PaaS 平台 QAE 是更好的选择。

从容器到微服务

经过两年多的漫长发展,QAE 羽翼渐丰,也接入了近万的在线容器,形成了良好的用户口碑,已经变成了能够吸引用户主动采用的平台。
5.jpeg

我们的下一步是乘上 微服务 的风口,提供更多的微服务友好的基础设施以及产品给我们的用户(公司内部开发者)。

因为微服务几乎总是和容器形影不离,可能会被人误以为实现了容器云平台,自然而然的也就实现了微服务平台。

在我看来,其实不然,容器仅仅只是一种软件分发、运行方式,和服务并不位于同一个维度;微服务之所以和容器形影不离,无非是容器相较于虚机来说更加易用,灵活,更加适合微小的服务来利用物理计算资源。

想象一下,微服务带来了什么问题?

一个单体 App,如果需要部署 100 个实例来提供服务,以前基于虚机的时候,开发者需要部署 100 台虚机,不管他用什么方式,总之需要部署;要知道,爱奇艺并没有专门的应用  SRE  帮助开发者维护运行环境;而现在,如果开发者使用 QAE 来管理他的 App,那么只需要在 QAE 上部署一次即可,100 个,1000 个实例,不过是点点按钮的事情。

所以,在这个例子中,对于开发者来说,将业务管理成本降低了 100 倍,太棒了!

但是,如果开发者决定将单体 App 拆分呢?如果拆成 100 个微服务,会变成什么情况?

在 QAE 上他得部署 100 次,即使 QAE 有 App 复制/导入的功能,也依然捉襟见肘,运维成本高企。

更难的是,这 100 个微服务的治理,100 个微服务的拓扑、依赖关系是什么样的?各个微服务之间的流量是怎样的?流量是否健康?微服务接口是否有完善的鉴权管理?是否能从各种维度对微服务之间的请求限流?服务调用跟踪排障?怎样快速发现,接入服务,跨数据中心的流量管控等等?

而这些微服务基础设施,严格来说,并非需要总是和容器联系起来,而是应该作为另一个维度的基础设施,发挥着举足轻重的作用,微服务基础设施之于微服务就像虚机和容器之于单个 App 实例一样重要。

微服务基础设施例如:

API gateway, APM ,链路调用跟踪,服务中心等正在积极的开发当中,相信和 QAE 一样,两年过后,一定也会得到内部用户的认可。

只争朝夕

两年太远,只争朝夕;来看看我们现在正在做哪些事情呢。

改造 QAE 的健康检查,以前是基于 Marathon 的健康检查,由于 Marathon 健康检查是集中式的,所以当容器达到数千的时候,可能会出现瓶颈;而 Mesos 的分布式健康检查则不会有这个问题,因为计算节点总是伴随着业务规模规模一起增长的。

QAE 支持托管计算资源,作为一个通用的平台,我们有一些推荐的最佳实践,比如:容器的配置有上限,因为我们不希望用户把容器当做虚机,甚至物理机来使用;

支持的网络特性,分布特性有限制,例如:共享的集群可不想让用户使用 HOST 网络模式;

出于这些考虑,有些非常想使用 QAE 的特殊业务(例如:直播转码,HCDN 等)不得不被挡在了门外。

所以,我们正在实现 QAE 支持托管的计算资源,主要需要实现:
  • 计算集群对用户的鉴权,托管的集群只能被有权限的用户看到和使用
  • 集群特性,QAE 需要能够探测集群支持的特性,例如:这个集群支持 HOST 网络模式,支持配置 32 核的超大容器等等。

除了 QAE 之外,对于 Mesos 和  Docker ,我们也在做一些很酷的事情:
  • 切换到 Mesos unified container,踢掉Docker daemon 这个一直不太稳定的家伙
  • 从 Device-Mapper 切换到 OverlayFS,另一个在高并发新建/删除容器下不够稳定的组件
  • 从可配置的静态资源超分迁移到动态的 Mesos Oversubscription,进一步提升资源利用率;这是一个和南京大学合作的项目,相信很快就会有结果
  • 实现离线和在线业务的真正混布,结合 Mesos Oversubscription,进一步降低集群管理成本,提高利用率
  • 使用 Mesos 统一管理 GPU 计算资源
  • 引入公有云,提高 Mesos 集群扩容的速度和效率,让业务能够自由的在私有云和公有云上调度。

6.jpeg

虽然自认为我们在推动公司容器化应用的道路上取得了一些阶段性的成果,但路漫漫,其修远兮,还有更多的事情等着我们去完成!

原文链接:Mesos 在爱奇艺(作者:luffy)

作者介绍:

luffy,目前负责公司私有云计算平台(虚机及容器)的建设;加入爱奇艺前,在英特尔开源技术中心参与 MeeGo、Tizen 移动操作系统的开发;开源软件用户、爱好者、贡献者,对多个开源项目有代码贡献,从操作系统基础软件 Systemd,D-Bus 到云计算项目 Mesos,Chronos 等。

原文发布时间为:2017-09-18

本文作者:luffy

本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:Mesos 在爱奇艺的实践

相关文章
|
人工智能 资源调度 Kubernetes
混部开源 Koordinator 背后的故事|学习笔记(一)
快速学习混部开源 Koordinator 背后的故事
468 0
混部开源 Koordinator 背后的故事|学习笔记(一)
|
16天前
|
Cloud Native 安全 微服务
云原生开源沙龙北京站火热报名中丨微服务安全零信任架构
云原生开源沙龙北京站火热报名中丨微服务安全零信任架构。
|
7月前
|
Kubernetes jenkins 持续交付
云原生翘楚KubeSphere 和 知名开源项目 Pig 最佳实践
云原生翘楚KubeSphere 和 知名开源项目Pig 爱的火花。
335 0
|
运维 Kubernetes Cloud Native
「开源人说」| 开源项目的演进会遇到哪些“坑”?KubeVela 从发起到晋级 CNCF 孵化的全程回顾
KubeVela 诞生于 OAM 社区,开源第一天起就遵循“社区发起、开放治理、国际化运作”的原则。 今 年 2 月,KubeVela 经过全体 ToC 投票成功进入 CNCF Incubation,是云原生领域首个晋级孵化的面向应用的交付和管理平台。本文将做一个完整的回顾,梳理项目演进过程中的那些“坑”,希望对整个开源生态的发展有所帮助。
48499 1
「开源人说」| 开源项目的演进会遇到哪些“坑”?KubeVela 从发起到晋级 CNCF 孵化的全程回顾
|
运维 Kubernetes Cloud Native
开源项目的演进会遇到哪些“坑”?KubeVela 从发起到晋级 CNCF 孵化的全程回顾
KubeVela 本身也有别于“大厂开源”的惯性模式,它从第一天起就遵循“社区发起、开放治理、国际化运作”的原则,核心理念之一就是“始终以业界的最广泛和最真实场景作为项目演进的指南针”,所以发展路径中一直在倾听社区的声音,以最普遍、最共性的需求为最高优先级。
120 0
开源项目的演进会遇到哪些“坑”?KubeVela 从发起到晋级 CNCF 孵化的全程回顾
|
Kubernetes Cloud Native Dubbo
Meetup 报名丨 共话云原生架构升级,微服务x容器开源 Meetup 北京站来啦!
聆听精彩分享,零距离对话热门开源项目核心维护者。2023 年 02 月 25 日,微服务x容器开源开发者 Meetup 北京站来啦!
64990 0
Meetup 报名丨 共话云原生架构升级,微服务x容器开源 Meetup 北京站来啦!
|
运维 监控 持续交付
腾讯蓝鲸智云运维平台单机版本部署实践
腾讯蓝鲸智云运维平台单机版本部署实践
996 0
腾讯蓝鲸智云运维平台单机版本部署实践
|
存储 弹性计算 Cloud Native
混部开源 Koordinator 背后的故事|学习笔记(三)
快速学习混部开源 Koordinator 背后的故事
185 0
混部开源 Koordinator 背后的故事|学习笔记(三)
|
存储 机器学习/深度学习 弹性计算
混部开源 Koordinator 背后的故事|学习笔记(四)
快速学习混部开源 Koordinator 背后的故事
276 0
|
编解码 人工智能 Kubernetes
混部开源 Koordinator 背后的故事|学习笔记(二)
快速学习混部开源 Koordinator 背后的故事
265 0
混部开源 Koordinator 背后的故事|学习笔记(二)