最近订阅了 极客时间 | 如何设计一个秒杀系统,这里是每章的学习笔记。

链接:如何设计一个秒杀系统

架构原则:4要 1 不要!

1、数据要尽量少。

2、请求数要尽量少。

3、请求路径要短。

4、依赖要尽量少。

5、不要有单点。

数据要尽量少:

1. 是指用户请求的数据能少就少,请求包括给系统发的request 及 response 。

因为 这些 request 和 response 在网络上传输要时间,都要服务器来做处理,还要对数据进行压缩和字符编码。

减少网络的 IO 及 CPU 的使用

2. 想要获取数据难免从其他的服务 或者是 数据库 获取数据。

从其他服务获取数据几乎都需要进行序列化和反序列化的操作。(这是比较消耗CPU 的操作了)

访问数据库就更容易是瓶颈了。(从磁盘读数据 及 IO

请求数要尽量少:

用户的请求返回后,浏览器还需要渲染整个页面,那么这个页面所依赖的 CSS 、JS 、 图片等文件就可以定义为是 “额外请求”。

这些“额外请求”要尽可能的少,因为浏览器每发出一个请求都多少会有一些消耗。(连接要进行三次握手及  域名的解析 DNS

路径要短:

路径的定义是:从用户发起请求到返回数据的这个过程中,请求经过了几台服务器。

每增加一个系统或者是一个新的 Socket 连接,都会增加请求的耗时。

缩短访问路径有一个办法就是减少系统的复杂度,将跨进程(服务)的调用改成 在同一个进程中。

把远程调用(RPC) 改成 JVM 内部之间的方法调用。 这样可以减少数据的序列化的时间 及 减少 网络之间的 IO 。

依赖要尽量少:

依赖:用户发起的请求要依赖的系统或者服务,这里着重强调 “强依赖”。

举个例子:比如说秒杀的页面依赖了商品信息(强依赖),但还有一些优惠券信息,交易列表信息这些都不是必要的信息(弱依赖),那这些弱依赖就可以去掉。

要减少依赖,我们可以给系统进行分级,比如 0 级系统、1 级系统、2 级系统、3 级系统,0 级系统如果是最重要的系统,那么 0 级系统强依赖的系统也同样是最重要的系统,以此类推。

注意,0 级系统要尽量减少对 1 级系统的强依赖,防止重要的系统被不重要的系统拖垮。
例如支付系统是 0 级系统,而优惠券是 1 级系统的话,在极端情况下可以把优惠券给降级,防止支付系统被优惠券这个 1 级系统给拖垮。

不要有单点:

单点:单机部署。

单点意味着没有备份,风险不可控,一旦单点出问题,整个服务将不可用。

这些设计原则都只是尽量而非绝对。

因为是不同的业务场景下会有不同的流量进来,根据不同的流量从简单到复杂来打造我们的系统是很有必要的。

这里并没有说缓存用什么,消息队列用什么,具体的解决方案又是什么。因为这些对于架构师来说并不重要。作为架构师来说主线是设计,具体的实现是 高级开发的事 (开个玩笑皮一下哈哈哈哈

最后照抄一下评论:

高并发系统的几大方向

1.请求数据尽量少,从而减少cpu消耗

2.访问路径尽量短,减少节点消耗

3.强依赖尽量少,减少加载时间

4.不要有单点,要有备份

5.减少额外请求,减少加载时间

架构升级的逻辑要具体问题具体分析的

例如秒杀的场景来说,不同QPS量级下瓶颈也会不一样,10w级别可能瓶颈就在数据读取上,通过增加缓存一般就能解决,如果要到100w那么,可能服务端的网络可能都是瓶颈,所以要把大部分的静态数据放到cdn上甚至缓存在浏览器里

所以要做架构升级,还是主要要分析在预估的QPS下,整个系统的瓶颈会在什么地方,要针对这起瓶颈来重新设计架构方案。

秒杀系统的设计五大原则相关推荐

  1. 面试必备:一个秒杀系统的设计思考

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:阿哲 segmentfault.com/a/11900000 ...

  2. 一个秒杀系统的设计思考

    简介:从架构视角来看,秒杀系统本质是一个高性能.高一致.高可用的三高系统.而打造并维护一个超大流量的秒杀系统需要进行哪些关注,就是本文讨论的话题. 秒杀大家都不陌生.自2011年首次出现以来,无论是双 ...

  3. 第一百一十一期:思考 | 一文说透秒杀系统如何设计

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

  4. 经验:一个秒杀系统的设计思考

    点击上方「蓝字」关注我们 前言 秒杀大家都不陌生.自2011年首次出现以来,无论是双十一购物还是 12306 抢票,秒杀场景已随处可见.简单来说,秒杀就是在同一时刻大量请求争抢购买同一商品并完成交易的 ...

  5. 一个秒杀系统的设计思考(整体思考,收藏了)

    作者:阿哲 来源:https://segmentfault.com/a/1190000020970562 前言 秒杀大家都不陌生.自2011年首次出现以来,无论是双十一购物还是 12306 抢票,秒杀 ...

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

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

  7. 浅谈秒杀系统架构设计

    秒杀是电子商务网站常见的一种营销手段. 原则 不要整个系统宕机. 即使系统故障,也不要将错误数据展示出来. 尽量保持公平公正. 实现效果 秒杀开始前,抢购按钮为活动未开始. 秒杀开始时,抢购按钮可以点 ...

  8. 高并发秒杀系统如何设计?

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

  9. 【学习笔记】秒杀系统架构设计

    秒杀其实主要解决两个问题 并发读 VS 并发写 并发读的核心优化理念是尽量减少用户到服务端来"读"数据,或者让他们读更少的数据 并发写的处理原则也一样,它要求我们在数据库层面独立出 ...

最新文章

  1. GDAL2.1.1库在Ubuntu14.04下编译时遇到的问题处理方法
  2. 有钱任性!字节跳动又给员工发钱了!字节程序员:吓一跳,莫名其妙多了几万块!...
  3. 小学生计算机课堂实践的重要性,浅谈小学信息技术教育重要性.doc
  4. 【HDU - 5934】Bomb (强连通分量Tarjan + 缩点)
  5. Spring的AOP-基本概念
  6. 为什么你写作赚不到钱?
  7. abb伺服电机如何进行挑选_PLC是怎么控制伺服电机的?如何设计一个伺服系统?...
  8. python安装mysql模块_Python:使用pip安装MySQL-python模块
  9. 【生信分析】clusterProfiler: universal enrichment tool for functional and comparative study(2)
  10. 音量放大器--软件实现
  11. Ragel-基于有限状态机用于产生源码的编译器
  12. 继电器互锁功能的实现
  13. python爬虫——40行代码爬取「笔趣看」全部小说
  14. 灵动ICPC冬令营基础-5
  15. Windows10正式版为什么没有休眠选项?
  16. 微信公众平台对接C#-普通消息接收
  17. php微信授权ajax,ajax 实现微信网页授权登录
  18. hive登录失败的问题解决
  19. 空间数据挖掘中的Skyline查询
  20. linux刻录光驱是哪个好,Linux中使用mkisofs或genisoimage刻录光盘

热门文章

  1. 我和CSDN的故事(CDSN成立20周年———准程序员响应号召)
  2. 情人节送玫瑰花数的含义,男的必看。(转)
  3. you belong with me(你属于我)
  4. 计算机学院心理节活动,计算机学院举办系列心理健康教育活动
  5. 国外最大的购物搜索/比较购物网站
  6. AJAX框架眼镜店活动,眼镜店节日促销H5的活动方案有哪些?快来看看吧!
  7. 第6章 - 多无人车系统的协同控制 --> 多无人车协同控制
  8. 初链:高性能去中心化公开账本
  9. 基于虚拟机Ubuntu系统下C语言简单编写程序
  10. 苹果语音备忘录怎么改名字_苹果手机语音备忘录怎么恢复?教你在手机上直接操作...