电商平台搞秒杀背后的技术实现

一、概要:

每当电子商务平台搞活动,“秒杀”经常是提升网站活跃度的利器之一。比如活动日早上10点1元爱疯7秒杀7台,谁看到了估计都想去秒一把,万一秒中了呢。秒杀的典型特征就是在特定的短时间突然涌入大量请求,对系统造成洪峰冲击,如果系统设计得不好,很容易被直接打垮掉。

二、秒杀架构

按照“关注点分离”(SoC)的原则,秒杀业务跟普通的订单业务关注点显然是不一样的,秒杀强调的是高效率、高性能,普通订单强调的是业务流程的高一致性。所以我们首先应该将秒杀处理逻辑从普通的订单逻辑中分离出来,进行独立开发与部署。这样分离的好处就是非常灵活,可以在秒杀设计中采用完全不同的技术和架构,在秒杀活动结束后也方便下架部署。

既然按照分离的思路,我们就不需要再局限于传统的RMDBS和JavaEE了,因为二者本质上都是企业架构,单机每秒并发处理能力的量级也是在1000左右,如果加上复杂的业务逻辑的话,经常会下降到500以下了。我们将眼光放到Nginx和Redis上,二者的单机处理能力,最高都能达到每秒万级乃至10万级,轻松完爆RMDBS和JavaEE的处理能力。所以,我们希望在Nginx和Redis上做做文章,完全通过这两把利器来完成秒杀的用户行为部分。

如果我们只用Nginx和Redis来完成秒杀下单任务的话,加上秒杀本身具体的业务逻辑,那么即使达不到每秒10万并发,单机每秒达到1万应该也是可以达到的目标了。

针对秒杀方案的设计,我们最大化地简化业务流程,只需要用户在秒到之后提供一个手机号码即可成功完成秒杀。我们在Redis中来记录库存,通过减1操作来扣减库存。当库存减到0时,结束秒杀。秒杀成功后,在Redis中使用队列来记录用户的手机号码和相关秒杀信息,结束用户的秒杀动作,后续交由后端秒杀订单处理模块,按照其固定的处理效率,逐步消化处理之。编程语言直接使用Nginx(项目中实际使用的是OpenResty)中提供的LUA脚本来实现,我们用LUA来读写Redis,并且进行业务逻辑的操作。这样秒杀活动的实现,完全不需要经过WEB服务器、APP服务器和DB服务器,直接在高效率的Nginx和Redis中完成了。在实际的运用中,处理效率也基本达到了每秒万级的并发请求。

三、总结思考

看似使用双雄利器Nginx+Redis能实现单机每秒万级的秒杀了,你可能会有很多疑问,比如Redis还没有来得及写入持久化就宕机了怎么办?Redis中扣减库存,如果扣减成功但是后续却失败了,浪费库存了怎么办?还有用户手机号码填错了怎么办?这些问题,确实需要思考,但仔细想一下,其实不需要紧张。用阿里巴巴高级专家沈询的话说:世界上解决一个计算机问题最简单的方法,“恰好”不需要解决它!

秒杀正热火的时候,偏偏Redis某个节点宕机了,那就算倒霉了,有什么大不了。Redis扣减库存浪费了1个,又不是超卖,有什么大不了。用户手机号码填错了,不管了吧。

虽然说恰好不需要解决它,但是在技术上,我们在Redis部署上,考虑使用集群,使用SSD可以加速Redis内存的持久化等。在业务上,浪费掉的秒杀库存,可以在下一次秒杀中加上。用户手机号码填错了,可以在业务上要求秒杀之前先校验手机号码或者先登录等等。

当然,不同的秒杀业务,差距也相当大,但是很多思想是一致的,比如简化业务流程,异步化订单处理,与常规业务进行分离部署,使用独立的更加适合秒杀场景的特定技术等等。

原文发布于微信公众号 - nginx(nginx-study)

原文发表时间:2018-04-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏互联网高可用架构

互联网性能与容量评估的方法论和典型案例5 性能评估参考标准

4724
来自专栏杨建荣的学习笔记

数据访问层的优化思路(r10笔记第80天)

对于数据访问层的优化,我简单总结了一下,其实里面有很多的点子现在想起来有一种灵光一现的感觉,但是真真切切的,里面有不少是之前公司已经做到了的,所以一个做产品的公...

3137
来自专栏Debian社区

Debian 成为主流 Linux 操作系统的七个原因

Debian也许是历史最悠久的发行版之一,但很显然,它仍可以教其他发行版好几招。要是没有Debian,Linux领域的境况会大不一样,会黯然失色好多。Debia...

722
来自专栏FreeBuf

新手入门8个简洁方便的安全工具

1:Maltego Maltego可是说不是一个黑客工具,而是用来对来自互联网的信息进行收集、组织、可视化的工具。 它可以收集某个人的在线数据信息 –包括电子邮...

2145
来自专栏PPV课数据科学社区

【学习】百万级别数据,数据库Mysql,Mongodb,Hbase如何选择?

情况说明: 现在需要做一个数据存储,500w左右的数据,日后每天大约产生5w条左右的数据。想把这些数据存储起来,供日后的数据分析用?使用上面说的三种数据库中的哪...

4808
来自专栏开源项目

精选 6 款实用企业应用框架 | 码云周刊第 35 期

精选 6 款实用企业应用框架 1 OA 平台 JFinalOA ? 项目简介: 项目主要提供办公系统的开发人员提供一套带有内容管理,权限管理,用户管理,流程管理...

5066
来自专栏JAVA高级架构

深入浅出 RPC - 浅出篇

近几年的项目中,服务化和微服务化渐渐成为中大型分布式系统架构的主流方式,而 RPC 在其中扮演着关键的作用。在平时的日常开发中我们都在隐式或显式的使用 RPC,...

1183
来自专栏FreeBuf

Thermanator攻击竟能够通过键盘上手指的余温窃取密码?

来来来,大家来get一下窃取密码的新姿势!近期,美国加州大学欧文/尔湾分校(UCI)的三位安全研究专家发现,他人可利用热感摄像机来测量用户手指在键盘上留下的余热...

1104
来自专栏IT技术精选文摘

基于MySQL的分布式数据库TDSQL十年锻造经验分享

1613
来自专栏北京马哥教育

大神分享美团外卖订单中心演进之路

? 作者:何轼 来源: http://tech.meituan.com/mt_waimai_order_evolution.html 前言 美团外卖从20...

4627

扫码关注云+社区