秒杀系统的设计五大原则

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

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

架构原则: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下,整个系统的瓶颈会在什么地方,要针对这起瓶颈来重新设计架构方案。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券