时间:2021年08月27日

作者:小蒋聊技术

大家好,欢迎来到小蒋聊技术。小蒋准备和大家一起聊聊技术的那些事。

在互联网高速发展的今天,大家已经习惯了一个又一个的便捷互联网服务在改变着我们的生活。出门买东西不用带钱,直接扫个码支付。饿了直接手机下个单,外卖就有人直接送上门。家里缺的日用品,电商直接买,不但东西品类多,价格还实惠。这些互联网服务真是棒!

所以,这几年互联网服务的用户数是越来越多。也正是因为这越来越多的用户,使得这些便捷的互联网服务的压力变得也越来越大,高并发的场景几乎无处不在。互联网公司为了让用户能有一个优质的使用体验,解决高并发的问题就显得尤为突出了。小蒋今天准备和朋友们,一起来看看高并发下的系统架构设计,以及在真实的业务中遇到的各种常见问题。

说到高并发,我们常见的“秒杀活动”和“抢购活动”是两个比较典型的业务场景。小蒋接下来和大家一起来分析看看,电商系统中的秒杀业务究竟是怎么做的。

秒杀业务特点

说到“秒杀”,咱得先来说这个业务特点。那什么是秒杀,秒杀就是一件商品购买的人数远远大于这个商品的库存。这个商品开卖的瞬间就被抢购一空。每年的618、双11、iphone新产品发布 等业务场景,这就是典型的秒杀。

咱举例说明:

618期间,某电商平台促销,领劵叠加方式可降价1400元买到一个全新的iphone 12,这个电商平台以远低于市场平均的价格在销售。那朋友们想一想,接下来会发生什么事呢?

  1. 在开始领券的时候,大量用户会在同一时间同时抢购,访问量和并发量会瞬间激增。
  2. ​​​​​​​​​​​​因为优惠券库存量远远小于想要领取的用户数,所以系统呈现读多写少的业务特点。
  3. 因为优惠力度大,电商平台在前期进行了大幅推广,优惠券瞬间售空。

​​​​​​​

秒杀业务对架构设计上的挑战

“秒杀”从营销层面上来说是一个赔本赚吆喝的活动。以极低的价格吸引用户的流量,再通过部分流量的转化变为二次销售或再次销售。

  • 对现有业务以及相关基础设施的冲击

秒杀活动具有时间短,但访问量特别大的特点。如果不在架构上进行提前防范,那原有系统将会直接面临流量上的巨大冲击,与黑客的DDos(分布式拒绝服务)攻击非常相似,稍有不慎可能会导致整个网站瘫痪。

解决策略:“隔离”。

方法:

案例中的某电商平台选择了:

  1. 业务隔离,优惠券业务与商品下单从业务上就剥离了。即使优惠券业务因为某些问题导致系统宕机,后果就是用户领不到优惠券了,依旧不会影响正常的商品购买,大不了秒杀活动不做了呗。别因为秒杀活动,直接导致电商平台整个系统宕机,影响到了正常业务的开展。
  2. 技术隔离,秒杀业务的相关系统完全独立部署,例如,Web服务署隔离,域名隔离,中间件集群隔离,例如Redis、MQ、Zookeeper等独立部署。确保秒杀业务的大流量不会干扰其他业务的正常运行。
  • 大流量下高并发对服务(Web服务、API服务、中间件服务)数据库(DB的冲击

要怎么理解业务服务呢,业务服务究竟有什么区别呢?这个事情咱先要搞清楚,然后小蒋再往下说。

咱举例说明,电商的核心交易部分中业务有:

  1. 购物车业务
  2. 下单业务
  3. 付款业务
  4. 库存业务
  5. 优惠业务
  6. 地址业务
  7. 订单管理业务
  8. 退款业务
  9. ……

把每一个业务组合起来形成一个复杂而又完整的电商系统。

但是每一个业务背后,其实有很多技术的服务在支撑。例如上面例子里的优惠券业务。

支撑优惠券业务的服务有:

  1. 优惠券显示服务(Nginx、Apache、Caddy、……)
  2. 网关服务(Zuul、Tyk、Kong、……)
  3. 优惠券查询服务(Dubbo、Spring Cloud、Srping boot、……)
  4. 数据库服务(MySql、Oracle、TIDB)
  5. 基础中间件服务(Redis、MQ、Zookeeper、……)
  6. 大数据服务(Hadoop、Spark、Hive、……)
  7. ……

这些服务在支持着一个业务正常的运行。

咱们聊完了业务和服务的区别后,回来继续说秒杀。

用户在“秒杀”活动开始之前的3分钟左右,就已经开始不停的进行刷新,谁都不会想错过如此低廉价格的秒杀活动。无论是网页端还是手机App端,由于不停刷新而带来的大流量就像洪水袭击一般冲击着我们的各种服务集群。

解决策略:堵不如疏

如洪水一般大的流量,我们的堤坝再高,硬件系统再强也很难抵御住如此大的冲击。与其被动防御,不如主动进攻,从源头开始治理这些流量,把这如洪水般的流量遏制在萌芽中。把这些巨大的流量,分而治之。用合理的成本对应瞬时飙高的峰值请求,且确保秒杀活动整个过程中的系统容量的可伸缩性、用户响应时间的稳定性、以及外部依赖系统出现问题时的高可用性。

方法:

系统静态化、建立缓存体系、内容CDN化。

通过将页面中的内容按业务进行分类分区,按商家、用户、时间、地域等信息维度分析,提取页面内容中相对公共,没有依赖关系的那部分数据,且变化频率低的内容,生成静态化基础内容。静态化内容URL地址是确定的,这样可以直接存入缓存。其他动态内容通过异步接口调用填充。拿优惠券为例,可静态化的基础数据有:优惠券标题、优惠券详情信息、领取规则等。这些信息均可以静态化,直接存入缓存。其他个性化内容,如当前登录用户是否可领取优惠券,库存,已领取数量等动态信息则通过异步接口调用方式填充至静态化页面。

这些静态化的内容被存入了各种类型的缓存,如应用服务缓存、Web服务缓存、CDN缓存、客户端浏览器缓存,它们分别承载着不同的使命。这样我们就通过了架构的升级改造,就把流量分而治之,从根本上提高了系统效率,降低了每个系统的并发访问压力。而不只是仅仅依靠单纯的水平扩容机制,不断通过堆叠硬件的方式,去解决秒杀带来的井喷式的流量增长。

上面的解决方案听起来似乎不太难,但是有很多落地的细节是需要工时的  ,这个过程背后的开发工作量却不小。

静态化架构的升级工作,天猫商城是从2011年开始进行规划,2013年底彻底完成的。小蒋当时也身处电商行业,与天猫商城是有技术交流的。天猫历时了3年才彻底做到了商城系统CDN化。又通过了很长一段时间的系统调优,才有效解决了缓存命中率、流量自然分布、系统扩容简化、用户端响应速度可控等关键问题。

互联网公司解决问题的技术方案可能千差万别的,但是遇到的难点和挑战通常是相似的,所以解决问题的思路也是大致相似的。大家要抓住问题的核心,别去纠结技术细节上的差别。

另外,秒杀系统中还会经常遇到各问题和系统Bug,比如商品超卖、缓存数量与数据库库存不一致、数据的高可用性等。这些常见的问题和解决方案小蒋会在下一次的内容中与大家分享并一起探讨。

年龄的增长不可怕,可怕的是从未成长。

感谢大家支持小蒋,小蒋想和大家共同成长,谢谢。

音频地址:https://www.ximalaya.com/keji/51588599/448399382

【20210827】【系统设计】“秒杀系统”架构设计分析相关推荐

  1. 网购秒杀系统架构设计分析

    秒杀活动的技术挑战 ### 对现有网站业务造成冲击 ### 秒杀活动只是网站营销的一个附加活动,特点是:时间短.并发访问量大,如果和网站原有应用部署在一起,必然会对现有业务造成冲击. 解决方案:将秒杀 ...

  2. 系统架构设计——秒杀系统架构设计

    摘要 秒杀大家都不陌生.自2011年首次出现以来,无论是双十一购物还是 12306 抢票,秒杀场景已随处可见.简单来说,秒杀就是在同一时刻大量请求争抢购买同一商品并完成交易的过程.从架构视角来看,秒杀 ...

  3. 00 如何设计一个秒杀系统——秒杀系统架构设计都有哪些关键点

    一.如何理解秒杀系统 秒杀系统其实主要解决两个问题,一个是并发读,一个是并发写.并发读的核心优化理念是尽量减少用户到服务端来"读"数据,或者让他们读更少的数据:并发写的处理原则也一 ...

  4. 转:秒杀系统架构分析与实战

    原文出处: 陶邦仁   欢迎分享原创到伯乐头条 0 系列目录 秒杀系统架构 秒杀系统架构分析与实战 1 秒杀业务分析 正常电子商务流程 (1)查询商品:(2)创建订单:(3)扣减库存:(4)更新订单: ...

  5. 【转】秒杀系统架构分析与实战

    0 系列目录 秒杀系统架构 秒杀系统架构分析与实战 1 秒杀业务分析 正常电子商务流程 (1)查询商品:(2)创建订单:(3)扣减库存:(4)更新订单:(5)付款:(6)卖家发货 秒杀业务的特性 (1 ...

  6. 阿里双十一秒杀系统架构设计,有哪些技术关键点?

    马上要到双11了,就来谈谈如何设计一个秒杀系统架构 技术挑战 1. 对原有业务形成冲击 秒杀活动只是网站营销的一个附加活动,特点是:时间短.并发访问量大,如果和网站原有应用部署在一起,必然会对现有业务 ...

  7. 设计秒杀系统架构,这4个关键点要注意

    本文分享自华为云社区<秒杀系统架构设计都有哪些关键点?>,作者:JavaEdge . 0.目标 秒杀重复排队 重复排队:一个人抢购商品,若未支付,不准重复排队抢购 超卖问题 1个商品卖给多 ...

  8. 解密秒杀系统架构:不是所有的秒杀都是秒杀

    摘要:究竟什么样的系统算是高并发系统?今天,我们就一起解密高并发业务场景下典型的秒杀系统的架构. 本文分享自华为云社区<[高并发]秒杀系统架构解密,不是所有的秒杀都是秒杀(升级版)!!>, ...

  9. 秒杀系统架构设计与分析

    秒杀系统架构分析与实战 2016-01-18陶邦仁Qunar技术沙龙 1 秒杀业务分析 正常电子商务流程 (1)查询商品:(2)创建订单:(3)扣减库存:(4)更新订单:(5)付款:(6)卖家发货 秒 ...

最新文章

  1. Kafka史上最详细原理总结 ----看完绝对不后悔
  2. 擦除:提升 CNN 特征可视化的 3 种重要手段
  3. 利用MOG2背景模型提取运动目标的OpenCV代码
  4. RxJava 在Android中的应用(一)
  5. python软件下载中文版-PyCharm中文版
  6. BZOJ-3227 红黑树(tree) 树形DP
  7. CFEducational Codeforces Round 66题解报告
  8. 第五章 PCB 设计规则设置及 PCB 绘制
  9. [转载]自动化行业信讯_史蒂文森sun_新浪博客
  10. 江南大学c语言课程绩点评分,江南大学无锡医学院课程考核档案管理办法
  11. Win10系统盘瘦身
  12. JSHOP2学习3:基础语法(上)
  13. python编写五子棋小游戏 (电脑自走棋)
  14. 详解EBS接口开发之采购订单导入(转载)
  15. 数据分析师1.4量化交易策略的回测方法和技巧
  16. R语言环境安装及第三方包的下载地址及信息
  17. 前端面试合集,20k+已经是妥妥的了
  18. html css div自适应屏幕宽度,高度
  19. 三十九、Fluent时间步长的估算与库朗数
  20. 数据库基础知识(二)数据库分表技术

热门文章

  1. c++ 模糊搜索 正则表达式_模糊搜索算法(近似字符串匹配算法)
  2. 以智能钻井为例,深度解析数字油田的智能化建设
  3. 某公司申请到一个C类IP地址,但要连接6个的子公司,最大的一个子公司有 26台计算机,每个子公司在一个网段中,则子网掩码应设为?
  4. 附加Ken Burns特效的幻灯片
  5. 通用计算机与嵌入式的比较,嵌入式系统与通用计算机系统相比有什么特点?如题 谢谢了...
  6. JSF seam 中使用UEditor
  7. Dashgo D1使用手册
  8. 无线网卡(RTL8188EU)驱动编译、使用DHCP配置无线网络(1
  9. Hadoop实战应用
  10. 前端700行代码项目练习--小米官网(仅html、css实现)