博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
架构设计之流量削峰
阅读量:6513 次
发布时间:2019-06-24

本文共 985 字,大约阅读时间需要 3 分钟。

hot3.png

前言

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

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

削峰目的:

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

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

一般采用以下方式:

  • 排队
  • 答题
  • 分层过滤

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

排队

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

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

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

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

答题

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

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

答题逻辑的设计:

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

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

分层过滤

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

请求流程:

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

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

转载于:https://my.oschina.net/u/1000241/blog/3044857

你可能感兴趣的文章
【转载】 删除Win10“这台电脑”中的6个文件夹
查看>>
MFC常用函数总结
查看>>
Nginx配置域名转发实例
查看>>
s:iterator巧妙控制跳出循环
查看>>
移动互联网思维
查看>>
iOS_38_手势
查看>>
微信整合的时候 出现这个“redirect_uri 参数错误”
查看>>
财务统计
查看>>
运行该脚本出现/bin/sh^M: bad interpreter: No such file or directory
查看>>
关于div一侧固定,另一侧自适应
查看>>
s3c2440的A/D转换应用
查看>>
如何将 Java 项目转换成 Maven 项目
查看>>
Java字符串的最大长度
查看>>
在js里双引号里又加单引号的解决方案常用WdatePicker
查看>>
算法笔记_038:特殊回文数(Java)
查看>>
网络驱动移植之net_device结构体及其相关的操作函数
查看>>
在xampp集成环境下使用 php 连接oracle
查看>>
Maven最佳实践:划分模块
查看>>
Centos7部署Kubernetes集群
查看>>
Python读文本文件中文乱问题
查看>>