不怕峰值来袭,网易考拉借容器云玩转双十一
为了备战本次双11,跨境电商领头羊网易考拉海购(以下简称“网易考拉”)早早就宣布投入4亿资源,精心营造了一个“超级洋货节”。造节在引流的同时,也会给电商系统带来了巨大的考验。但网易考拉对此并不担忧:借助网易蜂巢容器云平台,网易考拉已经完成了核心系统的分布式改造,全面实现了资源弹性和应用弹性,以保障电商系统在业务规模快速增长的情况下稳如泰山,618、双11、黑五等大规模促销的访问压力也可从容面对。
重新定义消费升级,网易考拉的崛起和压力
2015年1月,携网易媒体的优势,网易考拉正式开始角逐跨境电商。只用了短短一年,从零起步的网易考拉就开始冲击100亿销售额。截至今年10月末,网易考拉已积累超过1,500万的忠诚复购用户,在国内自营型跨境电商进口销售额榜单上,网易考拉已经名列第一。
网易考拉的快速成长,有互联网和消费者趋势变化推动的因素,但更是网易考拉运营策略得当的结果。借助网易集团现金充沛的优势,网易考拉在跨国的仓储、物流、供应链、支付等基础工作上投入了大量的精力,全球布点,严格审核供应商的资质,并通过自营直采以保证100%正品,为赢得消费者信任、进行各种促销活动打下基础。
原始积累已经完成,2016年的双11就是网易考拉的大日子。以重新定义消费升级之名,网易考拉瞄准了品牌、个性和专业等三个需求,进行差异化的竞争(价格已经不是电商竞争的关键)。网易考拉很早就已经为规模促销进行准备,不仅为保税仓扩容8万多平方米,从10月初开始备货,而且还从8月初就开始构建了一个物流云平台,通过智能化管理系统“祥龙”根据销量预测分仓,以保证及时配送。所以,网易考拉有底气在“超级洋货节”期间推出一项1元试用正品好货的活动,即支付1元就可申请海外商品的试用,施华洛世奇、大王、好奇等众多海外一线品牌参与。
供应链、仓储、配送的能力固然是与众不同的“11.11超级洋货节”收效的保障,然而,临门一脚的在线商城系统也是不容忽视的一环,如果直接面向用户的电商系统不能及时上线策划的新功能,不能顶住访问压力,网站的体验不能让消费者满意,后端的工作准备得再好也是枉然。据网易考拉预测,本次双11大促零点的订单量将瞬间达到平时的数倍,系统压力极大。
另一方面,网易考拉对用户体验有一种近乎偏执的要求。根据网易考拉海购高级副总裁朱静波的介绍,网易考拉内部有一个用户存活率的指标,希望至少50%的大促用户能够因为良好的用户体验、有趣的内容最终留下来。
其实,本次双11带来的技术挑战和应对方式,正是网易考拉快速成长的缩影,在此之前,618、黑五等大促销规模压力屡创新高,但网易考拉网站从未崩溃。这得益于网易考拉有一个支持弹性扩容的业务架构。当然,这个架构并不是生来就有的,而是随着网易考拉的成长经过了两次大版本的迭代形成的,其中大量借鉴了网易互联网产品研发经验。
弹性架构迭代:容器的胜利
资源的弹性是云计算的一个基本承诺,尤其是2009年双11之后,电商团队对弹性计算的需求愈发清晰,都自觉地探索各自的云架构。2014年底立项的网易考拉,也含着资源弹性的金钥匙出生——2012年开始构建的网易私有云此时已经上线,支撑着多个网易互联网业务,网易考拉系统也直接在网易私有云上开发和部署,借助网易私有云计算、网络、存储资源的弹性,辅助自动化脚本及配置工具,可以完成基本的资源的管理和控制以及应用的部署。同时,由于跨境电商刚刚兴起,初期需要快速验证商业模式,系统也采用了单体式架构,直接聚焦核心场景进行开发。
自从2015年1月上线后,网易考拉的业务开始进入了高速发展期,第一版电商系统的第一个瓶颈逐渐凸显,就是迭代速度缓慢,而仅仅提供基础的资源弹性无法解决问题。具体而言,随着用户数量的不断增加、市场需求的变化、运营体系的完善,网易考拉对功能模块变更的需求越来越频繁(例如注册模块要从只支持手机登录到支持微信、微博、QQ、支付宝登录),不仅仅基础资源管理越来越复杂,脚本化的应用层的部署和管理也已经远远跟不上需求。在原有模式下,每一个小迭代都要申请资源搭建一个测试环境,每当有新的模块和服务的时候,都需要维护脚本及自动化配置工具,以网易考拉较高水平的研发能力,每天也只能最多实现两次更新。此外,原有模式附带的一个问题,就是容易出错,多次的环境部署无法完全的复现,毕竟再牛的程序员也还是人类。
网易云的容器云平台、新一代云计算——网易蜂巢的自动化能力解决了网易考拉的燃眉之急。网易蜂巢采用了流行的Docker容器作为整个软件部署和调度的基本单元,并以结合Google生产集群管理的理念和业界的实践经验打造的Kubernetes作为容器管理和编排服务框架。
与传统IaaS架构不同,容器提供的不仅仅是基础资源,而是将操作系统,应用运行环境以及代码打包成一个不可修改的镜像进行交付,容器的机制可以保证无论在哪里,什么时候运行,都能保持环境的一致性,也就是Docker所宣称的“Build, Ship, and Run Any App, Anywhere(一次构建,随处运行)”。
一个服务往往会包含多个组件,因而会封装成为多个容器,容器之间会有相互的依赖,相互的调用,Kubernetes可以实现服务的编排、自发现、自修复,使得复杂服务的部署变成了一次API调用。
网易蜂巢根据网易考拉的架构,把代码里面的功能自动封装到容器当中,并且把容器做成镜像,再通过编排服务解决不同容器之间的依赖关系,自动完成软件的安装、部署和运行,然后把运行起来的软件放到网易考拉的测试环境、联调环境和现场环境。另外,网易考拉将代码管理和持续集成工具同网易蜂巢容器平台集成起来,整个过程中网易考拉只需要完成编码和测试,不需要关心申请资源和部署环境,既便捷又减少出错概率。
网易考拉在使用了网易蜂巢的自动化部署工具实现一键式生成环境、触发测试和发布之后,变更的频率由每天2次可以增长到每天11次,同时整个软件产品质量也提升了52%。
经过第一次大迭代之后,网易考拉进入了爆发增长期,然而当用户量达到百万级的时候,又一个大瓶颈出现了,就是单体架构遭遇性能的天花板。在业务的爆发期,网易考拉对迭代速度有了更高的要求,同时需要保证系统在高并发访问下的稳定性和页面性能。首先,软件的稳定需要一定的时间,但单体架构牵一发而动全身,频繁的变更会造成频繁的业务中断,比如注册模块的内存泄漏就会导致整个系统不可用;其次,软件对用户量的承载是有限的,一次访问的延迟在日活十万时是几毫秒,到日活百万时可能就上升秒级,尤其是到了网易考拉日活用户已经超过千万、促销活动以周为单位的时期,压力更是巨大。然而,在单击架构下,网易考拉的瓶颈是全环境每天最多更新112次,单次访问的延迟达到500毫秒,整个业务的更新率越来越低。同时,在单体架构下做弹性扩容还会造成浪费,比如一些访问频率不高的模块,也需要根据购物车模块面临的访问压力来准备资源。这个时候,解决的办法,是借助网易蜂巢对业务的分布化改造能力,再次进行大版本的迭代。
基于Kubernetes提供的服务发现功能,网易蜂巢可以支持网易考拉方便地把注册、购物车、支付等不同的功能模块拆分出来,由不同的团队独立开发和维护,将原来的单体结构变成微服务结构,单独进行弹性伸缩,并通过编排建立它们之间的联系,这就保证了网易考拉团队可以灵活地实现软件的快速迭代,以及软件架构的弹性伸缩。这次迭代为网易考拉带来了6倍以上的能力提升,每天的更新频次上限由每天112次上升到每天723次,并发访问支持由原来的每秒2,600次提升到了每秒16,000次。
为了支撑高性能的应用,网易蜂巢基于原生的Kubernetes的基础上,对于调度进行了优化,保证应用的快速部署和快速修复,并且利用多年运行IaaS层的调优经验,对于容器之间的网络互通和持久化存储做了优化,保证数据读写的高性能及容器之间互相访问的高性能。
为了保障在不同规模下的一致的用户体验,网易考拉还使用了蜂巢推出的全链路的性能监控体系。在某次大促之前,线上压测团队发现,原本一次加入购物车的延迟仅仅20毫秒,在用户量爆发之后就超过了1秒钟,通过该功能回溯整个链路的调用过程,发现在整个服务的过程当中,数据库操作环节的时延占到了整个时延的95%以上,所以,网易考拉能够快速地优化数据库的操作逻辑,很好地应对了大促时的爆发访问。
小结
网易公司创始人兼CEO丁磊曾说,电商的核心在于“商”而不在于“电”,网易考拉也确实围绕商务开展了灵活的玩法,本次双11尤其如此,这也让双11成为了电商技术团队的一次大阅兵。然而,网易考拉在网易蜂巢的基础上实现了业务架构的现代化,获得了快速迭代和全面弹性伸缩的能力,经受住了618和多次黑五大促的考验,这让团队可以从容地玩好本次洋货节。事实上,网易考拉的线上压测团队已经提前申请资源,按照近期平均交易量的数倍对电商系统进行压测,并针对一些小瓶颈进行快速的代码调整,对于实际的挑战,团队已经心中有数,所以并不惊慌。
网易考拉认为,容器云之所以能够带来超过传统IaaS的好处,并不仅仅是因为Docker的应用,关键还是因为通过网易蜂巢能够实现整个业务架构的变革。其实,作为网易云的基础服务,网易蜂巢已经在支持95%以上的网易互联网产品的运行,这些产品团队通过网易蜂巢的容器服务和工具链,实现了敏捷的生产方式和先进的分布式架构,从而支撑他们的业务像网易考拉一样快速地成长。