龙空技术网

1.跟我学秒杀-秒杀系统设计的5个原则

成年人的世界不成年 112

前言:

目前大家对“淘宝秒杀是什么意思啊知乎文章”大体比较重视,你们都需要学习一些“淘宝秒杀是什么意思啊知乎文章”的相关知识。那么小编同时在网摘上汇集了一些关于“淘宝秒杀是什么意思啊知乎文章””的相关内容,希望看官们能喜欢,咱们一起来学习一下吧!

淘宝秒杀

1.什么是秒杀

秒杀就是同一时刻有大量的请求争抢购买同一商品并完成交易的过程,说白了就是大量的并发读和并发写。

2.秒杀系统需要解决哪些问题

秒杀其实主要解决两个问题:一个是并发读,一个是并发写。

并发读的核心优化思路:减少用户到服务端来读取数据,或者让他们读取更少的数据。

并发写的核心优化思路:在数据库层面独立出来一个库,并做特殊的处理。

另外我们还要针对秒杀系统做一些意料之外的情况设计兜底方案,以防最坏情况发生导致系统不可用。

3.秒杀系统的整体架构

秒杀的整体架构可以概括为“高可用”、“数据一致性”、“高性能”这三个点。

高可用:整个系统架构要满足高可用,这是最基本的前提。流量在预期之内时系统肯定要稳定,流量超出预期也能正常提供服务,基本前提是你要保证秒杀商品能顺利的被卖出去。数据一致性:整个系统架构要满足数据一致性,这是其次的要求。就是你秒杀商品设置了多少,卖出去的就一定不能超出这个数量,否则就会给平台造成损失。高性能:整个系统架构要满足高性能,这个属于带光环的要求。不光要在服务端做极致的性能优化,整个请求链路上也要做协同优化,每个地方优化一点,系统整体的性能就提高了一个档次,否则如何支撑那么大的并发量。我们将从设计数据的动静分离、热点的发现与隔离、请求的削峰与分层过滤、服务端的极致优化这几个点重点介绍。

4.秒杀系统整体架构原则

如果你是架构师,如何构建一个超大流量并发读写、高性能、高可用的系统,需要考虑以下5个因素:

数据尽量少请求数尽量少请求路径尽量短服务依赖尽量少不要有单点服务

4.1 数据尽量少:数据尽量少不仅包含用户的请求数据尽量少,还包含服务端返回给用户的数据尽量少 ,以及服务依赖的数据尽量少,如数据库。 因为大家都知道数据要想在网络传输,需要进行编解码、压缩、序列化与反序列化等等处理,这些都是需要消耗cpu资源的,减少数据的传输,可以降低cpu的消耗,将cpu资源用在刀刃上,例如秒杀页面可以去除一些装饰效果。

4.2 请求数尽量少:用户页面请求(不只是页面请求,还有服务端请求依赖的服务)返回数据后还需要进行必要的页面渲染,比如css、图片等,每建立一个请求/断开一个请求,都要经过诸如三次握手/四次挥手的过程,这些都会加大资源的消耗和时耗。最常用的解决方式是将多个相关联的请求合并,服务端再做解析,同时返回多个请求的信息。

当然也不是请求量最少就是最好的,比如将所有请求封装成单次请求,那单次请求返回的数据就比较庞杂了,单次请求性能肯定会受到影响。

4.3 请求路径尽量短:路径是指用户发出请求到返回数据的整个过程中,所经过的中间节点,每经过一个节点就会产生一个链接,如socket连接。

当一个节点的可用性为99.9%的话,假如需要经过5个节点,那么99.9%的5次方就是99.5%,增加了调用的不确定性,减少了系统的可用性。缩短请求路径不仅可以增加可用性,还可以提高系统性能,因为调用的服务资源相对少了。实现缩短访问路径的一种方式是将多个强依赖的应用合并部署在一起,将远程调用变为JVM内部的方法调用。

4.4 依赖要尽量少:这里的依赖指的是服务强依赖。

比如秒杀系统展示页面,这个页面需要强依赖商品信息、用户信息,而优惠券、秒杀成功列表不是必要的信息,这些弱依赖不是必要的情况下可以省略。要实现减少依赖,可以通过给系统分级,比如由强到弱依次分为0级系统、1级系统、2级系统,0级系统强依赖的系统也是最重要的系统。0级系统要减少对1级系统的强依赖,在极端情况下可以将1级系统降级,防止0级系统被1级系统拖垮。例如支付系统是0级,而优惠券系统是1级,在极端情况下可以将优惠券系统降级,让支付系统可以正常提供服务。

4.5 不要有单点:系统单点是系统架构的一大忌。

应用系统如何避免单点,关键是实现服务的无状态化(serverless),这样就可以对服务节点进行动态的扩容。

而存储系统很难实现无状态化,因为数据要存储在磁盘上和机器绑定,这种情况下一般是通过冗余多个备份的方式来解决单点问题。

5.不同场景下的架构

5.1 秒杀初期

优化改造手段:如果你要快速搭建一个秒杀系统,只需要在你的商品购买页增加一个定时上架功能,仅在活动时间内才能让用户点击购买按钮,当商品库存卖完了活动也就结束了。

来看下下面某网站的秒杀页面:

秒杀初期

5.2 请求量达到1w~10w的秒杀系统

优化改造手段:

将秒杀系统独立成一个单独的系统,以集群的方式做系统部署,可以独立的针对该系统做优化。引入缓存,将热点数据放入缓存,如库存、用户抢购行为等。引入秒杀答题,防止秒杀器之类的抢单机器,而且也可以将请求分散。

这时候的系统架构图:

1万到10万请求量的秒杀系统架构

5.3 请求量达到100w的秒杀系统

优化改造手段:

对秒杀页面进行彻底的动静分离,静态数据走cdn,秒杀详情页作为cdn的回源地址,不需要刷新整个秒杀页面,只需要向服务端请求很少的动态数据。服务端对秒杀商品、库存提前进行本地缓存,不需要再去调用依赖的服务系统,甚至有时候不需要去分布式缓存系统查询数据,这样即减少了系统远程调用,又可以减少对分布式缓存系统的访问压力。对热点数据库进行独立部署,可以将库存热点独立成一个单独的数据库。引入限流保护机制,防止超出预期的流量压垮系统。

这时候的系统架构图:

可以看出,系统面对读写压力越来越大,定制的优化手段越来越多,系统越来越不通用,比如加入了本地缓存,而本地缓存收到单机内存的限制,商品数量不能太多。所以,想要极致的性能,就会损失系统的通用性、易用性、低成本等等。

今天就总结到这里,欢迎喜欢我的读者点击【关注】,期待后续更新。

标签: #淘宝秒杀是什么意思啊知乎文章