如同自然界的物种演化,从单细胞衍变到类目繁多的生物体系,网站的演变亦是如此。如今互联网巨头们也曾是从一台放置车库或客厅的服务器开始发展。谷歌、淘宝、脸书莫不如是。
它们的发展过程始终离不开一句话——物竞天择适者生存。适应环境的生物生生不息,符合用户需求的网站野蛮生长。今天我们来研究一种特别的需求下的产物:秒杀系统。
何为秒杀
秒杀最初是格斗游戏中的用语,逐渐发展引申至商家的促销手段。随网购的普及,如今双十一促销、12306抢票、新款手机的限量发售都存在着秒杀活动。秒杀本质上是一把点燃人们欲望的篝火。
然而,秒杀同时也伴随着对服务器的巨大压力,一时间蜂拥而至的数据会造成服务器的宕机,给用户不良的体验。例如2011年末京东图书曾做的“京东图书疯抢三小时”活动,瞬间暴涨的流量导致服务器负载过重,响应速度变慢。
而在 2016 年双十一,支付宝支付峰值达12万笔/秒;京东用29秒突破2010年双十一全天下单量的纪录;苏宁全渠道销售订单量同比增长193%。目前大型电商已经解决高峰期间的 IT 压力,构建了全民秒杀的局面。
秒杀背后的设计
秒杀,这样一个市场需求下承载着无数架构师、开发人员的心血。笔者稍稍探究了一下,发现里面涉及到的内容非常多。鉴于篇幅所限,在这里我简单的列举几点,分享秒杀背后有哪些精心设计。
1)Button 点亮的一瞬间
为了减轻服务器端压力,购买页面被设计为静态页面,缓存在 CDN,反向代理服务器上,而这个静态页面中加入了一个 JS 文件引用。当秒杀开始时一个定时任务服务器生成并发送一个新的 JS 文件到 JS 服务器上,并被用户的浏览器加载,从而让按钮亮了起来。
2)最大并发量
一个系统的 QPS(Query Per Second,每秒处理请求数)并不是随着服务器的数量成倍增长的。在高并发的状态下,业务请求的平均响应时间一定会增加。因此我们必须要知道系统所能承受的最大并发量,来设置 Apache 的最大连接数。
这个数字一定不是越多越好,而是根据 CPU,内存等硬件因素综合考虑得出的。可以通过 Apache Bench 来测试一下,取一个适当的值。
3)攻防之战
秒杀大促的手段一出,市场上就出现了“刷票工具”、“秒杀器”等工具来帮助某些用户发送尽可能多的请求到服务器,来达到提高秒杀成功概率的目的。但是有进攻就有防守,我们可以通过提高参拍者的门槛(如实名认证)、复杂度较高的验证码、数据挖掘以过滤黑号等手段来尽量屏蔽刷单行为,让秒杀变得尽可能公平。
4)用户体验
真实环境上一切都有可能发生,谁都不能保证在那一刻系统一定不会出问题。所以从用户体验的角度来讲,系统即使发生了问题,也应该让用户看到一个正常的返回页面(如秒杀结束页面),而不是直接返回错误。
5)人工智能
如今,人工智能运用在各种各样的领域中,如:无人驾驶、语音识别、RoboAdvisor(智能投资顾问)、AlphaGo 等。作为互联网电商的京东在最近一次的双十一中就引入了新技术:ForceBot 军演机器人。它能模拟真实的用户进行搜索、加购物车、下单等一系列操作,通过机器人发起大流量进行全链路的压测。
文末小结
秒杀,能让食草的绵羊变成了食肉的群狼,能让拧不开瓶盖的女生秒变徒手撕快递的女汉子。
也许随着技术时代的飞速发展,秒杀系统很快就会被其它新生事物所取代,被人们所淡忘,但电商秒杀背后的技术将被积累下来。我们也翘首以待不断更迭发展的技术能带来人们更多的惊喜!
本文作者:王艳(点融黑帮),现就职于点融网工程部 Fincore 团队,不理财的麻麻不是一个好程序媛。