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

摘要:
京东商城首席架构师、基础平台负责人刘海峰发表了“京东双11创新技术实践”主题演讲。从资源规划到巩固基础设施、增强智能和确保系统稳定性,最重要的是故障模拟演习和全链路压力测试。剩余30%毛刺型系统的核心工艺需要完全扩展。JD改进了多数据中心架构的稳定运行,并使用高性能微服务框架JSF访问实例。同时,JMQ消息平台同步复制和同步磁盘清理确保了数据不会丢失以巩固基础。京东商城首席架构师、基础平台负责人刘海峰组织了演讲。

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

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

夯实基础


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

基于Docker全面容器化

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

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

容器化

内存是新的磁盘-JIMDB

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

消息平台JMQ-应用异步化

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

增强智能


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

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

故障模拟演练


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

全链路压测


军演压测机器人

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

黄金链路压测

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

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

免责声明:文章转载自《京东商城总架构师、基础平台负责人刘海锋:京东双11创新技术实践》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇OpenCV学习笔记(13)——轮廓特征C# 使用 log4net 记录日志下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

Mac下卸载删除nvm和node

nvm是Mac下的node管理工具,有点类似管理Ruby的rvm,nvm是一个独立于node/npm的外部shell脚本。...

WebView2简单试用(二)—— 基本操作

页面跳转可以通过webview实现interface://www.cnblogs.com/tianfang/“);其他操作其他常见操作已经很好地封装在WebView2控件中。网页跳转事件WebView2常见的网页跳转事件包括:更多事件可以参考API文档:快捷键F12。快捷键Ctrl+Shift+I。右键菜单中的“检查”,这为调试提供了极大的便利。...

Practical Shader Development: Vertex and Fragment Shaders for Game Developers (Kyle Hallady 著)

这是我们描述形状的方法之一,它将使计算机变得有意义。要定义形状,我们需要存储关于三件事的信息:顶点、边和面。顶点是三维空间中的点。边是连接顶点的最内层。面是由三个或多个角度形成的二维形状。你不能把脸想象成只有在记忆中恢复的一个网格的垂直面之间的空间,而每一个共享的需要和脸都是由垂直面顺序简单定义的。因为很多名字都不会出现在网格的“背面”,所以正面的哪一面很重...

ERROR [IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序

使用C#生成应用程序以及读取和写入dbfs时,打开方法error[IM002][Microsoft][ODBC驱动程序管理器]中发生错误。找不到数据源名称,也未指定默认驱动程序。这个程序以前使用得很好。升级和修改后,在测试中发现了问题。为了追踪来源,我曾经是一个32位操作系统。现在我安装了一个win764位操作系统。从控制面板到管理工具再到ODBC驱动程序,...

【解决方法】ModuleNotFoundError: No module named 'flask._compat'

起源最近发下很多人在我的python课程下面提问,关于安装完扩展运行程序的时候出现如下的莫名其妙的错误Traceback(mostrecentcalllast):File"manage_web.py",line2,infromapplicationimportapp,managerFile"/data/www/private_deploy/python3_y...

echarts折线图 鼠标移入改变小点显示样式

=undefined){res+=nameList[i].seriesName+':'+nameList[i].data+'%'+''}}res=res.split;returnres[0]+''+res[1];}}echarts折线图的鼠标移动上去小点显示样式修改tooltip:{trigger:'axis',formatter:function{varr...