问答

使用队列进行削峰?把请求放入队列?如何实操?

作者:admin 2021-04-21 我要评论

这得用异步编程模式了吧!因为服务器收到一个请求后,需要异步等待队列执行的结果,有结果后,再返回response。如果用户量大了,响应会变慢,但是服务器不会挂掉...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

这得用异步编程模式了吧!因为服务器收到一个请求后,需要异步等待队列执行的结果,有结果后,再返回response。如果用户量大了,响应会变慢,但是服务器不会挂掉

###

你的提问提出的是实操,那就主要描述具体操作

第一种: 异步操作

也即是当流量高峰的时候,用户发出请求,服务器立即响应,同时执行过程丢入异步队列中,在php中,我们可以使用redis 或者 swoole 队列来实现
参考消费者模式

创建一个消费者进行脚本,从队列中读取数据处理接收到的数据

客户端交互过程:客户端 -> 服务器接收到数据 -> 塞入数据到队列中 -> 响应给客户端
服务端消费者过程: 检查数据是否在 -> 接收到数据 -> 检查当前处理是否满足条件(处理的数据量太大) -> 丢弃 或者 处理

例如参见的 根据 Kafka、rembqq都是干消费者的

第二种: 建立分布式服务

举个例子: 当前有1000个数据,当请求过程中,可以使用nginx等进行负载均衡到各个服务器中进行处理,从而达到处理平均

第三种: 直接干掉多余的流量

例如漏桶算法,多出来的流量直接丢弃,不进行处理。例如服务端已经有200个数据了,但是只能荷载150个人。当201个数据或者151个数据请求的时候,直接return,客户端返回对应的提示即可

例如 目前人数过多啥的,这就是流量被丢弃的提示

服务器会不会挂掉?

建议你根据你预期的流量,提前做好准备,随时扩容或者计算好流量顶峰数量,随时丢弃多余流量就不会有很大影响,只是损失用户体验

###

队列削峰的意思是:有一些非及时的接口可以让他慢慢处理。但是绝大部分情况下,接口肯定需要马上返回的,不需要用队列。比如:有些场景的秒杀,通知等

想让服务器在极限负载的时候不至于崩溃,用到的是网关,进行接口限流。

###

你可收到 request 后,起一个 队列,然后response,这样这个请求就结束了。
另一个程序去消费你的队列,处理你要的业务即可。

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 使用队列进行削峰?把请求放入队列?如

    使用队列进行削峰?把请求放入队列?如

  • vue项目怎么建一个布局,让其中间部分

    vue项目怎么建一个布局,让其中间部分

  • 我想复选框显示隐藏全部标记。

    我想复选框显示隐藏全部标记。

  • icon跨域问题

    icon跨域问题

腾讯云代理商
海外云服务器