电商中为了吸引顾客、聚集人气,经常会策划一些秒杀活动。活动中售卖的商品,要么价格远低于市场价格,要么比较稀缺(如一些新发布的商品)。这些商品电商一般都会限量、限时销售。无疑这些商品对消费者的诱惑力是巨大的,消费者蜂拥而来,往往几秒钟就可以将商品抢购一空。而对于电商系统来说可能更多的是考验。
首先,秒杀的场景决定了秒杀是一场速度的比拼,也就是俗话说的“手快有、手慢无”。大家都争着在活动开始后,第一时间将商品抢到,完成下单。因此秒杀活动开始的一瞬间会有大量的流量涌入,几倍、甚至于十几倍的流量对系统的冲击不可谓不大。如果系统没有足够的capacity或应对措施,很可能就被瞬时高流量给压垮了。
其次,突如其来的高流量,给系统各个模块都来了一连串的压力,系统可能会因此变慢,而且可能会彼此影响,影响可用性。比如:数据库更新同一个商品库存,需对同一行记录加锁,随着并发的压力逐渐增大,数据库更新的性能是逐渐下降的。从而引起提供库存service的应用服务性能下降,连锁的影响到下单service的性能,最终反馈到消费者的可能就是整个网站购物流程性能差、响应慢。而面对响应慢的系统,很多消费者可能采取反复刷新,多次尝试,这无疑又增大了对系统的压力。
还有,上述种种给消费者带来的往往是体验上的痛苦。如:网站响应慢,点击抢购按钮没反应。好不容易可以操作了,却发现秒杀活动已经结束,消费者的参与感比较差。久而久之,可能就对此类活动失去了兴趣。
基于以上秒杀场景下的痛点,1号店的秒杀排队系统在设计时主要考虑以下几点:
现在来简单介绍下我们秒杀排队系统的架构,从大的方面来说分为三个主要模块:
任何系统都不可能一帆风顺,但我们要能在出现错误时仍旧保证系统的高用性和良好的客户体验。举几个简单的例子,比如服务模块调用后面服务时,出现调用服务超时怎么办?对此我们设计了对于超时的请求,可以重试的机制。再比如,如果后面真正的业务处理系统宕机怎么办?如果是传统系统的话,可能就面临系统无法使用的尴尬。而我们的系统已经是异步的了,因此加入排队队列的用户请求,在业务处理系统恢复后都可以得到处理。只要我们在前端给用户以友好的交互、提示,系统还是能提供一定质量服务的。
因为我们的系统设计成异步的,因此消费者不再是像以前一样同步地去等待反馈。消费者需要一个途径来获取抢购的状态和进度。我们的主体流程大体上分为几个阶段:
下面仅挑选2个PC端页面交互的设计供大家参考,
当然我们还提供了一些分支流程的提示与处理,如果大家感兴趣,更详细的情况可以到1号店亲自参与秒杀活动来体验。
目前我们的秒杀排队系统已经应用于1号店的历次大促,并取得了良好的效果,受到业务运营和消费者一致的好评。优秀的系统一定是建立在对业务透彻理解的基础上,针对业务的场景与痛点,结合现有的技术有针对性的提供解决方案。同时技术上成功的系统,往往也推动着业务的发展,给业务更好的支撑和推动。
原文:http://www.cnblogs.com/yanghj010/p/4969797.html