gpt4 book ai didi

asynchronous - 如何均衡处理多个并发任务?

转载 作者:行者123 更新时间:2023-12-03 15:49:57 24 4
gpt4 key购买 nike

问题

我们的 加工服务正在为 UI、API 和内部客户端提供服务并监听来自 的命令卡夫卡 .
很少有 API 客户端可能会在短时间内创建大量生成任务(一个任务是 N 条消息)。使用 Kafka,我们无法控制命令分发,因为每个命令都来自一个处理实例(又名工作程序)消耗的分区。因此,在处理 API 请求时,UI 请求可能等待太长时间。

在理想的实现中 ,我们应该均匀地处理所有任务,无论其大小。处理服务的容量分布在所有事件任务中。并且即使集群负载很重,我们总是明白,已经到达的新任务几乎可以立即开始处理,至少在所有其他任务的处理结束之前。 enter image description here

解决方案

相反,我们想要一个看起来更像下图的架构,其中每个客户和端点的组合都有单独的队列。这种架构为我们提供了更好的隔离,以及基于每个客户动态调整吞吐量的能力。
enter image description here
生产者这边

  • 任务来自客户端
  • 立即为此任务创建一个队列
  • 将所有消息发送到此队列

  • 消费者这边
  • 在一个过程中,您不断更新队列列表
  • 在其他进程中,您遵循此列表并使用例如来自每个队列的 1 条消息
  • 规模消费者


  • 问题

    这样的问题有什么通用的解决方案吗?使用 RabbitMQ 或任何其他工具。历史上,我们在项目中使用 Kafka,所以如果有任何方法使用 - 这很了不起,但我们可以使用任何技术来解决这个问题。

    最佳答案

    为什么不使用 spark 来执行任务内的消息?我在想的是,每个工作人员都会创建一个 Spark 上下文,然后将消息并行化。映射的函数可以基于用户正在消费的 kafka 主题。但是我怀疑您的队列可能有包含消息、UI、API 调用等混合的任务。这将导致更复杂的映射功能。如果您不使用独立集群而是使用 YARN 或类似的东西,您可以更改 spark master 正在使用的排队方法。

    关于asynchronous - 如何均衡处理多个并发任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62193451/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com