2020 Google开发者大会重磅开幕 了解详情

京东618:容器技法日趋娴熟,数个项目即将开源回馈社区

2017 年 6 月 17 日

容器技术火遍技术界,很多公司包括传统行业企业都已经从观望者转变为采用者。作为最早期采用容器技术的一批先锋者,京东从 2015 年的 9 千多实例扩大到如今容器作为业务上线默认选项,支撑全部业务运行以及中间件、数据库等。此外,在经历了从 OpenStack 到 Kubernetes 的迁移转变之后,京东容器引擎平台已经了从 1.0 迭代到 2.0 版本,并且于今年陆续开源数个项目。

罗马不是一天建成的。积累如此久并且支撑过 618 大促的京东容器技术是怎样的?有哪些革新又有哪些值得业界学习呢?已经开源的项目是怎样的呢?

ArchSummit 全球架构师峰会深圳站将于 2017 年 7 月 7 日~8 日在深圳·华侨城洲际酒店召开,大会设置了相关专题来深入解读电商大促背后的技术故事,大会还邀请了 eBay、WalmartLabs 等国外顶尖技术专家,分享 AI 促销、搜索引擎、异地多活、库存物流等核心架构实践。 ## 容器技术整体概况

今年随着京东业务的飞速发展,京东容器数量上也对应迅速增加。不仅在去年完成京东业务全面运行在 JDOS 容器之上,并且在数据库,中间件等系统也全面容器化。同时,在这一年,京东上线了 JDOS 2.0 系统,开始了从 OpenStack 向 Kubernetes 的迁移。截止到 6 月 7 日,已经有 60% 的业务运行在了 JDOS 2.0 平台中。

此外不得不提及发生的主要变化:业务系统全面基于容器镜像全量上线发布;全面使用集群编排;在生产环境尝试和运行抢占式调度,并自研单层单体全局调度器 SchedulerX;让业务系统与硬件解耦与资源完全解耦,海量资源,从容大促。

自研单层单体全局调度器

正如上文所述,京东在生产环境尝试和运行抢占式调度,并自研单层单体全局调度器 SchedulerX。

SchedulerX 属于 JDOS 弹性计算项目,主要目的是从更高的层面来加强计算资源调度,以提供服务更强的弹性计算能力,提升数据中心资源利用率。

(点击放大图像)

JDOS2.0 主要通过以下三个维度对业务进行优先级分类归集,并实施抢占式调度。

1)从业务负载层面来对业务分类,根据业务是长时间运行的任务 (long time running) 还是离线计算任务 (offline),采用不同的资源占用优先级和调度模式

2)从业务高峰时间段会对各个业务进行归类,例如区分是否白天高峰期还是夜间高峰期,将任务进行混合调度,实现资源的错峰利用。

3)从资源区域层面对业务分类,例如 GPU 资源、CPU 资源、SSD 资源等。根据业务对于资源的实际需求进行调度。

在保证各个业务 80% 的资源的情况下,20% 的资源在不同时间段可以互相抢占借用。(此比例可以根据实际运营进行调配。例如 618、双 11 大促时,则不允许业务相互抢占,保证资源足够)

在当前没有空闲资源的情况下,JDOS 会根据每个机器上运行的业务的分类对机器打分,如果该机器的分数较低,那么抢占就会发生,低优先级的业务首先会被驱逐 (Eviction) 抢占。

被抢占的作业重新回到 PENDING 队列里等待重新调度。

SchedulerX 确保关键业务不会由于资源不足而停止运行,也会重新调度其他业务使其获得更好的安置。

重大决策:OpenStack No, Kubernetes Yes!

应用容器化遇到的瓶颈

JDOS 1.0 解决了应用容器化的问题,但是依然存在很多不足。

首先是编译打包、自动部署等工具脱胎于物理机时代,与容器的开箱即用理念格格不入。容器启动之后仍然需要配套工具系统为其分发配置、部署应用等等。应用启动的速度受到了制约。

其次线上线下环境仍然存在不一致的情况,应用运行的操作环境,依赖的软件栈在线下自测时仍然需要进行单独搭建。线上线下环境不一致也造成了一些线上问题难于在线下复现。更无法达到镜像的“一次构建,随处运行”的理想状态。

再次,JDOS 1.0 时代的容器体量太重,应用需要依赖工具系统进行部署,导致业务的迁移仍然需要工具系统人工运维去实现,难以在通用的平台层实现灵活的扩容缩容与高可用。

另外,容器的调度方式较为单一,只能简单根据物理机剩余资源是否满足要求来进行筛选调度。在提升应用的性能和平台的使用率方面存在天花板。

OpenStack PK Kubernetes

Kubernetes 方案与 OpenStack 方案相比,架构更为简洁。OpenStack 整体运营成本较高,因为牵涉多个项目,每个项目各自有多个不同的组件,组件之间通过 RPC(一般使用 MQ) 进行通讯。为提高可用性和性能,还需要考虑各个组件的扩展和备份等。这些都加剧了整体方案的复杂性。问题的排查和定位难度也相应提升,对于运维人员的要求也相应提高。

与之相比,Kubernetes 的组件较少,功能清晰。其核心理念 (对于资源,任务的理解),灵活的设计 (标签) 和声明式的 API 是对 Google 多年来 borg 系统的最好总结。而其提供的丰富的功能,使得京东可以投入更多精力在平台的整个生态上,比如网络性能的提升、容器的精准调度上,而不是容器管理平台本身。尤其是,副本控制的功能受到了业务线上应用运维工程师的追捧,应用的扩容缩容和高可用实现了秒级完成。

改造之路

有了 1.0 的大规模稳定运营作为基础,业务对于使用容器已经给予了相当的信任和支持。但是平台化的容器和基础设施化的容器对于应用的要求也不尽相同。比如,平台化的应用容器 IP 并不是固定的,因为当一个容器失效,平台会自动启动另一个容器来替代。新的容器 IP 可能与原 IP 不同。这就要求服务发现不能再以容器 IP 作为主要标识,而是需要采用域名,负载均衡或者服务自注册等方式。因此,在 JDOS 2.0 推广过程中,京东也推动了业务的微服务化,服务框架的升级改造等。

在近两年随着大数据、人工智能等研发规模的扩大,消耗的计算资源也随之增大。因此,京东将大数据、深度学习等离线计算服务也迁移进入 JDOS 2.0。目前是主要采用单独划分区域的方式,各自的服务仍然使用相对独立的计算资源,但是已经纳入 JDOS 2.0 平台进行统一管理。未来,京东将在此基础上,通过调度将离线计算服务在集群资源充足 (如夜晚) 时给予计算资源扩充,提高计算的效率。

研发成果,两大开源项目

1 分布式高性能 DNS 项目

JDOS 是如何支持业务的弹性伸缩的?

对于业务的扩展,直接通过调整副本数,横向扩充容器的实例个数。业务如果是 L4/L7 类型的, 使用一个负载均衡来进行流量的分导。 负载均衡项目 ContainerLB 是京东自研的一套基于 DPDK 实现的高性能 L4 负载均衡服务,主要负责 JDOS2.0 的 service 中 LoadBalancer 的实现。

与 ContainerLB 项目非常密切的还有分布式高性能 DNS 项目 ContainerDNS。( https://github.com/ipdcode/skydns) 为容器提供了内部的 DNS 解析服务。业务如果是微服务类型京东叫 JSF,即需要在 JSF 上进行服务注册与发现的类型,京东则是在容器扩充后,通过服务中间层监听到容器已经启动成功,则对应 Notify JSF。

ContainerDNS,作为京东商城软件定义数据中心的关键基础服务之一,具有以下特点:

  • 高可用
  • 支持自动发现服务域名
  • 支持后端 IP+Port,以及 URL 探活
  • 易于维护和横向动态扩展

(点击放大图像)

ContainerDNS 包括四大组件 DNS server、service to DNS 、user API 、IP status check。这四个组件通过 etcd 数据库集群结合在一起,彼此独立,降低了耦合性,每个模块可以单独部署。DNS server 用于提供 DNS 查询服务的主体,目前支持了大部分常用的查询类型(A、AAAA、SRV、NS、TXT、MX、CNAME 等)。service to DNS 组件是 k8s 集群与 DNS server 的中间环节,会实时监控 k8s 集群的服务的创建,将服务转化为域名信息,存入 etcd 数据库中。

user API 组件提供 restful api,用户可以创建自己的域名信息,数据同样保持到 etcd 数据库中。IP status check 模块用于对系统中域名所对应的 ip 做探活处理,数据状态也会存入到 etcd 数据库中。如果某一个域名对应的某一个 ip 地址不能对外提供服务,DNS server 会在查询这个域名的时候,将这个不能提供服务的 ip 地址自动过滤掉。(关于 ContainerDNS 的更多内容详见本系列的另外一篇文章《京东商城分布式智能容器 DNS 实践》)。

2 分布式共享存储 ContainerFS 项目

JDOS 是如何支持有状态服务和无状态服务的?

无状态业务的支持相对容易一些,可以直接通过调度自动调整副本数来实现服务的弹性伸

缩。对于有状态的业务,原生的 Kubernetes 有 StatefulSet 进行支持,但是 StatefulSet 需要容器一个个启动, 另外社区在这个方面开发进度缓慢。 因此京东选择了自己定制 Kubernetes 进行支持,主要是为本集 (RC/RS/deployment) 提供了 IP 保持不变和存储自动迁移的功能来进行支持。

通过对于每个副本集维护一个小的 IP 池。当副本数调整时,也对应增加或者减少 IP 池中的 IP 的数量。副本集中的容器创建时,则使用这个 IP 池中的 IP 进行创建;容器删除时,则将 IP 返回到副本集的 IP 池中。

存储也是类似, 对于一个副本集有一个对应的持久化存储 (persistent volume) 的集合。当副本集中的容器创建时,则使用这个 PV 集合中的一个 PV 进行绑定核存储挂载。容器删除时,则对应进行卸载和解除绑定。

针对于容器的存储, 京东没有选用社区已有的 glusterfs 等方案。而是自研一套分布式共享存储 ContainerFS 的项目来专门提供容器的存储。

Container File System (简称 ContainerFS)是为 JDOS2.0 系统针对性开发的一个分布式文件系统,同时适用于原生 Kubernetes 集群以及其他应用场景。

ContainerFS 的核心概念是:

复制代码
a volume = a metadata table + multiple block groups

ContainerFS 的架构图如下:

(点击放大图像)

ContainerFS 的产品特性:

  • 无缝集成:支持标准的文件访问协议,支持 fuse 挂载,业务应用无需任何修改即可无缝使用
  • 共享访问:共享访问帮助多个业务应用获得相同的数据来源
  • 弹性伸缩 :可满足业务增长对文件存储的容量诉求
  • 线性扩展的性能:线性扩展的存储性能,非常适合数据吞吐型的应用

ContainerFS 典型应用:

做为 JDOS2.0 的数据存储引擎,ContainerFS 提供了独享、共享等类型的 volume,并通过 PV 机制挂载给 POD 或者容器使用。

(点击放大图像)

使用效果:

(点击放大图像)

目前ContainerDNS, ContainerFS 已经开源,ContainerLB 会近期在GitHub 上开源。

写在最后

为什么要将京东底层技术开源呢?主要两个方面原因:

在底层技术方面,开源是大势所趋。 Google 的 borg 系统在过去十余年间一直处于保密状态,但是现在不但公开了,而且利用起核心思想,孵化出了 Kubernetes 项目。而 Kubernetes 项目一经发布,也立即受到了热捧。同时,社区的完善也为 Kubernetes 和 Google 的 borg 提供了更为有益的建议和帮助。当然,不仅仅是 Google,CoreOS、OpenStack、Docker 等等公司和项目的开源大热也说明了这一趋势。

在容器平台实践路上,京东是走的比较早也是比较坚定的。在实践过程中有很多理解和技术视野。比如我们认为容器技术本质是 linux kernel 技术,容器技术需要数据中心底层基础软件全力配合,如分布式域名解析,高性能负载均衡,分布式共享存储,精确授时等等。

因此京东在这方面不希望闭门造车,而是能够更多的同业界来分享我们的经验。一方面,为许多底层技术还在摸索中的业内同仁提供一点借鉴和帮助,另一方面,也是希望获取业界的指导,提升京东的基础平台系统和技术思路。

作者简介

鲍永成,京东商城 基础平台部技术总监。2013 年加入京东,负责京东容器集群平台(JDOS)研发,带领团队完成京东容器大规模落地战略项目,有效承载京东全部业务系统和 80% 数据库,特别在大促期间 scale up 秒级弹性应对高峰流量。目前聚焦在京东容器集群 JDOS 2.0 以及京东敏捷智能数据中心研发。服务过土豆网(TUDOU.COM),思科(CRDC)等,在分布式、虚拟化、容器、数据中心建设有丰富的实践经验。

2017 年 6 月 17 日 17:06 3047

评论

发布
暂无评论
  • 微服务容器化运维:微博容器运维平台 DCP

    一个真实的容器运维平台是如何建设的?在建设过程中面临了哪些问题?容器运维平台的架构是什么样的?

    2018 年 10 月 25 日

  • 想了解阿里巴巴的云化架构 看这篇就够了

    阿里巴巴9年双11经历下来,交易额增长了280倍、交易峰值增长800多倍、系统数呈现爆发式增长。系统数据突飞猛进,用户还能一次次如丝般顺滑的秒杀毫无违和,这背后,是阿里技术团队经历数年时间的系统打磨,技术架构优化而呈现出来的结果。今年,天猫双11以1682亿的成交额再破记录,令人惊奇的是,其双11大促IT成本的增长相较于去年足足减少的一半,而这一切,都源于阿里巴巴云化架构的战略。

  • 京东从 OpenStack 切换到 Kubernetes 的经验之谈

    2016年底,京东新一代容器引擎平台JDOS2.0上线,京东从OpenStack切换到Kubernetes。到目前为止,JDOS2.0集群2w+Pod稳定运行,业务按IDC分布分批迁移到新平台,目前已迁移20%,计划Q2全部切换到Kubernetes上,业务研发人员逐渐适应从基于自动部署上线切换到以镜像为中心的上线方式。JDOS2.0统一提供京东业务,大数据实时离线,机器学习(GPU)计算集群。从OpenStack切换到Kubernetes,这中间又有哪些经验值得借鉴呢?

  • 分布式体系结构之集中式结构:一人在上,万人在下

    我以Borg、Kubernetes、Mesos这三款知名的集群管理系统为例,与你分享了集中式架构的原理。

    2019 年 10 月 11 日

  • 美团集群调度系统 HULK 技术演进

    本次分享介绍美团的集群调度系统。

  • 时速云 CEO:相对于 IaaS 和 PaaS,未来 CaaS 将如何定位?

    容器在国内的火热程度毫不亚于国外,这从基于容器的创业公司的数量上就能看出来。而大部分容器相关的创业公司都瞄准了同一个方向:CaaS(容器即服务)。时速云就是这样的一家公司,他们基于Docker、Kubernetes、Mesos等开源技术实现了大规模容器集群的调度、部署和管理。目前他们的容器云平台上已经运行了上万个容器,并且非常稳定。为了了解时速云的创业背景以及他们的容器云平台的架构等细节,InfoQ记者采访了时速云CEO黄启功。另外,时速云CTO王磊也将在8月28日举行的CNUTCon全球容器技术大会上分享题为《时速云基于Kubernetes打造容器云平台的实践》的演讲,敬请关注。

  • 京东如何打造 K8s 全球最大集群支撑万亿电商交易

    本文来自RancherLabs微信公众号

  • Mesos container 在 360 广告系统的应用(下)

    接下来说一下mesos master的故障恢复机制。master之上,时间就10秒钟左右。master会不会造成大量的链接导致master服务不可用,官方有这样的设置可以设定链接的比例来进行控制。

  • 微服务容器化运维:容器调度和服务编排

    今天我们要考虑的是,如何在集群中创建容器,也就是容器如何调度的问题;以及容器创建后如何运作才能对外提供服务,也就是服务如何编排的问题。

    2018 年 10 月 23 日

  • 不再掉队,研发流程、工程方法趋势解读和展望

    今天,我从协作方式、云计算平台、应用开发和AI这4个方面,与你分析了如何在软件开发工作中运用这些趋势,去提高研发效能。

    2019 年 10 月 4 日

  • 腾讯云首次披露自研业务上云历程(下)

    传统行业转型的过程中,腾讯向来扮演的是数字化助手的角色,腾讯云作为帮助企业数字化转型的入口,也已经成为腾讯的“独角兽”业务。

  • 贝壳找房的 Node 服务稳定性建设实践

    2019 年 7 月 24 日

  • 云原生生态周报 Vol. 30:Rancher 新版本默认支持 Kubernetes 1.16

    《云原生生态周报》由阿里云容器平台联合蚂蚁金服共同发布,众多一线社区专家与您一起“跟踪动态,读懂社区”,分享云原生社区项目进展、活动发布、精选博客等信息。

  • 京东 11.11:大考之前的三板斧

    尼尔森公司10月底发布了《中国电子商务行业发展“杭州指数”白皮书》,数据显示,2014年底,中国网络零售额交易规模已达133,699亿元,居全球第一。2014~2015年,移动在线购物者占比从57%升至71%;跨境电商从32%提升至63%。在国内电商企业一轮又一轮的市场动作下,“双11”俨然成为全国人民的狂欢节。在今年的“双11”竞技场上,InfoQ选了国内较有代表性的电商企业,一探支撑万亿规模交易系统背后的技术。本文将介绍京东登上“双11”舞台所做的“台下十年功”。

  • 中国移动一级业务支撑系统网状网 PaaS 之路

    移动业务支撑中心和网状网项目技术团队经过大量的研讨,创新的提出了APU(Application Process Unit)的概念,解决未来的系统的发展和管理瓶颈。并且通过深入的技术研究和实践探索,提出采用Kunbernet+Docker技术方案来构建网状网的PaaS平台,真正实现APU的理念的落地。截止2015年底,已经完成了电子渠道各种业务、流量统付、10085等核心业务的支撑,业务高峰达到10万笔/分钟,系统的弹性扩展能力和稳定性得到了充分的体现。

  • 中国技术力量:京东技术十年磨一剑

    11月16日,QCon全球软件开发大会将在美国旧金山隆重开幕,17日这天,由极客邦科技及InfoQ中国组织策划的中国技术开放日(ChinaTech Day)也将亮相大会,来自阿里巴巴、京东、腾讯、百度等国内一线互联网公司的技术专家,将作为中国技术力量的代表,向国外的参会者分享中国互联网的顶尖技术。京东商城技术副总裁兼首席科学家何刚博士作为国内著名的技术专家,将分享京东怎样通过云计算和大数据服务的方式,助力传统行业转型。京东从基础云、电商云和数据云三个方面,解决包括制造业、农业、金融、物流及农业等多个行业存在的一些问题。

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

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

  • Kubernetes 在宜信落地实践

    伴随着微服务的架构的普及,结合开源的Dubbo和Spring Cloud等微服务框架,宜信内部很多业务线逐渐了从原来的单体架构逐渐转移到微服务架构。

  • 微服务 API 网关搭建三步曲(一)

    今天这节课,我们介绍了微服务 API 网关的作用、功能、核心组件和抽象概念,它们都是 API 网关的基础。

    2019 年 9 月 11 日

  • 打造基于开源系统的公有云——文思海辉的 OpenStack 实践

    鹏博士电信传媒集团是上海A股上市公司,通过收购北京电信通长城宽带等子公司,目前,互联网接入及增值服务业务已占到鹏博士业务总额的95%以上。2012年底,鹏博士通过收购的北京息壤传媒文化有限公司开始对外提供公有云服务, 而支持这套公有云服务的软件是文思海辉的HSCloud,一套基于OpenStack的云计算管理系统。到2013年11月,该公有云平台上的实例数已经超过了一万个。 为了对这个OpenStack用户案例进行更深入的了解,InfoQ中文站编辑于近日跟文思海辉的云计算团队进行了沟通,包括文思海辉高级副总裁吴凯和多名主要的系统架构师。

发现更多内容

架构师训练营 - 学习总结 第 8 周

铁血杰克

总结

chenzt

AI大有可为:NAIE平台助力垃圾分类

华为云开发者社区

AI 模型训练 垃圾回收机制 数据集 华为云

扎克伯格:从程序员到福布斯全球首富,他经历了什么?

北柯

单向链表合并节点

chenzt

第八周·总结·数据结构预算法

刘璐

面试官问:如何设计一个安全的对外接口?

Java小咖秀

Java 面试 经验

【API进阶之路】高考要考口语?我用多模态评测API做了一场10w+刷屏活动

华为云开发者社区

人工智能 英语学习 评测 API 华为云

作业一

Kiroro

敏捷开发:影响地图工作坊的反思

华为云开发者社区

敏捷开发 业务线 需求管理 需求 华为云

云图说 | 快速创建一个kubernetes集群

华为云开发者社区

Kubernetes 虚拟机 集群容错 华为云 容器化

作业二

Kiroro

作业

不在调上

架构训练营第八周感悟

张锐

域名凭什么能卖出亿元高价?

北柯

创业 互联网 域名解析

week8

不在调上

第八周·命题作业

刘璐

区块链+国防安全,科技是核心战斗力

CECBC区块链专委会

CompletableFuture运行流程源码详解

编号94530

Java 并发编程 多线程 CompletableFuture

英特尔®边缘软件中心重磅发布 一站式资源供给为应用开发创新赋能

飞天鱼2017

第八周作业

方堃

抢占5G大市场 众盟科技助力企业跑赢短视频营销新赛道

人称T客

Spring系列:请问各位大佬为何要学spring?

简爱W

华青融天战略拓展总监王旭详解IT运维的九阳神功

DT极客

架构师训练营第八周作业

sunnywhy

极客大学架构师训练营

如何在微服务团队中高效使用 Git 管理代码?

看山

git 微服务 高效

架构师第8周练习

小蚂蚁

最新硬件虚拟化检测技术,让攻击者逃不出“楚门的世界”

百度安全

云计算 安全 虚拟化

产品、方案、生态三力齐发 英特尔驱动智能边缘价值迸发

飞天鱼2017

实现DevOps的三步工作法

看山

DevOps 凤凰项目

37岁程序员被裁,想用6月工资跪舔领导划掉被裁名额,结果蒙了!

程序员生活志

程序员 职场 程序员生活

京东618:容器技法日趋娴熟,数个项目即将开源回馈社区-InfoQ