秒杀系统的设计五大原则
最近订阅了 极客时间 | 如何设计一个秒杀系统,这里是每章的学习笔记。
链接:如何设计一个秒杀系统
架构原则: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下,整个系统的瓶颈会在什么地方,要针对这起瓶颈来重新设计架构方案。
秒杀系统的设计五大原则相关推荐
- 面试必备:一个秒杀系统的设计思考
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:阿哲 segmentfault.com/a/11900000 ...
- 一个秒杀系统的设计思考
简介:从架构视角来看,秒杀系统本质是一个高性能.高一致.高可用的三高系统.而打造并维护一个超大流量的秒杀系统需要进行哪些关注,就是本文讨论的话题. 秒杀大家都不陌生.自2011年首次出现以来,无论是双 ...
- 第一百一十一期:思考 | 一文说透秒杀系统如何设计
秒杀大家都不陌生.自2011年首次出现以来,无论是双十一购物还是 12306 抢票,秒杀场景已随处可见.简单来说,秒杀就是在同一时刻大量请求争抢购买同一商品并完成交易的过程.从架构视角来看,秒杀系统本 ...
- 经验:一个秒杀系统的设计思考
点击上方「蓝字」关注我们 前言 秒杀大家都不陌生.自2011年首次出现以来,无论是双十一购物还是 12306 抢票,秒杀场景已随处可见.简单来说,秒杀就是在同一时刻大量请求争抢购买同一商品并完成交易的 ...
- 一个秒杀系统的设计思考(整体思考,收藏了)
作者:阿哲 来源:https://segmentfault.com/a/1190000020970562 前言 秒杀大家都不陌生.自2011年首次出现以来,无论是双十一购物还是 12306 抢票,秒杀 ...
- 系统架构设计——秒杀系统架构设计
摘要 秒杀大家都不陌生.自2011年首次出现以来,无论是双十一购物还是 12306 抢票,秒杀场景已随处可见.简单来说,秒杀就是在同一时刻大量请求争抢购买同一商品并完成交易的过程.从架构视角来看,秒杀 ...
- 浅谈秒杀系统架构设计
秒杀是电子商务网站常见的一种营销手段. 原则 不要整个系统宕机. 即使系统故障,也不要将错误数据展示出来. 尽量保持公平公正. 实现效果 秒杀开始前,抢购按钮为活动未开始. 秒杀开始时,抢购按钮可以点 ...
- 高并发秒杀系统如何设计?
前言 秒杀大家都不陌生.自2011年首次出现以来,无论是双十一购物还是 12306 抢票,秒杀场景已随处可见.简单来说,秒杀就是在同一时刻大量请求争抢购买同一商品并完成交易的过程. 从架构视角来看,秒 ...
- 【学习笔记】秒杀系统架构设计
秒杀其实主要解决两个问题 并发读 VS 并发写 并发读的核心优化理念是尽量减少用户到服务端来"读"数据,或者让他们读更少的数据 并发写的处理原则也一样,它要求我们在数据库层面独立出 ...
最新文章
- GDAL2.1.1库在Ubuntu14.04下编译时遇到的问题处理方法
- 有钱任性!字节跳动又给员工发钱了!字节程序员:吓一跳,莫名其妙多了几万块!...
- 小学生计算机课堂实践的重要性,浅谈小学信息技术教育重要性.doc
- 【HDU - 5934】Bomb (强连通分量Tarjan + 缩点)
- Spring的AOP-基本概念
- 为什么你写作赚不到钱?
- abb伺服电机如何进行挑选_PLC是怎么控制伺服电机的?如何设计一个伺服系统?...
- python安装mysql模块_Python:使用pip安装MySQL-python模块
- 【生信分析】clusterProfiler: universal enrichment tool for functional and comparative study(2)
- 音量放大器--软件实现
- Ragel-基于有限状态机用于产生源码的编译器
- 继电器互锁功能的实现
- python爬虫——40行代码爬取「笔趣看」全部小说
- 灵动ICPC冬令营基础-5
- Windows10正式版为什么没有休眠选项?
- 微信公众平台对接C#-普通消息接收
- php微信授权ajax,ajax 实现微信网页授权登录
- hive登录失败的问题解决
- 空间数据挖掘中的Skyline查询
- linux刻录光驱是哪个好,Linux中使用mkisofs或genisoimage刻录光盘
热门文章
- 我和CSDN的故事(CDSN成立20周年———准程序员响应号召)
- 情人节送玫瑰花数的含义,男的必看。(转)
- you belong with me(你属于我)
- 计算机学院心理节活动,计算机学院举办系列心理健康教育活动
- 国外最大的购物搜索/比较购物网站
- AJAX框架眼镜店活动,眼镜店节日促销H5的活动方案有哪些?快来看看吧!
- 第6章 - 多无人车系统的协同控制 --> 多无人车协同控制
- 初链:高性能去中心化公开账本
- 基于虚拟机Ubuntu系统下C语言简单编写程序
- 苹果语音备忘录怎么改名字_苹果手机语音备忘录怎么恢复?教你在手机上直接操作...