累积/刷新消息的设计模式

时间:2013-12-04 15:26:48

标签: java design-patterns amazon-s3

目前我们有一个发布/消费者服务,消费者将收到的消息写入AWS S3。我们目前每月写入超过100,000个对象。 但是,我们可以根据一些规则对此消息进行分组,以节省一些费用。 这些规则可以是:

  • 如果我们收到了用户1的10条消息 - >把它们分组,然后 写信给S3。
  • 如果我们收到<用户1的10条消息和自上次消息以来经过的时间超过5秒,刷新到S3。
  • 如果"内部"队列,大于N,开始刷新

我们不想要的就是吃掉我们的记忆......正因为如此,我正在考虑从设计模式的角度来看最好的方法,考虑到我们所说的高负荷系统,所以我们没有无限的内存资源。

谢谢!,

1 个答案:

答案 0 :(得分:2)

根据您在评论中的进一步说明,有一些名为Leaky bucketToken bucket相关算法。它们的主要目的略有不同,但您可以考虑使用一些修改 - 特别是您可以考虑将“漏出的水滴从桶中查看”,因为常规提交单个用户的所有消息都会刷新到S3。

这样的或多或少的修改(请首先阅读算法的描述):

  1. 每个用户都有一个存储桶(您可能很容易买得起,因为您只有大约300个用户)
  2. 每个存储桶都由来自每个用户的消息填充
  3. 您经常让每个桶泄漏(刷新所有消息或仅发送有限的消息)
  4. 我猜它会以某种方式遵循你原来的要求。