首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >架构设计之流量削峰

架构设计之流量削峰

作者头像
春哥大魔王
发布2019-05-14 16:49:55
1.3K0
发布2019-05-14 16:49:55
举报

前言

针对于秒杀场景来说,流量往往在一个特定时间点有个高度集中的流量洪峰,这个瞬时对于资源的消耗是很大的,这时往往对于服务的稳定性带来了极大的挑战,如果按照流量洪峰预估系统资源,则可能存在极大的资源浪费。

所以协调好处理流量洪峰和资源利用率,最好的方式就是设计错峰方案进行流量削峰。

削峰目的:

让服务处理请求更加平缓,节省服务器资源。

针对于削峰来说,本质上是延缓用户请求的发送,减少和过滤一些无效请求。

一般采用以下方式:

  • 排队
  • 答题
  • 分层过滤

这几种方案都是无损的,当然有损的方案如限流,负载保护等,是另一种不得已的措施,以后再谈。

排队

流量削峰首先想到的就是队列,将同步的请求转换成异步请求,将流量峰值通过消息队列平缓推送过去。

当然消息队列需要注意的是消息挤压和存储上限等情况。

类似的排队方式还有很多,如:

  • 线程池加锁
  • 先进先出内存队列
  • 类似于binlog的顺序写读处理的机制

答题

一般的电商系统秒杀时会有一个答题流程,主要是为了增加购买的复杂度,首先可以防止一些机器参与秒杀的场景,起到防止作弊的目的。还可以拉大请求时间缓解请求,控制流量达到削峰的目的。

由于经过答题之后的请求具有了先后顺序,这样对于后续的业务逻辑来说就可以很容易的控制了。

答题逻辑的设计:

  • 题库产生,生成一个个的问题和答案,问题也不用特别复杂,可以防止机器作弊即可。
  • 题库推送,在秒杀进行之前,将问题推送给交易系统。
  • 问题图片生成,用于将题目生成制定格式图片,增加一些干扰因素,问题图片可以提前推送到cdn进行预热,不然在真正秒杀开始时,可能图片加载缓慢影响用户体验。

答题逻辑比较简单了,用户提交答案,后台比对题目和答案即可。

分层过滤

针对于秒杀场景来说,跟本质的做法是过滤无效请求,分层过滤是采用漏斗方式进行请求处理的。

请求流程:

  • 大部分流量在用户浏览器或者cdn上获取,这一层可以拦截大量数据读取。
  • 前台读系统主要是一些缓存cache,比如采用nginx+lua等方式拦截无效请求。
  • 业务系统主要做好限流,排队等操作。对数据做合理分片。
  • 在最后的数据层做好数据强一致校验,比如保证库存的准确性(不能为负数)。

这样请求经过一层层的漏斗过滤,会尽量将少的数据请求到后端了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 春哥talk 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 排队
  • 答题
  • 分层过滤
相关产品与服务
消息队列 CMQ 版
消息队列 CMQ 版(TDMQ for CMQ,简称 TDMQ CMQ 版)是一款分布式高可用的消息队列服务,它能够提供可靠的,基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)中的信息传递,存储在可靠有效的 CMQ 队列中,防止消息丢失。TDMQ CMQ 版支持多进程同时读写,收发互不干扰,无需各应用或组件始终处于运行状态。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档