京东商城总架构师、基础平台负责人刘海锋:京东双11创新技术实践

时间:2020-12-20 21:08:59

【CSDN现场报道】2016 年 11 月 18 日- 20 日,由 CSDN 重磅打造的年终技术盛会 —— “2016 中国软件开发者大会”(Software Developer Conference China 2016,简称 SDCC 2016)在北京京都信苑饭店隆重举行。本届大会云集了100多位国内外顶尖专家和技术大牛,共设新趋势和新实践2大主题会场,14个技术专题。面向国内外的中高端技术人员,聚焦最前沿技术及一线的实践经验,助力企业的技术升级和改造、全面提升技术人员的综合实力。

在11月18日上午的 Keynote 上,京东商城总架构师、基础平台负责人刘海锋发表《京东双11创新技术实践》主题演讲。每年的双11已成为技术人技术的保卫战,从资源规划至夯实基础架构、增强智能,以及确保系统稳定最重要的点是故障模拟演练和全链路压测。资源规划是双十一促备战的必要条件,可将资源分为平稳型系统和毛刺型系统,对于平稳型系统抽取70%分而治之,高效分配;剩余的30%毛刺型系统的核心流程需充分扩容。京东提升多数据中心架构稳定运行,实施基于Docker全面容器化预先扩容确保交付更快速,自研中间件技术和以内存JIMDB为中心存储体系,使用高性能微服务框架JSF接入实例,同时JMQ消息平台同步复制和同步刷盘确保数据不丢失来夯实基础。应用AI至商城各个业务环节,如订单取消及“”冷静期“”、订单预测。有破坏性地模拟线上故障,提升全员应变能力。最后对于每个环节及地区实施黄金链路压测测试。

京东商城总架构师、基础平台负责人刘海锋:京东双11创新技术实践

京东商城总架构师、基础平台负责人 刘海锋

下面为演讲整理:

各位朋友大家早上好,非常高兴今天能够来到这里跟大家分享以京东为例的双十一经验,和本人的一些心得。每年的双十一在中国已成为特别有特色的一种社会行为,很多的网民会通过网上购物,买东西,可能在很多的人的心目中会理解会觉得双十一是技术人特别好的一个舞台。其实对于技术团队,双十一是一个压力比较大的任务也很艰巨的技术的保卫战。双十一对于任何一家电商和企业是特别重要的,在此我分为五个方面来交流。

第一做做资源规划,大家知道双十一的大促特别高的流量过来,一定要做充分的资源要做非常好,因为我们有无限的机器,这个不成问题,但是现实的情况我们没有那么多的机器,我们的资源比较有限,所以资源规划是第一步。做了资源规划技术线条上分四个方面给大家做一下分享,第一个就是要夯实基础架构,基础架构特别重要,因为一出问题就会影响所有的业务。然后给大家介绍第三个方面增强智能,这个可能会契合今年的热点,现在人工智能深度学习非常火热,大家可能会觉得非常虚,但是我会举一些实际的例子用一些技术,这些技术并不复杂,能够在大数据能够发挥作用。其实最后两方面是最最关键的,然后也是最最重要的,就是什么呢?第一是要做大规模的鼓掌的模拟的演练,双十一最主要考验我们能力,出故障的可以快速响应和解决的能力,所有的事情有备而来,最后的反对做子全链路的压测,这是大的流量,突发的流量比刚才瞬间十几倍的流量你能够扛得住,所以个帐的眼帘四和充分的压测是确保成功和稳定的关键两点。

资源规划


资源规划即如何分机器及资源,这是一个特别有挑战力的问题。本质上,双十一的准备就是对外而言,流量不好预估,谁都有可能出问题,那么每个人扩容十倍是最安全的,但是如果所有的人,所有的系统扩容十倍,机器却供应不上,因此资源的规划特别关键。

在此我分享一下今年双十一的一些心得或是方法论。首先第一点,要在心理上给很多团队做一下按摩,资源只是必要的条件,不是充分的条件。从技术上,也要做一些充分的研究,如可以看一些数据,双十一流量最高的那一刻实际上是11月11号的凌晨12点前大概10秒左右,因为很多人买东西放在购物车,等待下单。如果按照纯粹的数目比值,峰值那一刻可能是前一秒的十几倍或者是二十几倍。我们的系统链路比较长,进来后大规模的压力经过系统层层的缓冲,层层处理,各方面的调用会把压力平滑掉,而且机房内部的网络流量的变化是最能够反映整体的负荷。告诉我们实际上要区分对待,有些系统要做充分的资源的准备,要疯狂扩容,要确保万无一失,但是在整体而言,很小越靠后的系统其实并不需要那么多的资源,整个资源就是一个漏洞状,越靠前的要多扩一下,扩10倍都没问题,越往后要逐渐要比较集约加资源,因为你的资源是非常有限,所以这个数据也能够支撑对这样的方法论。

资源规划时可以分成两类系统:平稳型系统和毛刺型系统。实际90%的都是平稳型系统,如商品详情、实时价格等等;另外一个是毛刺型系统,这一类的系统做充分的贮准备,瞬间可能是极高的流量,如在下单,订单结算、支付、收银台以及抢购的逻辑里面,其最基本的原则是核心流程一定要充分地扩容。对于平稳型系统基本上是拿出70%的资源,高高效的分配下去,把平稳型的系统做适当的安排,30%的资源专门针对核心的流程,毛刺型的系统去做充分的扩容。

夯实基础


基础架构的重要性不言而喻,它会影响所有的业务。今天给大家分享三大核心内容。

基于Docker全面容器化

经过2015、2016年两年的发展,我们所有的系统90%都已容器化,第一代是比较简单好用,更多的是实现软件定义数据中心。其实我们在双十一包括现在正在立项做第二代,不光实现软件定义的数据中心,去吸引资源的调度,从开发完成到上线更加迅速和便捷实施Docker,对于电商的大促个人觉得最大的好处是加快了资源交互的速度,同时让资源整体的协调能够更加细。

当前的Docker有非常灵活的横向扩容的能力,比如流量来的时候,事先根本不用扩容,峰值流量按需使用,需要多少就扩多少,其实这个是不现实的。因为流量来了会非常猛,所以要预先扩容,预先把资源规划好。技术方面并非最新、最酷最好而是最稳妥是更合适的。当然,有Docker之后有一些应急的情况如它垂直的Scale up会有一些作用,但这不具普世的效果。

京东商城总架构师、基础平台负责人刘海锋:京东双11创新技术实践

内存是新的磁盘-JIMDB

我们以内存为中心做存储,存储我们形成三级的架构,主要是Java,会在本地做然后会自主研发一个系统,从2014年至今我们做了JIMDB,会形成全量的内存的存储,在后面再是买其他的存储。在可用性的保障,我们做的很多的工作,基本能做到数据几乎不会丢失横向的扩容自动伸缩,非常多样的。

消息平台JMQ-应用异步化

基本上我们几乎所有的核心的应用就是java写的应用都要这个消息平台,尤其是对京东来讲,用JMQ连接很多的系统,不管是做异步、库房还是整个生产行为都是通过MQ发送,最核心的就是同步复制,同步刷盘在两台不同的机器不同磁盘保证数据不能丢失。而且MQ做应用的异步还能够达到把流量的压力适当地做平缓这种效果。

增强智能


应用AI技术到商城的各个业务环节,如客服机器人,还能够在大促期间起到作用。如订单冷静,因为我们平常都会有冲动的消费,然后购买一个商品,冲动之后往往就是就会后悔,通过人工智能预测,设置冷静管道,适当冷静一下,引入“冷静期”,可以订单取消,降低库房生产能力浪费的成本。

第二个案例是今年双十一的第一笔单从用户下单到用户签收商品共花费了12分30秒,为什么能做到?如果正常的流程,从某一个库房分捡出来到配送站,然后再送上红色的运货车,再到小区,再有快递小哥到家门,这是不可能的。这个不是订单冷静,是订单预测,可以用一些历史的数据预测这个商圈,通过智能的预测就可以前置,然后库房分级了,FDC和RDC内配,有的可以层层前置,这样的话能够大幅提升配送的时效,通过增强智能,提升用户交付的体验。

故障模拟演练


一线的技术团队只有通过非常严密的故障演练,非常大压力的预测才能确保系统万无一失,才能比较提前的发现问题。今年采取一个方式,国外有公司提出称之为Chaos Monkey,就是捣乱的猴子,其实是指比较破坏性,更接近真实的模拟,不同级别的来做线上故障的模拟。通过这样的一个捣乱的猴子的大规模的故障演练,我们对机器力度,网络力度,一些重要的服务,对中间件和数据库这些底层的系统甚至机房做了演练,有了系统,有了下单的系统承诺MQ演练一下,看看是不是真的可以。但是这有一定破坏性的,用的时候一定要谨慎。

全链路压测


军演压测机器人

我们在今年采用军演压测机器人,尽量模拟用户的行为,发起很大的流量,在公网发起流量,一般是凌晨后半夜做压测,即做全链路的读写的缓和的压测,假设我能雇佣到一亿个人,同时来访问京东或者是天猫或者是其他网站,肯定能够把系统的很多的问题暴露出来。但是你不可能雇佣到一亿人,也找不到这1亿个人,怎么办? 这需要写一些机器人,部署在全国网点,部署在下半夜的空闲的流量,发起压力,但这个需要花费一年左右的时间模拟一部分的用户的行为,意味着整个系统要能力支持数据,要能够支持测试的流量。也就是说,对于支付系统来是,我们有虚拟的银行,它不真的扣钱,对于库房我们有假的库房,当然对于交易我们有虚拟的SKU虚拟的库库存,需要的订单,这些才能压测虚拟的流量。基本上通过这样的一个系统,目的就是尽量接近消费者在零点的大流量的整个的情况。系统经过一个比较长的一个考验,能力把整个链路串起来。通过这样的一个演练我们会发现很多的问题,会整体把性能进行优化。当然也会通过评比找出各个系统中的TP99最低的,就是性能最好的。

黄金链路压测

第二个重点是黄金链路压测,黄金链路就核心的流程,即我们会在一些关键的地方,比如说就是消费的大省如北京、上海、广州一带充分部署agent,模拟用户的行为,做先搜索然后浏览,加入购物车,结算,再支付,整个的黄金链路是双十一压力最大,是也是最关键,也是最影响用户体验的一个环节。

总结起来就是整个双十一对研发团队来说是一个比较艰巨的技术的保卫战,我们必须做资源的规划,夯实基础架构。在一些关键的环节可以用机器人,人工智能提高效率或降低成本,但是最辛苦的最关键的还是要做非常充分的实施大规模的故障的演练,然后要做很认真的压测,无论是单一系统单一链路,还是全链路黄金链路也要做。双十一的整个的流量比较大,而且很难预期,所以各个企业还有很多的东西需要去不断地去习,不断地提高和成长。