这一场几乎是全民参与的最大规模的网络盛会背后,紧贴的是和我们生活最近的场景之一——购物。如果你参与过多年双 11,也许会对曾经的服务器拥堵、环节不流畅印象深刻,而现如今,这样阻碍「买买买」的情况却越来越少。这背后让人好奇的就是,双 11 是怎么变成现在这样的?
带着这个疑问,双 11 前夕,极客公园前往宁波海关、保税区仓库以及阿里巴巴技术部等重要环节,采访到在双 11 前进行「压测」的工作者,听他们聊了聊在大家尽情买买买背后的秘密。
看不见的争分夺秒
压测,全称压力测试,是对系统进行针对性测试,以此发现和解决问题,为正式活动做好准备。通俗点说,就是实战演练,「磨刀不误砍柴工」。
极客公园来到的第一站是宁波海关,这里是目前全国跨境物流包裹量最大的进口口岸之一。在历年双 11 中,这里承担了全国将近 50% 的跨境包裹量。面对现今日益完善的跨境电商业务,今年双 11 能否处理更海量的包裹单量申报,就成为其压测的目的。
「现在日平均处理单量大约是 10 到 20 万单,如果按照综合预测今年双 11 真的有 700 万单,就是平时的 30 多倍。」宁波海关技术处刘阳科长介绍,相比去年 双 11 不到三百万单的量,今年压力的确很大。
有海淘网购经历的用户应该比较清楚,在购买海外商品后,海关要对入境货物进行审核,完成备案,这一环节中,地方海关要在初次审核后进一步上报至海关总署,经过总署审核后才能够进行下一步动作。因此在面对双 11 这样的大型线上交易活动时,对于系统的考验更加巨大。而对于电商企业来说,要想让境外商品更快更高效送到用户手中,也需要和海关默契配合。
从九月份开始,宁波海关就和阿里巴巴对接,阿里巴巴会生成上百万份虚拟申报单,以测试海关系统能否在短时间内处理通关,并且顶住峰值压力。这一过程可以发现系统需要多长时间处理完大量数据、哪些环节比较慢等问题。经过十月份的第一轮准备,目前宁波海关已经可以在 24 小时内处理 700 万左右的单量,这意味着双 11 当天,即便大家都从海外买买买,海关处理起来也不会慢。
从海关采访结束,我们来到宁波保税东区的跨境电商专用仓库。虽然还有二十多天才到双 11,但这里 30 多个保税仓库不少都已经堆满货物,货车进进出出,工人们忙着理货、贴码、上架、包装等工作。
宁波保税区海关物流监控科科长孙长伟告诉极客公园,再有一个多星期,这些仓库应该就能完成所有备货上架,预包装工作也将基本完成。根据预测,今年宁波关区 700 万单的包裹量中,保税区将达 560 万单以上,这些货物预计可以在 10 天内全部完成发货。
但仓库的压测和别处不同,仓库管理人员告诉我们,在双 11 来临前,仓库也会进行实战演练来测试短时间内处理货物的能力。白天先将货物累积起来,到晚上十二点再集中处理,并预测包裹处理能力,发现其中可能出现的问题,包括人员效率,也包括机器是否正常运转等。
这和平常有所不同,平时用户白天的订单包裹,会在下午四点前发出,四点以后的包裹会在第二天早上发出,到双 11 这天,所有包裹都是晚上十二点下单之后就开始上线发货,所以考验的就是十二点以后的处理能力。
仓库管理人员告诉极客公园,用户下单之后,仓库在半小时以内就会接到物流信息,而宁波保税区的海外商品提前已经准备就绪,所以相比过去,如今即便是在双 11 期间人们大量购买的海外商品,出货时间也和国内商品基本相同,到收货点不会超过 10 天。
人变少,压力却变小了
每年双 11 这一天的零点,大量用户会进入阿里平台,选购商品。这里包含的不仅仅是不同地区用户复杂的使用习惯,同时也需要电商/海关/银行/物流等各方面的快速协作,从这一层面来说,即便双 11 已经到第九个年头,也仍然会有挑战。
「当流量大的时候机器性能会达到一个瓶颈,突破这个瓶颈就会影响用户体验,引起一系列异常。」
经历过八年双 11 的天猫双 11 技术大队长霜波告诉极客公园,系统要处理几亿用户同时下单,要保障这一点是很难的,所以压测这件事从第一次双 11 开始做到现在。但最初几年的压测是在线下,之后发现线下压测很难找到线上的问题,因为线下压测要另外搭一套系统,这套系统里的机器/容量都和线上很难匹配,所以到 2013 年,阿里做了线上全链路压测,技术人员会模拟双 11 当天用户所有行为,直接在线上机器去下单。和线下压测相比,线上压测按照链路走,这个链路可以很深很深。
「比如你在淘宝下一个单,然后可以马上支付,可以发出物流单,然后商家就可以立即操作发货,这就可以看作一个完整链路,我们可以把这个链路完全走完。」天猫双 11 稳定性负责人叔同表示,之前压测时,要对系统一个一个压测,之后会知道哪个部分该加服务器,哪个该扩容。但这种分而治之的策略像堆积木一样,不牢靠。如果一个应用和后面三个有关系,那联系起来就会出很多问题。
「全链路就是把一整套串起来压测,把支付宝/菜鸟这些也都串起来,打通消息交互和服务调用,都可以直接测试。这样能够达到跟双 11 类似的压力环境。我们第一年做全链路压测发现五百多个问题,后来分析过,如果这里面有两三个问题爆发,整个双 11 就是失败的,但通过这样的机制,能让它把问题提前暴露提前解决。」
从 2013 年开始,全链路测试为双 11 当天解决了不少问题之后,到今年,阿里开始尝试的,是如何能在效率提升的基础上,让更少的人,投入更少精力去参与双 11 测试,所以就有了「尖兵计划」,让机器代替人去解决一部分压测问题。
「我们在线上,白天会有百分之五十的量跑真实用户,另外隔离出百分之五十的量去跑压测数据,这样就能自动去跑压测数据,也不会对线上造成影响,今年尖兵计划中,我们提前发现了一些系统 bug 还有硬件资源 bug,所以到晚上压测时压力就更小一些。」
霜波表示,之前的压测都在晚上进行,为了不影响用户使用,去年双 11 前工程师对系统进行了 8 次压测,而今年通过模型上新的算法,加上大数据的分析,压测实际上在白天就自动完成了一部分,而另一部分也帮工程师解决了很多问题。10 月 20 日晚上,一轮新的压力测试开始,当屏幕上的数据突破某一峰值后,曲线出现了一次小幅度的下跌,几分钟后,数字又恢复了平稳,看似普通的压测,却和往年有所不同。
「刚才我们的一台机器就出现了过载,分配到这台服务器的订单都出现了交易失败的情况。如果是去年,就能听到有人说,要把这台机器下线,但是今年你会发现这个过程是自动的,系统自动发现了这台服务器的问题,自动把它下线,修复问题之后会自动把这台服务器重新上线。」霜波表示,像这样的人工决策点,今年有一半都交给了机器,压测的次数也从 8 次减少到了 3 次,「工程师的工作量减少了 30%,轻松很多。」这不仅仅是减少工程师熬夜,也是自动化算法的优势。
压测不断改进也在提升着双 11 当天的峰值处理能力,叔同表示,在 2015 年双 11,系统峰值处理能力是 8.6 万次/秒,到 2016 年就达到 17.5 万次/秒,尽管今年双 11 具体情况尚不可知,但至少在压测当中,系统的自动调配处理能力在不断增强。
在我们能够感知的维度,大多数人看到的双 11 仅仅是一次普普通通的网购,可当互联网用户群越来越大,网上购物的行为越来越普遍时,要怎样连接各个环节,让所有人都能感知到体验升级,怎样确保大量用户参与也不至于出现问题,这里面不仅仅是不同领域的协作,也是技术的进步。而当你再下单参加双 11 狂欢时,也许会有更进一步的体会。