秒杀系统设计

考虑因素:当QPS达到极限时,CPU使用率是否超过95%(锁限制、I/O阻塞),不然还有待提高空间。
 
架构原则:(4要1不要)
    1.数据要尽可能少(请求数据与响应数据)。减小数据的压缩与编码消耗CPU以及网络传输
   2.请求数要尽可能少。CSS与JS请求合并,后台请求数也要少(每次请求3次握手4次挥手)
   3.后台服务路径要短。后台微服务链接要少,能够加强可用性,同时提高性能(减小节点数据交互序列化及网络传输损耗)
   4.依赖要尽可能减小。降级非必要信息(优惠券,成交列表,商品推荐等),减小页面复杂度。
   5.不要有单点。
 
设计方案:
   先作数据的动静分离:数据中是否含有和访问者相关的个性化数据,页面html、CSS、JS、图片等静态信息由nginx来处理,CDN来抗峰值
    将静态数据页面信息缓存到用户浏览器中
    将动态请求的读数据Cache在Web端,将商品相关信息cache起来。每次请求加载商品信息直接缓存读取。
    对读数据不作强一致性校验
    对写数据进行基于时间的合理分片:秒杀答题
    对写请求作限流保护,多余的请求用RateLimiter、Semaphore 限流过滤
    对写数据进行强一致性校验
 
    
 

页面静态化:将活动页面上的全部能够静态的元素所有静态化,并尽可能减小动态元素。经过CDN来抗峰值。 
禁止重复提交:用户提交以后按钮置灰,禁止重复提交 
用户限流:在某一时间段内只容许用户提交一次请求,好比能够采起IP限流html

限制IP访问频率:咱们上面拦截了浏览器访问的请求,但针对某些恶意攻击或其它插件,在nginx限制访问频率。
 
削峰方案:

一个是经过队列来缓冲请求,即控制请求的发出;nginx

一个是经过答题来延长请求发出的时间,在请求发出后承接请求时进行控制,最后再对不符合条件的请求进行过滤;算法

最后一种是对请求进行分层过滤。浏览器

 

一、将动态请求的读数据缓存(Cache)在 Web 端,过滤掉无效的数据读;缓存

二、对读数据不作强一致性校验,减小由于一致性校验产生瓶颈的问题;网络

三、对写数据进行基于时间的合理分片,过滤掉过时的失效请求;架构

四、对写请求作限流保护,将超出系统承载能力的请求过滤掉;微服务

五、对写数据进行强一致性校验只保留最后有效的数据。性能

 

 

 
限流方案:
    1.令牌桶限流:可以限制数据的平均传输速率外,还容许某种程度的突发传输,RateLimiter(侧重于速率)  Semaphore(侧重于线程个数)。
    2.漏捅算法:固定速率传输,资源没法最优化处理。
    例如:RateLimiter limiter=RateLimiter.create( 5);
相关文章
相关标签/搜索