微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

按需水平扩展事件驱动架构

如何解决按需水平扩展事件驱动架构

负载增加时水平扩展事件驱动架构的最佳方法是什么?

  1. 很多人建议使用 Kakfa 作为 EDA 的消息队列源 但是 Kafka 只允许一个消费者组中的每个消费者 划分。重新分区,尤其是在重负载情况下 可能既昂贵又耗时。
  2. 一个消费者群体中有许多消费者,他们接受工作和 快速承认会提供一些水平缩放,但现在 需要考虑消息顺序以及加载完成。
  3. 使用 RabbitMQ 可以动态创建和删除队列 这将需要一个额外的协调器来帮助管理和 分配负载

这些也没有解决地域带来的负载平衡问题。

任何帮助将不胜感激。谢谢

解决方法

回答有点晚,但在这里,

您认为缩放应该发生在消息总线层的推理并不完全正确。如果我们采用端到端方案,增加的负载意味着增加对前端(API 层)的传入请求。请参阅以下链接中的 reference 事件驱动架构。

假设存在某种形式的自动扩展(Kubernetes 复制因子、Amazon 自动扩展),前端将扩展以处理额外负载。在初始预处理之后,服务会将事件发布到事件驱动架构中的消息队列。

特别是在 Kafka 中,主题分区是一个扩展单元,因为一个生产者可以写入一个分区。通常您会根据单个分区的吞吐量预先定义分区数。

正如参考文献 article 提到的,如果单个分区吞吐量是 p 并且您需要 t 作为吞吐量,那么您需要 t/p > 分区。

如果 t 是正常预期负载的吞吐量,您可以通过创建尽可能多的分区来提前为 2x、3x、10x 吞吐量创建供应。

通常单个分区的吞吐量超过 10 Mb/s。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。