2019独角兽企业重金招聘Python工程师标准>>>

电商抢购秒杀系统的设计_1_应用场景分析

概述

所谓知已知彼,百战不殆,在开始详细介绍实战中的抢购秒杀系统时,我们了解一些抢购秒杀系统系统面临的尴尬与难点。另外需要说明一点,下面的内容都是在工作中慢慢总结得来,我们团队也是慢慢摸着石头过河,甚至最初的的架构设计并非是抢购秒杀系统。

评估系统处理能力

理论基础:LNMP的并发考虑与资源分配

虽然有基础去评估我们应用系统的处理能力,但是电商购买的业务流程挺复杂,从登录,商品详情,购物车,填写收货地址,选择支付方式,创建订单,完成支付,以及隐含的定时服务,限购策略,库存操作,排队机制等一系列的业务逻辑,每个请求的处理时间都不一样。那么根据木桶原理,一只水桶能将多少水取决于它最短的那块木板,分析整个业务流程中最耗系统资源的请求,以此为标准为评估系统处理能力。

场景

我们是一个做特卖秒杀抢购的电商平台,我们的商品异常火爆且价格低廉价,这就给网络黄牛带了巨大的利润空间。为了让真正的平台用户受益,改善用户体验,提高用户留存率,我们在产品业务、技术实现上尝试了很多方法,都没有完美解决黄牛刷单的问题。

目标

话说回来,让黄牛买不到商品,不是单纯技术能够解决的问题。我们要解决的问题是,由于黄牛大规模的请求登录接口、商品详情页接口、下单接口导致在抢购开始前后的流量峰值直接翻了上千倍,最终导致服务不可用。在不增加硬件成本的情况下,解决短时间内大流量导致的服务不可用。

产品特征

以H5应用为主站主要流量入口,支持QQ、微信、微博等平台用户登录购买,嵌入到某流行的资讯客户端。另外,也有单独的特卖安卓客户端、IOS客户端。

刷单特征

账号

黄牛每次抢购活动注册新用户,由于平台流量大部分来自某新闻客户端,客户端的账号体系为弱账号体系,可以绑定手机号也可以解除绑定,每次重新绑定都会生成新的用户ID。同时平台也允许非手机号注册的用户下单购买商品,用户的收货地址的联系电话可以和注册账号的手机号不一致。另一方面,黄牛在淘宝花钱可以购买大量的平台新注册账号,真是术业有专攻。

IP库

在云服务盛行的互联网时代,黄牛以很低的成本可以获得上万的IP及主机,IP分布在全球各地。

频次

黄牛刷单时访问频次不是很高,在拥有大量账号、IP的情况下,访问频次低也可以抢购到商品。

破解原生App

黄牛的技术很强,将混淆加密后的原生客户端破解,将其中的加密算法重写,升级抢购软件。

CC攻击

黄牛为了避免预约用户将商品提前抢光,联合全国的黄牛同时高频次的访问网站数据接口,导致网站由于大流量下不堪重负,从而服务不可用,在预约提前购买时间过去(黄牛的目的是堵住预约用户购买),全网用户均可购买时,慢慢的减少流量,任意下单购买商品。

产品与技术措施

产品业务角度

预约购买

全网用户提前预约,具有预约购买资格的用户可享受提前入场下单购买。预约需要绑定手机号,输入验证码(短信和图片)。

抢购排队

为了应对短时间内的大流量请求,采用排队购买机制,用户提交购买请求后立即返回,等待后端处理结果。

引流

在预知大流量不可控时,将H5主站流量引到原生的客户端APP内进行抢购。

技术防守角度

验证码

在抢购开始时,下单购买某商品必须输入验证码。在一定时间内,对于访问库存为0的用户请求,超过一定频次后要求输入验证码。打码云服务很多,理论上字符验证码均可识别,甚至人工打码,但是提高了刷单成本。

IP禁止策略

通过nginx的lua扩展,在单位时间内同用户相同IP请求同一URL进行计数,在nginx层面进行限流。IP级别下,控制不好,误杀太多或者起不了作用。

fastcgi请求计数

设定PHP可并发处理请求的最大值,nginx交给PHP的请求都进行计数+1,fastcgi完成后进行-1。由于nginx+php-fpm高并发情况下,做到原子的计数很难。

队列

引入消息队列和长连接服务,用户请求排队购买,后端进行流量控制,发放资格号,通过长连接通知用户的处理结果。

静态化

将商品详情页静态化,静态页面的请求直接由CDN返回。

建立黄牛账号库

经过几次大规模的抢购后,黄牛账号有限,将积累的黄牛账号入库,在下次抢购时,载入内存,降低购买优先级或者直接拒绝请求。

增加服务器

从原有的几台服务器,扩容到几十台服务器,每个服务都部署负载均衡、高可用。如多级缓存、nginx与php-fpm分离、长连接服务器集群等等。

可伸缩架构

抢购开始前准备上百倍的服务器数量,所有的服务均可横向扩展,提高处理能力。

上面交待了挺多的做抢购平台的一些场景、特征、措施,涉及的产品和技术的面广,我认为最重要的是解决网站服务不可用或者宕机的问题,我们在nginx层面做了很多努力与尝试,另外nginx在防CC攻击方面有一些成熟的方案,下面详述,下一阶段研究nginx源码。

nginx请求限制模块

ngx_http_limit_conn_module

限制连接数模块

通常用来限制同一IP地址的可并发连接数

指令说明:http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html

需要注意的是$binary_remote_addr而不是$remote_addr,$remote_addr的长度为7到15个字节,它的会话信息的长度为32或64 bytes,$binary_remote_addr的长度为4字节,会话信息的长度为32字节,这样设置1M的一个zone时,用$binary_remote_addr方式,该zone将会存放32000个会话。

ngx_http_limit_req_module

限制请求数模块

通常用来限制同一IP地址单位时间可完成的请求数,限制的方法是采用漏桶算法(Leaky Bucket),每秒处理固定请求数量,推迟过多请求,超过桶的阀值,请求直接终止返回503。

指令说明:http://nginx.org/en/docs/http/ngx_http_limit_req_module.html

基于nginx的Tengine分支ngx_http_limit_req_module

nginx类似,不过支持多个变量,并且支持多个limit_req_zone及forbid_action的设置。

指令说明:http://tengine.taobao.org/document_cn/http_limit_req_cn.html

基于nginx的Senginx分支的ngx_http_limit_req_module

指令说明:http://www.senginx.org/cn/index.php/%E5%9F%BA%E4%BA%8E%E6%9D%A1%E4%BB%B6%E7%9A%84%E9%99%90%E9%80%9F%E5%8A%9F%E8%83%BD

称之为基于条件的限速功能,在Tenginer的limit_req模块基础上,增加condition参数,在条件为真时执行限制动作。

基于nginx的Senginx分支的ngx_http_ip_behavior

指令说明:http://www.senginx.org/cn/index.php/%E8%AE%BF%E9%97%AE%E8%A1%8C%E4%B8%BA%E8%AF%86%E5%88%AB%E6%A8%A1%E5%9D%97

称之为行为识别模块,访问行为识别模块的作用是对用户访问网站的行为进行监控

基于nginx的Senginx分支的ngx_http_robot_mitigation

指令说明:http://www.senginx.org/cn/index.php/Robot_Mitigation%E6%A8%A1%E5%9D%97

称之为HTTP机器人缓解,Robot Mitigation模块采用了一种基于“挑战”的验证方法,即向客户端发送特定的、浏览器能解析的应答,如果客户端是真实的浏览器,则会重新触发请求, 并带有一个特定的Cookie值,Robot Mitigation模块会依据此Cookie的信息来决定是否放行此请求。

最后

基于上述的场景、特征、nginx限制模块的调研和分析,我们完全可以通过灵活的nginx配置来解决CC攻击威胁。使用了Senginx,灵活运用基于条件的限速功能,行为识别模块,机器人缓解模块。今天先聊到这儿,后续会总结出本文提到的很多技术细节。

转载于:https://my.oschina.net/xiehongfei/blog/482476

电商抢购秒杀系统的设计_1_应用场景分析相关推荐

  1. 电商网站秒杀系统如何设计

    一. 秒杀活动带来的挑战: 1. 对现有网站构成冲击 2. 高并发下应用服务器,数据库服务器的负载 3. 突然增大的网络及服务器带宽 4. 防止直接下单 二. 秒杀活动应对策略: 1. 秒杀系统独立部 ...

  2. Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战

    Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战 Java生鲜电商平台-  什么是秒杀 通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动 比如说京东秒杀,就是一种定时定量秒杀,在规定 ...

  3. 电商平台-“秒杀”系统技术难题及解决方案

    电商平台-"秒杀"系统技术方案 文章目录 电商平台-"秒杀"系统技术方案 前言 一.什么是秒杀? 二.秒杀的技术难点? 1.避免对现有网站的冲击 2.高效解决网 ...

  4. java 超卖_Java生鲜电商平台-秒杀系统如何防止超买与超卖?(小程序/APP)

    本文主要是通过实际代码讲解,帮助你一步步搭建一个简易的秒杀系统.从而快速的了解生鲜电商秒杀系统的主要难点,并且迅速上手实际项目. 我对生鲜电商秒杀系统文章的规划: 从零开始打造简易秒杀系统:乐观锁防止 ...

  5. 电商平台 高并发 微服务 方案_Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战...

    Java生鲜电商平台- 什么是秒杀 通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动 比如说京东秒杀,就是一种定时定量秒杀,在规定的时间内,无论商品是否秒杀完毕,该场次的秒杀活动都会结束.这种 ...

  6. 尚硅谷-谷粒商城-电商项目-秒杀系统-笔记

    商城项目简介 项目主要实现了一个模拟电商的分布式秒杀系统,核心模块包括注册登录模块.订单模块.秒杀模块. 框架是spring一套,用到的组件包Nignx服务器,redis,Mysql数据库,rabbi ...

  7. 依赖治理、灰度发布、故障演练,阿里电商故障演练系统的设计与实战经验

    2019独角兽企业重金招聘Python工程师标准>>> 2016 年,阿里巴巴研发了故障演练系统,把故障以场景化的方式沉淀到系统中,在线上主动回放故障,验证监控报警.限流降级.故障迁 ...

  8. asp.net904-中小型电商企业财务预算系统

    项目编号:asp.net904-中小型电商企业财务预算系统 运行环境: 开发工具:VS2010及以上版本 数据库:SQL2008及以上版本 使用技术:HTML+JS+HTML 开发语言:C# 我国现代 ...

  9. [转载]电商网站秒杀与抢购的系统架构

    [自己在其他资料上看到的,然后做了个小笔记(画图做的笔记)] [以下是转发内容] 原文:电商网站秒杀与抢购的系统架构 一.大规模并发带来的挑战 在过去的工作中,我曾经面对过5w每秒的高并发秒杀功能,在 ...

最新文章

  1. Laravel Predis Error while reading line from the server.
  2. PNAS:亚马逊雨林向农业的转变导致土壤细菌群落的生物均质化
  3. 与应用程序松耦合的报表开发组织
  4. python的用途-python“ with”语句的用途是什么?
  5. Windows XP中防火墙后如何实现共享(图)
  6. VTK修炼之道14:图像处理_创建
  7. python pytorch自定义_PyTorch使用自定义模块创建数据模型
  8. SpringBoot-@ComponentScan、@Import
  9. c语言程序中return的作用,单片机C语言程序中return dat 什么意思
  10. c++ 查找文件夹下最新创建的文件_云计算开发总结:搜索Linux文件和文件夹的方法...
  11. 腾讯回应 QQ 被工信部通报;由微软老兵领导,Facebook 开发新操作系统;Node.js 13.4.0 发布 | 极客头条...
  12. 在xml里追加结点时添加回车(libxml2)
  13. 如何在Eclipse配置Tomcat
  14. 力胜机器人_德男子两手臂尺寸悬殊 超粗右臂曾力胜掰手腕机器人
  15. 基于java的飞机大战雷电游戏的开发与设计#毕业设计
  16. jQuery实现动态添加删除表格的行
  17. 开始学习ruby,对此语言的简介
  18. 计算机常用计算单位换算关系,计算机单位换算
  19. OSC 第 130 期高手问答 — 究竟什么才是微服务?_黄勇【摘选】
  20. 未找到beta版怎么解决_Chrome这设计硬伤实在太难用!用它完美解决

热门文章

  1. 原创,真正解决iframe高度自适应的问题.兼容各浏览器
  2. Python开发【第三篇】:文件操作与函数
  3. 赛灵思PLL重配置一PLL配置介绍___S6器件族
  4. ubuntu16.04 安装 eclipse
  5. 请教context:component-scan/和mvc:annotation-driven/的区别20
  6. 基于群集的Hyper-v Server副本
  7. Hadoop之父Doug Cutting
  8. 企业运营对 DevOps 的「傲慢与偏见」
  9. MyEclipse+Tomcat部署发布webapp
  10. 大盘过4000,注意风险~