一、 秒杀系统架构设计都有哪些关键点?

说实话,作为一名程序员,我的技术能力也在公司业务的快速增长过程中得到了历练,并积累了一些大流量高并发网站架构设计和优化的经验,尤其是针对“秒杀”这个场景。因为我确信,那个时候我们肯定是对系统做了足够多的极致优化,才能扛住当时洪峰般的流量请求。

记得早期的时候,淘宝商品详情系统的 PV 还差不多是 1 亿的样子,但是到2016 年差不多已经升至 50 亿了。尤其是 2012 年到 2014 年那个时间段,“秒杀”活动特别流行,用户的参与热情一浪高过一浪,系统要面对的流量也是成倍增长。

而每一次的秒杀活动对技术团队来说都是一次考验。现在想起来,那个时候我们整个团队,无所畏惧,逐步迭代创新,然后解决一个个难题的过程,也是极具挑战性和成就感的事情。

记得有一年,为了应对“双十一”,我们整个商品详情团队对系统做了很多优化,我们自认为已经是整个公司最牛的系统了,性能也已经是“业界之巅”。

但是那年“双十一”的晚上,我们的系统还是遇到了瓶颈。当时老大就跑过来盯着我们,问我们什么时候能够恢复,我们整个团队都承担着巨大的心理压力。事后我们复盘宕机的原因,发现当时的秒杀流量远远超过了我们的预想,我们根本没想到大家的参与热情能有那么高。于是我们按照这个增长率去预估下一年的流量和服务器,粗算下来,我记得差不多要增加 2000 台服务器,简直不可思议。

怎么可能真正增加这么多机器,所以这也就倒逼我们必须找出一些特殊的手段来优化系统。后面,经过一段时间的调研和分析,我们想到了把整个系统进行动静分离改造的解决方案。

秒杀系统也差不多那个时候才从商品详情系统独立出来成为一个独立产品的。因为我见证了秒杀系统的建设过程,所以也有颇多感慨。秒杀系统的迭代又是一个升级打怪的过程,我们也都是遇到问题解决问题,逐一优化。

那么,如何才能更好地理解秒杀系统呢?我觉得作为一个程序员,你首先需要从高维度出发,从整体上思考问题。在我看来,秒杀其实主要解决两个问题,一个是并发读,一个是并发写。并发读的核心优化理念是尽量减少用户到服务端来“读”数据,或者让他们读更少的数据;并发写的处理原则也一样,它要求我们在数据库层面独立出来一个库,做特殊的处理。另外,我们还要针对秒杀系统做一些保护,针对意料之外的情况设计兜底方案,以防止最坏的情况发生。

而从一个架构师的角度来看,要想打造并维护一个超大流量并发读写、高性能、高可用的系统,在整个用户请求路径上从浏览器到服务端我们要遵循几个原则,就是要保证用户请求的数据尽量少、请求数尽量少、路径尽量短、依赖尽量少,并且不要有单点。这些关键点我会在后面的文章里重点讲解。

其实,秒杀的整体架构可以概括为“稳、准、快”几个关键字。

所谓“稳”,就是整个系统架构要满足高可用,流量符合预期时肯定要稳定,就是超出预期时也同样不能掉链子,你要保证秒杀活动顺利完成,即秒杀商品顺利地卖出去,这个是最基本的前提。

然后就是“准”,就是秒杀 10台iPhone,那就只能成交 10 台,多一台少一台都不行。一旦库存不对,那平台就要承担损失,所以“准”就是要求保证数据的一致性。

最后再看“快”,“快”其实很好理解,它就是说系统的性能要足够高,否则你怎么支撑这么大的流量呢?不光是服务端要做极致的性能优化,而且在整个请求链路上都要做协同的优化,每个地方快一点,整个系统就完美了。

所以从技术角度上看“稳、准、快”,就对应了我们架构上的高可用、一致性和高性能的要求,我们的专栏也将主要围绕这几个方面来展开,具体如下。

高性能。 秒杀涉及大量的并发读和并发写,因此支持高并发访问这点非常关键。本专栏将从设计数据的动静分离方案、热点的发现与隔离、请求的削峰与分层过滤、服务端的极致优化这 4 个方面重点介绍。

一致性。 秒杀中商品减库存的实现方式同样关键。可想而知,有限数量的商品在同一时刻被很多倍的请求同时来减库存,减库存又分为“拍下减库存”“付款减库存”以及预扣等几种,在大并发更新的过程中都要保证数据的准确性,其难度可想而知。因此,我将用一篇文章来专门讲解如何设计秒杀减库存方案。

高可用。 虽然我介绍了很多极致的优化思路,但现实中总难免出现一些我们考虑不到的情况,所以要保证系统的高可用和正确性,我们还要设计一个PlanB 来兜底,以便在最坏情况发生时仍然能够从容应对。专栏的最后,我将带你思考可以从哪些环节来设计兜底方案。

最后,很幸运能在极客时间遇到你,希望这堂课能让你彻底理解大并发、高性能、高可用秒杀系统的设计之道,并能够在思考解决类似问题时有更准确的思考和判断。

二、 设计秒杀系统时应该注意的5个架构原则

三、如何才能做好动静分离?有哪些方案可选?

​四、二八原则:有针对性地处理好系统的“热点数据"

五、流星削峰这事应该怎么做?

​六、影响性能的因素有哪些?又该如何提高系统的性能?

​七、秒杀系统减库存”设计的核心逻辑

​八、如何设计兜底方案?

阿里巴巴的“双11”高并发秒杀终极版教程(Java语言设计)相关推荐

  1. 京东的“618”高并发秒杀终极版教程(Java 语言设计)

    一. 秒杀系统架构设计都有哪些关键点? 说实话,作为一名程序员,我的技术能力也在公司业务的快速增长过程中得到了历练,并积累了一些大流量高并发网站架构设计和优化的经验,尤其是针对"秒杀&quo ...

  2. 96秒100亿!如何抗住双11高并发流量?

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"加入公众号专属技术群 来源:uee.me/c9UsN 今年双 11 全民购物狂欢 ...

  3. 第一百一十二期:96秒100亿!如何抗住双11高并发流量?

    今年双 11 全民购物狂欢节进入第十一个年头,1 分 36 秒,交易额冲到 100 亿 !比 2018 年快了近 30 秒,比 2017 年快了近 1 分半!这个速度再次刷新天猫双 11 成交总额破 ...

  4. kong网关从入门到精通_可能国内最好的网关开源项目,支持 Dubbo、SpringCloud,经历多年双11高并发的场景验证

    Soul 网关自从去年10月我开源以来,经历了一年的事情,接受到了来自社区很多朋友的建议,并进行持续不断的优化,已经提供了非常丰富的功能,很多功能都是高度自定义,可视化,高度可扩展的,现在做一个归纳总 ...

  5. 淘宝双11高并发架构是怎么设计的?看完这篇你就知道了!

    V-xin:ruyuanhadeng获得600+页原创精品文章汇总PDF 目录 一.一道面试题的背景引入 二.先考虑一个最简单的系统架构 三.系统集群化部署 四.数据库分库分表 + 读写分离 五.缓存 ...

  6. 千万级高并发秒杀系统设计套路!超详细解读~~

    曾经有一家巨头公司和我们公司进行战略合作,经过双方的不懈努力及精诚合作,双方公司决定共同举办一场秒杀活动,我们公司提供优质商品和强有力的吸引价格以及使用场景,对方公司提供巨大的用户流量,再加上我们公司 ...

  7. 阿里巴巴内部“亿级高并发系统架构”全彩手册开源

    写在前面 金三银四招聘季来了,不知道大家有没有发现一件事,现在不管是互联网大厂,还是初创公司,那些面试官总喜欢拿高并发和你说事. 即使,他们公司的业务量只有几万的QPS,但是就想拿这个来考考你,看看你 ...

  8. 实战分布式之电商高并发秒杀场景总览

    前言 本文是新系列"实战高并发"的开篇作.这个系列作为"我说分布式"的子系列,将着重挑选若干典型的分布式实战场景,尽量对当下高并发领域较为热门的架构及业务场景做 ...

  9. 阿里双11高可用架构演进之路

    阿里巴巴平台的业务规模在过去的8年呈指数级增长,给双11所带来的技术挑战是世界性的,特别是如何在零点峰值到来时确保系统的稳定性.零点技术挑战的本质是用有限的成本去实现最大化的集群整体吞吐能力和最佳的用 ...

最新文章

  1. 2021年大数据常用语言Scala(二十五):函数式编程 排序
  2. 一步步学习SpringBoot(一) 快速搭建一个web
  3. Turtlebot3-burger使用时一些注意事项
  4. makefile的命令包定义及使用
  5. Floyd-傻子也能看懂的弗洛伊德算法
  6. 计算机组成原理设计一个Isa,计算机组成原理
  7. php简单论坛登录注册,php简单登录注册验证
  8. 极具设计感的专辑分类设计,给你带来不一样的灵感
  9. Video和Audio标签的使用
  10. 7-7自动色阶/自动对比度/自动颜色
  11. [转载] 高大上的 CSS 效果:Shape Blobbing
  12. 计算机设备如何巡检,计算机联锁设备巡检作业指导书.pdf
  13. c语言输入一个整数打印出它是奇数还是偶数,1. 编写程序,输入一个整数,打印出它是奇数还是偶数....
  14. 充电桩市场与发展前景分析
  15. 服务器芯片市场容量,未来内存接口芯片市场规模 使用内存接口芯片的服务器内存模组主要有寄存内存模组(RDIMM)和减载内存模组(LRDIMM)两种。RDIMM需要一颗寄... - 雪球...
  16. Oracle05:什么是OCP认证
  17. 关于如何在Matlab中构造三维几何,以及三棱柱实例演示
  18. 零基础入门学习Python--永久存储:腌制一缸美味的泡菜
  19. 删除U盘上的EFI分区
  20. python音乐库_python - 网易云音乐的 Python 组件库

热门文章

  1. 响铃:跑错了道的VR,如何知途迷返
  2. 【NOIP普及组】 1945:【09NOIP普及组】多项式输出
  3. RocketMQ 解决 No route info of this topic 异常步骤
  4. 用outook发邮件能撤回吗?邮件怎么撤回技巧
  5. html5 可拖动悬浮按钮,前端vue开发:可移动的悬浮按钮的应用
  6. redis incr mysql_redis命令_INCR
  7. 有感而发:总结很重要
  8. C# throw new Exception的使用
  9. 教大家一个兼编辑和转换的快速看图软件免费使用方法
  10. 判断苹果手机系统版本 判断手机浏览器信息