京东 618:15 万个 Docker 实例,所有业务全部容器化

  • 穆寰

2016 年 6 月 17 日

话题:DevOps架构容器运维京东618

在 2015 年的 618 大促中,京东大胆启用了基于 Docker 的容器技术来承载大促的关键业务(图片展现、单品页、团购页),当时基于 Docker 容器的弹性云项目已经有近万个 Docker 容器在线上环境运行,并且经受住了大流量的考验。而今年 618,弹性云项目更是担当重任,全部应用系统和大部分的 DB 服务都跑在 Docker 上。像 618 大促这样的流量高峰期,弹性云可以自动管理资源,做到弹性扩展,而在流量低谷期,又可以进行资源回收,在提升资源利用率的同时确保了运维系统的稳定性。据官方估计,本次大促活动中,京东线上将会启动近 15 万个 Docker 容器,从数量上来看,京东是全球范围内 Docker 的应用大户之一。

为了了解相关的详情,InfoQ 记者采访了弹性云项目负责人鲍永成。此外,鲍永成将会在 InfoQ 主办的CNUTCon 全球容器技术大会上分享本次 618 大促的具体技术细节,欢迎关注。

受访嘉宾介绍

鲍永成,京东弹性计算组项目负责人,带领弹性计算团队,深耕 IaaS 领域,致力于打造京东强大的虚拟化平台。2013 年初加入京东,重点在京东弹性云平台系统研发,运营多个中大规模 IaaS 集群,包括(京东弹性云、公有云、混合云等产品),在 OpenStack 研发 & 性能优化、自动化部署、KVM、Docker、分布式系统等方面有一定的实践经验。

InfoQ:去年 618 的时候,我们就有聊过京东 Docker 的应用情况。您能对比去年 618,介绍下今年的规模、应用以及调整吗?

鲍永成:从数量上来讲,去年 618 线上容器应对峰值为 9 千个实例,今年截止 6 月 17 日线上容器突破 15 万实例;在整体布局上来看,对比去年 618,弹性云在规模上和业务全容器化实现战略落地。

在应用层面,京东所有应用 100% 通过容器技术来发布和管理应用集群。值得指出一点:今年 618 有 5600 个容器实例支撑 DB 集群,对京东云数据库提供非常便利的支持。

弹性云核心架构没有很大变化,依然简洁定义:弹性云 = 软件定义数据中心 + 业务容器集群调度。在此基础上,有两点增强:

  • 单个容器的稳定性和性能方面做了很大提升,有效满足核心系统对计算和网络的巨大需求;
  • 统一管理物理机、虚拟机和容器,加入统一集群进行调度,以适应不同业务对计算资源的不同需求;

InfoQ:您能介绍下有哪些业务全量跑在 Docker 上吗?为了迎接这样的挑战,架构做了哪些调整?

鲍永成网站、交易、无线、微信手 Q 等全部应用系统和 DB 服务的大部分都跑在 Docker 上。

因为京东业务在多年前就开始微服务化治理,所以应用层架构调整很小。现如今微服务化比例已经很大,所以容器技术的融入比较顺利。弹性云平台,算是站在多年对各个业务系统微服务化治理的巨人肩膀上。

InfoQ:这么多容器,如何做到海量监控?采用了什么开源方案吗?有哪些注意的事项?

鲍永成监控采取自主研发系统,该系统负责海量数据采集和存储工作,其构架如图。

对于 15W+ 容器监控,需要注意:指标采集传输一定要设计得非常高效,并且要做到采集过程对资源的消耗控制,建议使用加速告警和监控图表跟踪缓存状况。

InfoQ:在洪峰来临之时,弹性计算云平台是如何进行扩容的?可以从系统角度分享下其中的流程吗?

鲍永成弹性云有两种模式:

  • 自动模式会根据每个业务方自己的预设弹性扩展条件,自动触发扩容。扩容工作包括使用业务镜像 spawn 实例、自动 DB 授权、微服务框架注册、添加实例到 LB 负载。
  • 手动模式的前提是有弹性事件被触发,垂直运维收到扩展确认消息,人工参与的只是这个消息的点击确认扩容环节,其后续流程与自动模式一致。

InfoQ:可以谈谈目前应用了哪些关键开源项目吗?各自在系统的哪些 level?对应的版本分别是什么?

鲍永成主要是 OpenStack 和 Docker,具体如下:

  • OpenStack-IceHouse 用于管理数据中心计算、网络、存储等资源,位于 JD Data Center Operating System 层。
  • Docker-1.3 用于 spawn 容器实例,加入很多自主研发的内容和功能。

InfoQ:这么多的容器,您觉得最大的挑战是什么?

鲍永成1. 集群规模介于高效运维,弹性云集群走的是大集群架构的思路。单个 OpenStack 集群会建设得非常大,目前单集群规模控制在 6 千台计算节点左右。

管理 6K 台计算节点集群,仅仅使用原生 OpenStack 是很困难的,因此我们对 OpenStack 依赖的数据库、MQ 等全部重新设计实现,设计经过测试可以支撑 1W 台计算节点。

2. 单实例性能调优很多核心的业务对单个请求的响应时间有极其严格要求,这势必要求弹性云提供的每一个容器实例均要具有极好的性能,我们从 CPU 和网络两方面入手。

针对 CPU,我们采取 Scale-up 算法灵活调配 CPU 分配,使繁忙业务可以及时获得足够多 CPU 资源。

在网络这块,主攻方向为如何把万兆卡的性能发挥出来。我们对 OVS(Open vSwitch)做了一些改进:减少了一些锁,优化 peer port 和网卡中断。这带来近乎物理机网卡的网络性能。

InfoQ:这么大规模的 Docker 应用,在国内外都是屈指可数的。在整个容器化的进程,你们得到了什么,失去了什么?

鲍永成京东弹性计算云通过软件定义数据中心与大规模容器集群调度,实现海量计算资源的统一管理,并满足性能与效率方面的需求。

提升业务自助上线效率。应用部署密度大幅提升,资源使用率提升,节约大量的硬件资源。

而面临的调整也很多,比如内核因为 bug 升级。全部容器化后,底层依赖系统的版本高度一致,很容易带来因为底层 bug 需要规模性升级,幸运的是我们在内核团队建设这块一直非常重视,已经有内核发布版本、内核热 patch 等方式,有效解决此类问题。

InfoQ:在 CNUTCon 2016 全球容器技术大会上,你会重点分享哪些内容?

鲍永成重点分享软件定义数据中心、大规模容器集群调度以及 Docker 容器性能调优。

InfoQ:感谢鲍永成老师接受我们的采访。期待您在CNUTCon 2016 全球容器技术大会上的分享。

感谢郭蕾对本文的审校。

DevOps架构容器运维京东618