大型网站技术架构演进与性能优化(七)七、链路优化:大秒系统的极致优化思路

七、链路优化:大秒系统的极致优化思路
全链路的优化案例,即用户端->中间的链路->服务端->数据库的整条链路的极致优化思路。
主要介绍大秒系统以及这种典型的读数据的热点问题的解决思路和实践经验。
1、一些数据
2013年的小米秒杀,使用的就是大秒系统。
下面介绍秒杀系统的设计原则,让大家有整体的认识。
2、热点隔离
秒杀系统的第一个设计原则就是隔离热点数据,即禁止1%的请求影响剩余99%的请求。
业务隔离,例如通过卖家报名,我们就可以把他们设置为已知热点,提前做好预热。
系统隔离,通过分组部署的方式把1%的请求与剩下的99%的请求分开。
数据隔离,秒杀所调用的数据大部分都是热的数据,比如启用单独Cache集群或者MySQL数据库来释放热点数据,目的是避免0.01%的数据影响到其余99.99%的数据。
按照用户来区分,可以不同的用户分配不同的Cookie,在接入层再路由到不同的服务接口中,还可以在接入层针对URL的不同路径设置限流策略。
在服务层调用不同的服务接口。
在数据层可以通过给数据打上特殊标签来区分。
3、动静分离
热点分离以后,接下来的工作就是要对热点数据做动静分离。这也是大流量系统设计的重要原则。
主要介绍静态化架构设计
什么是静态化系统,有哪些属性?
一个页面对应的URL通常固定,页面不包含浏览者的相关因素,不包含时间相关的因素,不包含地域因素,不能包含Cookie等私有数据。
静态化系统能解决什么问题
Java系统天生就存在不擅长处理大量连接请求,每个连接消耗的内存较多和Servlet容器解析HTTP协议较慢等弱点。
因此,这种情况下,使请求尽量不经过Java系统,而在前面的Web服务层就直接返回。
系统静态化的优势在于:改变了缓存方式。
如何改造动态系统
URL唯一化,分离浏览者相关的因素,分离时间因素,异步化地域因素,去掉Cookie。
静态化方案的选择
实体机单机部署
统一Cache层
上CDN
如何时效
被动失效:主要处理模板变更和一些对时效性不太敏感的数据的失效,采用设置Cache时间长度这种自动失效的方式。
主动失效:Java系统发布清空Cache,VM模板发布清空Cache,根据时间戳失效。
大秒系统特点:
把整个页面Cache在用户浏览器上;
如果强制刷新整个页面,也会请求到CDN;
实际有效请求只是刷新抢宝按钮。
通过这样的设计,可以把90%的静态数据缓存在用户端或者CDN上,当秒杀系统开始时,用户不需要刷新整个页面,只需要点击特殊的按钮即可。
4、基于时间分片削峰
所有熟悉秒杀的人都知道第一版的秒杀系统本身并没有答题功能,后面才增加了秒杀答题。秒杀答题很重要的作用是防止秒杀器。
增加答题的另一个重要功能就是拉长了峰值的下单请求时间,从以前的1秒之内延长到2-10秒左右,请求峰值开始基于时间分片。
5、数据分层校验
对大流量系统的数据做分层校验也是一项重要的设计原则。分层就是用“漏斗式”的设计来处理请求。
它的核心思想是在不同层次、不断尽可能地过滤掉无效请求,只有“漏斗”最末端的才是有效请求。
数据的动静分离;将90%的数据缓存在客户端浏览器,动态请求的读数据Cache在Web端;对读数据不做强一致性校验;对写数据进行基于时间的合理分片;对写请求做限流保护;对写数据进行强一致性校验。
6、实时热点发现
第一步,构建一个异步的、可以收集交易链路上各个中间件产品本身统计的热点key;
第二步,建立热点上报和按照需求订阅的热点服务的下发规范;
第三步,将上游系统收集到的热点数据发送到热点服务台上,这样下游系统如交易系统就会知道哪些商品被频繁调用,再对此做热点保护。
7、关键技术优化点
Java处理大并发动态请求优化的问题
同一商品被大并发读的问题
同一数据大并发更新问题
8、大促热点问题思考
一些通用规则:隔离、动静分离、分层校验、必须从全链路来考虑和优化每个环节,除了优化系统提升性能以外,做好限流和保护也是必备功课。
9、总结
从用户的请求到服务端的整个请求链路上,每个环节都可以检查是否有能够优化的地方,以达到极致优化的效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值