《美团点评业务之技术解密,日均请求数十亿次的容器平台》要点:
本文介绍了美团点评业务之技术解密,日均请求数十亿次的容器平台,希望对您有用。如果有疑问,可以联系我们。
本文介绍美团点评的 Docker 容器集群管理平台(以下简称容器平台).该平台始于 2015 年,基于美团云的基础架构和组件而开发的 Docker 容器集群管理平台.目前该平台为美团点评的外卖、酒店、到店、猫眼等十几个事业部提供容器计算服务,承载线上业务数百个,容器实例超过 3 万个,日均线上请求超过 45 亿次,业务类型涵盖 Web、数据库、缓存、消息队列等等.
在容器平台实施之前,美团点评的所有业务都是运行在美团私有云提供的虚拟机之上.美团点评大部分的线上业务都是面向消费者和商家的,业务类型多样,弹性的时间、频度也不尽相同,这对弹性服务提出了很高的要求.
在这一点上,虚拟机已经难以满足需求,主要体现以下两点:
美团点评将容器管理平台视作一种云计算模式,因此云计算的架构同样适用于容器.
如前所述,容器平台的架构依托于美团私有云现有架构,其中私有云的大部分组件可以直接复用或者经过少量扩展开发,如图所示.
图 1. 美团点评容器管理平台架构
整体架构上与云计算架构是一致的,自上而下分为业务层、PaaS 层、IaaS 控制层及宿主机资源层.
容器平台在网络方面复用了美团云网络基础架构和组件,逻辑架构设计如图所示.
图 2. 美团点评容器平台网络架构
在数据平面,我们采用万兆网卡,结合 OVS-DPDK 方案,并进一步优化单流的转发性能,将几个 CPU 核绑定给 OVS-DPDK 转发使用,需要少量的计算资源即可提供万兆的数据转发能力.OVS-DPDK 和容器所使用的 CPU 完全隔离,因此也不影响用户的计算资源.控制平面我们使用 OVS 方案.所谓 OVS 方案是在每个宿主机上部署一个软件的 Controller,动态接收网络服务下发的网络规则,并将规则进一步下发至 OVS 流表,决定是否对某网络流放行.
自研配置模式 MosBridge
在 MosBridge 之前,我们配置容器网络使用的是 None 模式.在实践中,我们发现 None 模式存在一些不足:
为了解决这些问题,我们基于 Libnetwork,开发了 MosBridge – 适配美团云网络架构的 Docker 网络驱动.在创建容器时,需要指定容器创建参数—net=mosbridge,并将 ip 地址,网关,OVS Bridge 等参数传给 Docker,由 MosBridge 完成网络的配置过程.有了 MosBridge,容器创建启动后便有了网络可以使用.容器的网络配置也持久化在 MosBridge 中,容器重启后网络配置也不会丢失.
为了解决本地磁盘数据卷限容能力弱的问题,我们开发了 LVM Volume 方案.该方案在宿主机上创建一个 LVM VG 作为 Volume 的存储后端.创建容器时,从 VG 中创建一个 LV 当作一块磁盘,挂载到容器里.这样 Volume 的容量便由 LVM 的 LV 加以强限制,得益于 LVM 机强大的管理能力,我们可以做到对 Volume 更精细、更高效的管理.例如,我们可以很方便地调用 LVM 命令查看 Volume 使用量,通过打标签的方式实现 Volume 伪删除和回收站功能,还可以使用 LVM 命令对 Volume 做在线扩容.
图 3. LVM-Volume 方案
在设计实现容器监控之前,美团点评内部已经有了许多监控服务,例如 zabbix,falcon 和 CAT.我们不需要设计实现一套完整的监控服务,而更多地是如何高效地采集容器运行信息,根据运行环境的配置上报到相应的监控服务上.
图 4:监控数据采集方案
针对业务和运维的监控需求,我们基于 libcontainer 开发了 mos-docker-agent 监控模块.该模块从宿主机 proc、cgroup 等接口采集容器数据,经过加工换算,再通过不同的监控系统 driver 上报数据.该模块使用 go 语言编写,既可以高效率,又可以直接使用 libcontainer.而且监控不经过 Docker Daemon,不加重 Daemon 的负担.
我们从 Docker 1.11 版本开始,自研维护一个分支,我们称之为 MosDocker.除了一些 Bugfix 之外,MosDocker 还有一些自研的特性.
MosDocker 的大部分特性是解决美团点评业务场景的需求问题,不适合开源.对于社区的 bugfix,我们会定期 review 并 backport 到我们的 MosDocker 版本里.
图 5:美团点评服务治理平台
组件:
功能:
图 6:set 容器组设计
设计特性
参考 Kubernetes 的 Pod 设计,针对我们的容器平台设计实现了 set 容器组.容器组对外呈现一个 IP,内置一个 busybox 作为 infra-container,它不提供任何业务功能,set 的网络、volume 都配置在 busybox 上,所有其他的容器都和 busybox 共享.
在实际业务中的推广应用
通过引入 Docker 技术,为业务部门带来诸多好处,典型的好处有几点:
图 7. 某业务虚拟机和容器平均单机 QPS
图 8 某业务虚拟机和容器资源使用量
在容器化过程中,我们发现 Docker 或者容器技术本身存在许多问题和不足,例如,Docker 存在 IO 隔离性不强的问题,无法对 Buffered IO 做限制;偶尔 Docker Daemon 会卡死,无反应的问题;容器内存 OOM 导致容器被删除,开启 OOM_kill_disabled 后可能导致宿主机内核崩溃等等问题.因此 Docker 或者容器技术,在我们看来应该和虚拟机是互补的关系,不能指望在所有场景中 Docker 都可以替代虚拟机,因此只有将 Docker 和虚拟机并重,才能满足用户的各种场景对云计算的需求.
QA 环节
A1:4G 内存的容器还好,我们线上物理机标配是 128G 内存,而且容器的内存只是 cgroup 里的一个设置,实际分配内存还是以容器使用为准.对于一些内存 bound 型业务,内存需要 10G 甚至更多的,我们给这类业务单独一个物理机集群使用,不和其他业务混部.
A2:kubernetes 源于 Google 的 Borg 系统,Borg 是一个分布式容器集群管理平台,在 Google 内部使用 10 多年,承载海量的 Google 线上业务,架构、性能都在业内有广泛声誉.Kubernetes 可以看作 Borg 用 Go 语言重写,和 Borg 一脉相承,所以 Kubernetes 一经推出便广受业界推崇,现在已经是容器集群管理系统的业界标杆.简单来说 Kuberenetes 有一下优势:
A3:
A4:美团云 Docker 平台的 Volume 管理经过 3 个阶段:
阶段 1:本地文件系统做 volume,优点是开发快,缺点是限容、隔离性差,数据可靠性差
阶段 2:本地 lvm 磁盘,解决了 volume 隔离性问题,但可靠性仍然不足
阶段 3:现阶段,我们使用美团云自研的分布式弹性块存储服务,相当于 aws 的 EBS,用 ebs 做 volume 存储后端,完全解决了容量限制,隔离性,可靠性的问题,在 volume 备份、迁移上也有优势.
A5:据我所知,业界大规模使用容器的方案有 k8s 和 Mesos 的,Swarm 早期功能简单,不能满足生产所需,不过 Docker 公司对 Swarm 的更新很快,而且 Swarm 和 Docker 是一致的接口,相信以后会有较多的实践.
A6:美团云存储后端有分布式对象存储系统,也有分布式块存储系统.都是美团云自研的系统.
郑坤, 2011 年中科院计算所博士毕业,曾在华为从事内核研发工作.2015 年加入美团,负责美团云容器平台的设计开发,以及在美团点评内部容器化推广工作.很高兴本次分享 Docker 技术在美团点评的实践情况.
文章来自微信公众号:高效开发运维
转载请注明本页网址:
http://www.vephp.com/jiaocheng/4077.html