《京东大促备战思路2.0大揭秘》要点:
本文介绍了京东大促备战思路2.0大揭秘,希望对您有用。如果有疑问,可以联系我们。
文经授权转自公众号:开涛的博客(kaitao-1234567)
林世洪
毕业于北京交通大学,2011年加入京东,先后负责京东订单履约体系和零售平台架构工作,连续两届架构委员会成员,此期间主导和参与了京东研发若干规范的制定.
着力推动电商核心系统架构升级,总结形成了大型促销备战方法论,保障了电商主流程系统的稳定性,降低了整体系统建设成本.个人技术方面更多关注根据业务特点和技术要求对系统进行可运营化改造和治理.
前言
提到备战,实际上不一定要到大型促销时,工作应该做到平时.京东已发展到了一个比较大的体量,无论是大促还是平时,都容不得出现大问题,我们的思路和方法是:积极预防、及时发现、快速处理,这正是本文前半部分要介绍的.但要做到这十二个字并不容易,本文后半部分会介绍背后的两个要素:日渐成熟稳定的团队、日趋完善的流程和规范.
下图是对本文内容的描绘:
在预防措施上,需要遵循 PDCA 方法:
P阶段:
1. 分析系统职责,确立系统备战的首要业务目标;
2. 依据业务量评估,对系统处理能力要求进行评估,根据评估结果和系统运行状况,找出系统瓶颈.*特别地,如果是大促备战,则要先给大促时的业务量评估.
D阶段:
3. 针对系统瓶颈,进行系统改造;
4. 梳理系统间的依赖关系,各系统之间达成 SLA,以保证整体性能指标.
C阶段:
5. 对系统进行压力测试,验证处理能力,确保达标.特别地,如果是大促备战,则可以考虑在线上进行跨系统军演;
6. 特别地,如果是大促前夕,则要对系统进行全面体检.
A阶段:
7. 如果系统改造达不到评估要求,则需要修正方案.
每个系统都会有自己的边界,各系统负责人应该分析清楚系统的使命和职责是什么,分清主次,这同时也是制定应急预案的最重要依据,举例:
总体思路:先进行需求评估,然后进行系统评估,找出差距.
总体思路:
公司层面首先要给出一个业务量的初估,然后各个团队可以根据此值来把总的业务量评估分解到自己的系统的吞吐量指标上,接下来就是方案设计的问题了,目标就是将吞吐量指标提高到评估的水平,同时其它性能指标仍能满足业务要求.这样兼顾了性能和成本.
吞吐能力评估:
吞吐能力,指的是单位时间内处理请求的数量限制,一般用tps来衡量,指的是每秒处理请求的数量.
前面提到过要把总的业务量评估分解到自己的系统的吞吐量指标,可以把系统看成一个黑桶,看这个桶上边界输入的量和下面输出的量.
假设一个系统是客户订单处理系统,每一个订单向它输入2条处理请求,并向外界输出4条信息,如果一天的订单量是1000万,则这个系统要每天接收2000万个请求,输出4000万条信息.
对于直接面对客户的系统,输入的评估需要更多的维度(如促销、推广),但也有简单的评估办法,那把上一次大促作为参照,按业务量同比扩大.
当然,实际评估时,不能只看一天的业务量,还要看峰值,而且要高度重视峰值.前端系统的峰值评估需要考虑比较多的维度(如促销方式和力度等),后端相对简单,用于平均值乘以一个系数即可,这个系统可以根据系统以住大促时统计而来,如果是一个新系统,可以让上游系统协助评估.
并不是所有系统都要承担高峰值.如果一个业务处理流程比较长,则上游的系统可以平滑峰值,让下游系统享受一个平滑得多的请求流,这样可以大大减少系统的建设成本.
例如,在订单处理流程中,OFC 扮演了这一个稳压器的作用,OFC 把上游订单和峰值进行了平滑.所以吞吐能力的评估也需要团队合作.
吞吐量的提升,往往伴随着容量提升,需要做好容量规划,主要考虑的因素有:
有了上面这几个数据,就比较好评估了.特别是针对4进行说明,有一些过程数据,处理完就不必要在主系统中存留了,所以在评估时不必考虑,但当出现高峰值,且系统处理无法及时处理时,可以积压一部分数据慢慢处理.
吞吐量的提升,也往往伴随着流量的提升,需要做好容量规划,这时主要考虑峰值时流量即可,评估时可以按峰值吞吐量同比扩大.如果这个值比较大,应该和运维同事一起评估并寻求解决办法.
响应速度,是衡量服务对请求响应时间的指标,一般用毫秒计量,通常用 tp999,tp99,tp90 这几个指标,其中 tp999 指 99.9% 的服务请求的响应时间不会高于这个值.
提高响应速度,可以提高系统吞吐量.假设一个服务的响应时间为100ms,允许的并发数是500,则理论上这个服务的吞吐量上限为 5000(500*1000/100)tps;如果响应时间降低到50ms,则理论上的吞吐量上限会降为 10000tps.
但是提高响应速度会增加成本,一般说来可以采用类似下面的标准:
前端系统:
后端系统:
一般有如下方法:
上下游系统之间进行 SLA 确认,是非常有必要的,如果被依赖的系统达不到性能需求,则依赖方的系统100%达不到性要求.因为问题影响首先会在依赖方显现,所以依赖方更有动力去推动这项工作,如果没有达成 SLA,则需要承担责任.当然被依赖方也有义务配合,如果有分歧,则需要协商一个可以接受的 SLA.
这一个步骤,需要及早进行,只要指标确定,就可以开展了.下面是一个样例:
其中,”是否可降级”,指的是当服务不可用或者性能下降,影响了调用方的可用性和响应时间到一定程度时,可以不调用或者有限调用.如果可降级,应该还要有具体的降级措施和补偿措施.
“超时”指服务调用方的超时设置,超过这个时间将认为本次调用无效,调用方可以重试.如果存在多级依赖关系,如 A 调用 B,B 调用 C,则超时设置应该是 A>B>C,否则可能引起 DDOS 攻击效果.
关于如何进行架构升级,不是本文的重点,建议大家去参考架构委员会的架构白皮书,白皮书系统地介绍了架构的原则和方法,非常有指导意义.这里只强调下大促备战最常用的内容,并且主要从应用角度来阐述.
在评估阶段,我们强调过,最主要的系统改造目标是提高系统处理能力,对应的主要措施是:
第一, 硬件升级,使用配置更高的硬件.但是,有的情况下即使硬件配置上去了,但分配给应用本身的资源没变,这样处理能力没有得到提升,资源利用率很低,这点尤其要注意.
第二,扩容.系统要扩容,首先要使系统具备水平扩展能力,应用的每一层都要能水平扩展,不能留有瓶颈.系统到了一定规模后,可以考虑以集群为单位进行扩容,每一个标配的集群的有定量处理能力.而且线上系统出现瓶颈时,可以扩容或者替换若干个集群,这样简单高效.数据访问层的扩展能力尤其重要,从京东系统现状上来看,这一层往往是瓶颈,而且瓶颈一旦出现,解决起来时间比较长,建议大家引入公司内部的 JDAL 等中间件来实现.
第三,将系统进行拆分,从而将负载分摊,同时也降低问题影响面.可以按自顶向下,自业务到技术的线路去考虑对系统进行拆分,首先看是不是可以从业务域上切分,然后再从功能的相互依赖关系上分析,将相互依赖紧密但与其它应用交互很少的功能作为一个子系统拆分出来.当然,对于有用户界面的系统,出于客户体验的考虑,系统拆分后,要注意尽量保持UI的统一.
第四,提高响应速度.详见保持响应速度一节.
第五,使用编程技巧.如串行变并行、单个处理变批量处理等.
大促备战一般不会提出更高响应速度的要求,主要是能保持原来的响应速度,甚至允许有一定程度的下降.主要是因为系统负载增大后,处理过程中可能出现等待资源的情况,传输过程中也可能出现阻塞情况,从而增大了处理时长.提高响应速度的方法一般有:
第一,Review系统.对系统的每一层,甚至硬件都进行审查,低性能的代码和 SQL,低性能的中件间,有问题的硬件,都会影响性能,都需要改造或者替换.
第二,使用缓存.首先描绘出从客户端发请求到接到服务端应答的全路径,然后分析这条路径上的每一个节点,是否有必要增加缓存.实际上,缓存的本质就是把内容存到离客户端更近、访问速度更快的节点上;缓存的内容可以整个网页、一个完整的请求-应答、一个对象、一个变量值,等等.常用的缓存技术有:
第三,优化依赖.如果一个系统服务对外有依赖,则有必要对其进行分析,看是否要以优化.首先要进行流程分析,识别出主流程,对不是主流程中的逻辑,通常有优化的余地.常用的方法有:
第四,系统分解.涉及到的方法有很多,例如:
1.4.3. 保持可用性
为保持可用性,一般可以采取如下措施:
系统性能评估与验证的方法同样适用于本工作.
就像运动员备战运动会一样,需要进行体检,以保证系统以优良的状态迎接大促.下表列出了重要的检查项:
为一个互联网企业,业务发展和变更速度比较快,系统很难一直保持稳定,出现问题在所难免.问题发现的越早,才能越早介入处理;更进一步,如果能在问题发生之前就发现问题的趋势,并及时介入处理,就可能避免问题发生.
及时发现问题的主要手段是完善监控与报警体系,涵盖从业务,到应用再到硬件、网络全方面的监控.本文主要涉及应用级别的监控.
系统运行时可能遇到各种各样的问题,如果有对应的应急预案,并演练到位,则可从容面对.当真的出现了紧急情况,最要紧并不是去寻找问题的根源,而是果断采取措施控制住影响.越早决策,影响就越小.
系统运行时可能遇到各种各样的问题,常见的有:
3.1.2. 预案重要元素
3.2. 快速决策
由于互联网业务发展变化较快,系统变更也比较频繁,不适合开发和运营分家的模式,而是自己建设的系统,自己负责运营.这样,不但能提高运营效率,大家又可以在运营过程中发现问题,体验问题带来的痛苦,所以会想办法改进设计,以避免问题发生.
这样的团队建设的系统会更易于运营,性能更加稳定,团队的设计能力也会显著提升,也就会趋于稳定和成熟,这样就形成了良性循环.
备战大促,涉及到许多团队,需要大家通力合作,也就需要遵循一定的制定和流程规范,下表列举了其中一部分.
6. 总结
我们回顾一下备战的思路和方法,这是平时就要认真做好的:
如果面临大促,则有必要采取的措施有:
要能很好地执行以上方法,应该具备两个要素:
转载请注明本页网址:
http://www.vephp.com/jiaocheng/4336.html