秒杀架构-01秒杀架构设计5原则

秒杀架构-01秒杀架构设计5原则

01 | 秒杀的定义和本质

1、定义

1)秒杀是在同一时刻有大量的请求争抢同一个商品并完成交易的过程,用技术的行话来说就是大量的并发读和并发写。

2、本质

1)秒杀系统本质上就是一个满足大并发、高性能和高可用的分布式系统。

02 | 架构原则:“4要1不要”

1、导读

1)构建一个超大流量并发读写、高性能,以及高可用的系统需要考虑一些要素,现将这些要素总结为“4 要 1 不要”。

2、数据要尽量少

1. 首先是指用户请求的数据能少就少。
	1)请求的数据包括上传给系统的数据和系统返回给用户的数据(通常就是网页)2. 其次,还要求系统依赖的数据能少就少。
	2)包括系统完成某些业务逻辑需要读取和保存的数据,这些数据一般是和后台服务以及数据库打交道的。

3、请求数要尽量少

1)用户请求的页面返回后,浏览器渲染这个页面还要包含其他的额外请求(例如,CSS/JS、图片、Ajax)
2)减少请求数最常用的实践就是合并 CSS 和 JS 文件,把多个 JS 文件合并成一个文件。

4、路径要尽量短

1)路径:指用户发出请求到返回数据这个过程中,需要经过的中间节点数。
2)每增加一个连接都会增加新的不确定性。
3)缩短请求路径不仅可以增加可用性,同样可以有效提升性能(减少中间节点可以减少数据的序列化与反序列化),并减少延时(可以减少网络传输耗时)。
4)缩短路径访问的一种方法:将多个相互强依赖的应用合并部署在一起,把远程过程调用(RPC)变成 JVM 内部之间的方法调用。

5、依赖要尽量少

1)依赖:指要完成一次用户请求必须依赖的系统或者服务,这里的依赖指的是强依赖。
2)尽量减少核心系统对非核心系统的强依赖,防止核心系统被非核心系统拖垮。

6、不要有单点

1)单点是系统架构的大忌,单点意味着没有备份、风险不可控。
2)如何避免单点?避免将服务的状态和机器绑定,即把服务无状态化。

7、小结

1)架构是一种平衡的艺术,而最好的架构一旦脱离他所适应的场景,一切都将是空谈。

03 | 不同场景下的不同架构案例

1、不同请求体量下,秒杀系统架构的演进路线

2、简单秒杀系统

1)商品购买页面增加一个“定时上架”功能,仅在秒杀期间可以看到购买按钮。

3、复杂秒杀系统(请求量10w/s)

在这里插入图片描述

1)单独打造秒杀系统,方便优化
2)系统部署在独立的集群,防止影响正常商品集群的机器负载
3)热点数据(如库存)放缓存系统
4)增加秒杀答题,防止有秒杀器抢单

4、更加复杂秒杀系统(请求量100w/s)
在这里插入图片描述

1)页面进行动静分离
2)服务端对秒杀商品的静态数据(如商品描述信息)进行本地缓存
3)增加系统限流保护,防止最坏情况发生

04 | 小结

1、通用优化思路—“4要1不要”

1)数据要尽量少
2)请求数要尽量少
3)路径要尽量短
4)依赖要尽量少
5)不要有单点

2、注意

1)在不同性能要求的情况下,系统架构应该从哪几个方面去做取舍。
2)越追求极致性能,系统定制开发就会越多,同时系统的通用性也就会越差。
3)架构升级的逻辑要具体问题具体分析,做架构升级主要是分析在预估 QPS 下,整个系统的瓶颈会在什么地方,要针对这些瓶颈重新设计架构方案。
4)10w/s 级别可能瓶颈在数据读取上,增加缓存一般能解决;100w/s 级别可能瓶颈在服务端网络传输上,所以要把大部分的静态数据放到cdn上,甚至缓存在浏览器里。

参考文献:

[1] 许令波. 如何设计一个秒杀系统[M]. 极客时间, 2018.
[2] 图片取自《如何设计一个秒杀系统》专栏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值