秒杀系统架构设计

 1,秒杀场景核心是要保证三点:稳,准,快;对应的技术落地便是高可用,一致性,高性能;

 2,架构设计五原则

         2.1 数据要尽量少:网络传输耗时,服务器压缩以及字符编码,序列化与反序列化消耗cpu

         2.2 请求数要尽量少:页面依赖的 CSS/JavaScript、图片,以及 Ajax,建立连接要做三次握手

         2.3 路径要尽量短:缩短请求路径不仅可以增加可用性,同样可以有效提升性能(减少中间节点可以减少数据的序列化与反序列化),并减少延时(可以减少网络传输耗时)

         2.4 依赖要尽量少: 完成一次用户请求必须依赖的系统或者服务,这里的依赖指的是强依赖,可以给系统进行分级。

         2.5 不要有单点:单点意味着没有备份,风险不可控。避免将服务的状态和机器绑定,即把服务无状态化,把和机器相关的配置动态化;存储服务一般要通过冗余多个备份的方式来解决单点问题。

           优化的点:秒杀系统单独独立出来;独立做一个机器集群;将热点数据(如库存数据)单独放到一个缓存系统中,以提高“读性能“ ;增加秒杀答题,防止有秒杀器抢单;页面进行彻底的动静分离,使得用户秒杀时不需要刷新整个页面;在服务端对秒杀商品进行本地缓存,不需要再调用依赖系统的后台获取;增加系统限流保护,防止最坏情况发生。

 3,如何做好动静分离,有哪些方案。

         3.1 概念:“动态数据”和“静态数据”的主要区别就是看页面中输出的数据是否和 URL、浏览者、时间、地域相关,以及是否含有Cookie 等私密数据。

         3.2 怎样对静态数据做缓存:了解了动静数据的概念后,我们很容易想到对静态数据做缓存用来提高系统性能。

                 1,把静态数据缓存到离用户最近的地方,缓存到用户浏览器里、CDN 上或者在服务端的 Cache 中

                 2,静态化改造就是要直接缓存 HTTP 连接。

                 3,让谁来缓存静态数据也很重要,缓存可以放在Web 服务器(如 Nginx、Apache、Varnish)更擅长处理大并发的静态文件请求。

         3.3 方案:1,实体机单机部署;2,统一cache层;3,上CDN

4,热点数据的处理:二八原则

         4.1  概念:热点分为热点操作和热点数据。所谓“热点操作”,例如大量的刷新页面、大量的添加购物车;热点数据”比较好理解,那就是用户的热点请求对应的数据。而热点数据又分为“静态热点数据”和“动态热点数据”。

         4.2 静态热点数据”,就是能够提前预测的热点数据。例如,我们可以通过卖家报名的方式提前筛选出来,通过报名系统对这些热点商品进行打标。另外,我们还可以通过大数据分析来提前发现热点商品,比如我们分析历史成交记录、用户的购物车记录,来发现哪些商品可能更热门、更好卖,这些都是可以提前分析出来的热点。

         4.3 动态热点数据”,就是不能被提前预测到的,系统在运行过程中临时产生的热点。例如,卖家在抖音上做了广告,然后商品一下就火了,导致它在短时间内被大量购买。

         4.4 发现热点数据:

                  4.4.1 发现静态热点数据:强制卖家报名,活动商品打标;大数据计算统计top N 商品

                  4.4.2 发现动态热点数据:1,构建一个异步的系统,它可以收集交易链路上各个环节中的中间件产品的热点 Key;2,建立一个热点上报和可以按照需求订阅的热点服务的下发规范;3,将上游系统收集的热点数据发送到热点服务台,然后下游系统(如交易系统)就会知道哪些商品会被频繁调用,然后做热点保护。

          4.5  处理热点数据:

                  4.5.1 优化:缓存起来,然后可以采用 LRU 淘汰算法替换。

                  4.5.2 限制:例如对被访问商品的 ID 做一致性 Hash,然后根据 Hash 做分桶,每个分桶设置一个处理队列,这样可以把热点商品限制在一个请求队列里,防止因某些热点商品占用太多的服务器资源,而使其他请求始终得不到服务器的处理资源。

                  4.5.3 隔离:

                          4.5.3.1 业务隔离:开卖前,卖家单独报名,对热点数据提前做预热

                          4.5.3.2 系统隔离:可以通过分组部署的方式和另外 99% 分开,杀可以申请单独的域名,目的也是让请求落到不同的集群中。

扫描二维码关注公众号,回复: 7351854 查看本文章

                          4.5.3.3 数据隔离:秒杀所调用的数据大部分都是热点数据,比如会启用单独的 Cache 集群或者 MySQL 数据库来放热点数据,目的也是不想0.01% 的数据有机会影响 99.99% 数据。

                  未完待续~~~~

猜你喜欢

转载自www.cnblogs.com/enchaolee/p/11579576.html