今年的 618 前夕,何小锋显然没有以前那么紧张,人更放松,说话也更淡定。一方面,作为京东科技京东云云原生平台负责人,他已经参加过 19 次大促备战,积累了丰富的经验;另一方面,从 2014 年使用 Docker 到 2018 年建成全球最大规模 Kubernetes (以下简称 K8s)集群再到全面拥抱云原生,京东在容器和云原生领域有着多年的技术实践与经验积累。这些无疑给了他十足的信心!
根据最新消息,6 月 18 日凌晨,京东云发布 618 当天首份战报,在从容应对高并发数亿级流量洪峰的同时创下多项纪录。数据显示,京东云以超高弹性应对海量并发需求,其中,每秒用户访问峰值较去年同期提升 152%。在此次京东 618 期间,京东云混合云操作系统——云舰(JDOS)在线管理 POD 数量超过 200 万,运行容器峰值核数超过 1000 万个,保证了有限计算资源在不同任务间的无缝切换,护航用户流畅的购物体验。
何小锋是软件行业的老兵。从 1998 年毕业至今,他从事软件研发工作已有 22 年。回顾京东云云原生多年历程,他最大的感触是“每年都在快速迭代,当时感受不深,但近十年的快速积累,我们已经走在行业前面”。
京东科技京东云云原生平台负责人何小锋
2011 年,他加入京东,在公司的基础架构团队负责 PaaS 平台建设。那时,京东的业务正处于高速发展期,但是却面临严峻的技术挑战:京东当时有很多单体应用(单体应用系统性能差,吞吐量小,且扩展性差),无法支撑高速发展的业务。
为解决问题,技术团队开始进行架构调整,采用分布式架构,把原来的单体应用拆成微服务。相比单体架构,分布式架构不仅可以增大系统容量,提升系统性能,而且能消除单点故障,提高整个系统架构的可用性。简言之,分布式架构可以很好地应对京东越来越大的业务量。
改造初期,京东采用开源技术,何小锋表示,“先用现有的开源项目试试能不能有效支撑系统。采用(开源项目)后,我们发现(系统性能)确实有所提升”。
但好景不长,新问题又来了。随着业务的进一步发展,更大的流量进来,现有系统又遭遇挑战,“从技术角度,你很难进行改造。即使要改造,所需的工作量跟重写差不多”。为此,他们走上自研之路,开始自主研发微服务框架、高性能消息中间件等。不过,自研挑战不小,因为业界相关的开源项目很少,缺乏参考。
事实证明,自研虽然很难,但却是一件正确的事情。在使用自研产品后,系统吞吐量得到明显提升,“可以扛住更大的流量,新系统具备水平弹性扩容,一旦业务的量上来,我们就增加机器资源,让前端自动知晓后端服务,极大提升吞吐量,很好的支持起业务”。
Docker 技术的早期采用者
2014 年注定是一个神奇的年份。这一年,先是 Docker 发布 1.0 版本,然后谷歌宣告 K8s 项目的诞生。此后,容器和云原生领域,K8s “一统江湖”,成为容器编排领域的事实标准。
这一年对京东来说很重要,因为它开始走上容器和云原生之路。
据何小锋介绍,京东在 2014 年前主要用物理机,使用虚拟化技术,但是问题在于其性能无法满足业务需求。以应用上线为例,“如果要上线应用,需要先申请几台物理机。一旦申请成功,就能上线应用,使用这几台物理机资源,但是实际上,这几台物理机空闲资源很多”。
如何进一步提高资源利用率,这是摆在何小锋他们面前的重要问题。
为解决这个问题,他们希望使用一些新技术提高资源利用率。在经过技术评估后,“我们发现 Docker 与 Linux 进程的技术差不多(容器其实是一种特殊的进程)”。于是,他们开始使用 Docker 技术。“最初,我们不敢在下单、交易等核心业务上使用 Docker 技术,我们团队有一个图片系统,业务流量也较大,另一方面,技术团队对它很有把控”,所以图片业务成为京东使用 Docker 技术的试点。
作为 Docker 技术的早期采用者,何小锋表示,他们在 2014 年使用 Docker 技术时面临不小的挑战。
第一,最初使用 Docker 技术时,它缺乏一个很好的调度系统。鉴于京东在 OpenStack 上有丰富的经验,所以他们当时对 OpenStack 进行改造,让它直接调度 Docker。但是,OpenStack 有两个问题,一是 OpenStack 在调度过程中出现一些问题;二是 OpenStack 基于 KVM 虚拟化技术,整个平台的延伸能力比 K8s 差。相比之下,后起之秀 K8s“更轻量级,设计更合理,并且符合未来技术的发展方向”。
第二,Docker 刚出来时,他们也在逐步摸索,“镜像怎样做得更好,针对镜像分层,摸索怎样分层会更好,让镜像尺寸更小,更方便分发”。
第三,在调度上,他们考虑怎样可以更好地调度。“我们希望使用容器,提升资源利用率,(让系统)具备一些弹性、伸缩的能力,从而支持水平扩容和垂直扩容”。
此外,为了解决容器使用过程中伴随的运维问题,京东打造了一整套运维系统。在应用上,他们做了监控和报警,涵盖主机、容器、APM;其次,打造 CI/CD、DevOps 的综合能力,让研发人员既能做研发,又可以做运维,大大降低对运维人员的压力。
从 2015 年开始,京东的其他业务逐渐用上 Docker 技术。当年的 618,京东启用了基于 Docker 技术的容器技术来承载大促的关键业务,包括图片展现、单品页、团购页等。
2016 年,再进一步,京东所有业务接入容器,容器实例达到 10 万左右。
全球最大规模 K8s 集群
2 年后,即 2018 年,京东建成全球最大规模 K8s 集群,并基于 K8s 建成全球最复杂的分布式数据库——Vitess 集群,京东容器规模达到几十万级。