基于消息的系统中的背压

问题描述

当前系统上的信息

我目前有一个服务A,它是生产者,服务B是消费者。在服务B中:

  1. 我收到了数据对象。
  2. 数据对象已排队。
  3. 队列由后台运行的协同例程主动轮询。

出什么问题了?

随着队列大小的增加,我的服务(B)的内存使用量也增加了。我想找出一种节省内存的方法

可能的解决方

  1. 队列大小上限/阈值设置为X
  2. 一旦Queue.size == X->暂停消耗(生产者即Service-A提供此反压机制功能
  3. 接收到当前一批数据对象后,数据消耗将暂停。因此,Queue.size在技术上最终会增加到X + delta,这是可以的。这是因为从生产者的角度来看,即使它收到了pause()请求,也只会在发送完当前一批数据对象后才暂停。
  4. 队列轮询照常进行。
  5. 一旦Queue.size减小,发送一个resume()请求到Producer。

问题

  1. 我要解决的问题的主要主题是什么?节流正确的词吗?
  2. 我是否在限制队列大小方面朝着正确的方向发展,以解决内存使用问题?
  3. 如果是,我如何确定何时恢复消费?当Queue.size降到X / 2以下时,我应该继续吗? X / 4? (其中X是预定义的阈值)
  4. 我研究了某些节流算法,但是就我而言,丢弃数据对象不是一种选择。还有其他我应该阅读的已有算法吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)