《大型网站技术架构演进与性能优化》之大秒系统的极致优化思路[七]

全链路的优化案例,即用户端->中间的链路->服务端->数据库的整条链路的极致优化思路。

1.热点隔离

秒杀系统的第一个设计原则就是隔离热点数据,即禁止1%的请求影响剩余99%的请求。
业务隔离,例如通过卖家报名,我们就可以把他们设置为已知热点,提前做好预热。
系统隔离,通过分组部署的方式把1%的请求与剩下的99%的请求分开。
数据隔离,秒杀所调用的数据大部分都是热的数据,比如启用单独Cache集群或者MySQL数据库来释放热点数据,目的是避免0.01%的数据影响到其余99.99%的数据。
按照用户来区分,可以不同的用户分配不同的Cookie,在接入层再路由到不同的服务接口中,还可以在接入层针对URL的不同路径设置限流策略。
在服务层调用不同的服务接口。
在数据层可以通过给数据打上特殊标签来区分。

2.动静分离

什么是静态化系统,有哪些属性?
一个页面对应的URL通常固定,页面不包含浏览者的相关因素,不包含时间相关的因素,不包含地域因素,不能包含Cookie等私有数据。
静态化系统能解决什么问题
Java系统天生就存在不擅长处理大量连接请求,每个连接消耗的内存较多和Servlet容器解析HTTP协议较慢等弱点。
因此,这种情况下,使请求尽量不经过Java系统,而在前面的Web服务层就直接返回。
系统静态化的优势在于:改变了缓存方式。
静态化方案的选择
实体机单机部署
统一Cache层
上CDN
如何失效
被动失效:主要处理模板变更和一些对时效性不太敏感的数据的失效,采用设置Cache时间长度这种自动失效的方式。
主动失效:Java系统发布清空Cache,VM模板发布清空Cache,根据时间戳失效。
大秒系统特点:
把整个页面Cache在用户浏览器上;
如果强制刷新整个页面,也会请求到CDN;
实际有效请求只是刷新抢宝按钮。
通过这样的设计,可以把90%的静态数据缓存在用户端或者CDN上,当秒杀系统开始时,用户不需要刷新整个页面,只需要点击特殊的按钮即可。
如何改造动态系统
URL唯一化,分离浏览者相关的因素,分离时间因素,异步化地域因素,去掉Cookie。

3.基于时间分片削峰

所有熟悉秒杀的人都知道第一版的秒杀系统本身并没有答题功能,后面才增加了秒杀答题。秒杀答题很重要的作用是防止秒杀器。
增加答题的另一个重要功能就是拉长了峰值的下单请求时间,从以前的1秒之内延长到2-10秒左右,请求峰值开始基于时间分片。

4.数据分层校验

对大流量系统的数据做分层校验也是一项重要的设计原则。分层就是用“漏斗式”的设计来处理请求。
它的核心思想是在不同层次、不断尽可能地过滤掉无效请求,只有“漏斗”最末端的才是有效请求。
数据的动静分离;将90%的数据缓存在客户端浏览器,动态请求的读数据Cache在Web端;对读数据不做强一致性校验;对写数据进行基于时间的合理分片;对写请求做限流保护;对写数据进行强一致性校验。

5.实时热点发现

第一步,构建一个异步的、可以收集交易链路上各个中间件产品本身统计的热点key;
第二步,建立热点上报和按照需求订阅的热点服务的下发规范;
第三步,将上游系统收集到的热点数据发送到热点服务台上,这样下游系统如交易系统就会知道哪些商品被频繁调用,再对此做热点保护。

6.关键技术优化点

Java处理大并发动态请求优化的问题
同一商品被大并发读的问题
同一数据大并发更新问题

7.大促热点问题思考

一些通用规则:隔离、动静分离、分层校验、必须从全链路来考虑和优化每个环节,除了优化系统提升性能以外,做好限流和保护也是必备功课。

8.总结

从用户的请求到服务端的整个请求链路上,每个环节都可以检查是否有能够优化的地方,以达到极致优化的效果。


推荐阅读:
<<<《大型网站技术架构演进与性能优化》之分布式改造[一]
<<<《大型网站技术架构演进与性能优化》之无线时代下的构架演进[二]
<<<《大型网站技术架构演进与性能优化》之大中台小前台[三]
<<<《大型网站技术架构演进与性能优化》之全球部署方案[四]
<<<《大型网站技术架构演进与性能优化》之代码级优化[五]
<<<《大型网站技术架构演进与性能优化》之合并部署[六]
<<<《大型网站技术架构演进与性能优化》之资源调度优化[八]
<<<《大型网站技术架构演进与性能优化》之大型网站的稳定性建设[九]

你可能感兴趣的:(《大型网站技术架构演进与性能优化》之大秒系统的极致优化思路[七])