几秒内就可以达到平均值的16倍。这是因为大家都已经选好了想要的商品,只等零点之前刷新下单。但是,这样狂飙的访问量在系统内部却没有表现得如此恐怖。在系统内部,访问量可能只有平时的 1.5倍。我们把各个系统分为两类:平稳型系统和毛刺型系统。平稳型系统,包括商品的详情页、价格页面、库存信息等等;毛刺型系统,包括下单、秒杀页面、抢购页面等等。
做了细致的研究之后,对于资源的分配就有了依据。这样就可以在保证核心流程充分扩容的基础上,再来满足锦上添花的功能需求。“逼”内存做存储:夯实基础架构基础架构是京东商城的基础。而在巨大访问中一旦基础架构出现了问题,会影响无数附加其上的应用。为了保证这个庞大的基础架构,京东做了一些重点动作。多数据中心刘海锋说,一个机房的安全系数永远不够,一旦出问题将会造成不可估量的损失。
所以京东采用了多数据中心的策略。这种冗余策略存在于包括电商在内的很多服务中。是一种通用的手段,当然京东也不例外。全面容器化京东从2014年开始,对系统进行 Docker 容器化改造。通俗来说,“容器化”就是把系统的各项资源进行虚拟化,可以更加自由地分配给各个服务。这种改造有一个巨大的优势,那就是极大地加快了资源交付和速度,更小地细分了资源的粒度。
刘海锋说,2014年之前,大促时各个系统分资源还在分物理机,而现在大家可以直接分 CPU,系统在后台直接把 CPU 的计算能力分配给需要的部门。“逼”内存做磁盘在京东的构架中,内存可以被用作存储器,而不是缓存。刘海锋说,这就是所谓的 JIMDB(以内存为中心的存储)。众所周知,硬盘是在电子化的 IT 架构中,唯一一个还在使用机械结构的元件。
它的效率之低令人发指。所以在大促的时候,订单内容和实时护具不会回到后台存储,直接在内存中被调用。这样就大大提缩短了系统响应时间。为此,京东的内存容量储备达到了 260T。大促的时候,99%的访问请求最高延迟都小于 5 毫秒。消息平台 JMQ在京东的体系中,最重要的可能就是订单和运单数据。而这些数据需要在许多系统内部实时同步。
很多下游系统关心订单信息。按照传统的思路,所有下游系统都想要获得订单信息,必须通过订单系统,调用其他的接口才能实现。这样就会给订单系统带来极大的压力。针对这个矛盾,京东开发了消息平台 JMQ。JMQ 的工作原理很简单,大致相当于信息统筹的秘书。订单系统只需要把数据交给 JMQ,其他系统只需要调用 JMQ 就可以查看信息。
这在客观上大大缓解了订单系统的压力。预测取消订单:增强智能双十一,所有系统资源全部被调动起来。人工智能,这个正在井喷的高科技也可以在这个时候“帮工”。不过,刘海锋告诉,这并不是什么虚头巴脑的大概念,而是一些接地气的小功能。所以他更愿意把它叫做“增强智能”。增强智能在京东商城的体系内应用场景不少,例如:客服机器人、库存优化、信息合规校验、智能物流仓储等等。
刘海锋举了两个有趣的例子。【替用户冷静的“订单冷静管道”】订单冷静:冲动购物的后悔药如果我看到别人在大促的当天买了一部手机送给女朋友。我一冲动,一次购买了两台,冷静下来想想, 我还没有女朋友。这个时候,我可能会选择退货。刘海锋说。然而,京东的很多产品都是自营,在下单之后几分钟内就已经开始分拣打包。然而, 系统订单是在几小时内都支持取消的。
这时,如果用户选择了取消订单,那么打包工作就浪费了。这对于双十一期间资源相对宝贵的京东来说,就是一种资源浪费。这时,就到了人工智能显示威力的时候。如果系统探测到下单买两部 iPhone 的用户,经常买奢侈品送给(不同的)女朋友,那么没事。如果探测到这个用户以前购买的最贵的商品就是200块钱的食用油,并且通过大数据分析,这位用户可能没有女朋友。
那么就在后台自动把订单“冷静”10-20分钟。如果用户没有后悔取消订单,再继续大宝流程。这有助于减少浪费的成本。订单预测:从下单到送到只需 12 分钟在双十一当天,凌晨第一单从下单到出库到用户签收仅仅用了12分31秒。这个看起来有点假的成绩是怎么取得的呢?如果从下单开始,才从最大的仓库备货,12分钟也许都不够用来分拣。