gpt4 book ai didi

amazon-web-services - 基于队列的处理

转载 作者:IT王子 更新时间:2023-10-29 01:06:33 25 4
gpt4 key购买 nike

所以我一直在研究构建一个依赖于类似于消息传递总线的东西的应用程序。这个想法是非常容错的。我有一个需要执行的任务队列,以下是我认为基于队列的系统的最终目标的步骤。

  • A/B 服务器最初将一个项目添加到要处理的队列中。
  • 监听队列的 C 服务器发现队列中有一个新项目,并开始处理它。我相信它应该用超时锁定项目,(如果服务器崩溃等......,我需要其他工作人员能够处理它。)

现在发生以下两种情况之一:

  • C服务器没有响应该任务,或者超时时间过长,队列解锁,交给D服务器处理

- 或 -

  • C 服务器完成任务并最终从队列中删除条目。

我正在研究不同的解决方案,我看到很多人使用 REDIS 作为执行此操作的后端,但它的队列相当简单。例如RPOPLPUSH将从队列中删除 key 。如果服务器崩溃会怎样?队列现在认为它处理了那个项目,我们有一个丢失的任务。

建议采取哪些步骤来确保任务完成,并记录任务失败以便能够由另一台服务器重新处理?我打算在 go 中编写任务,并且愿意使用 AWS 等云服务。

最佳答案

Redis 是一个基本组件,您可以在其上构建队列系统。也就是说,在 Redis 之上实现真正有保证的交付系统并非易事,尤其是当您需要事务行为时。

下面是一些用 Redis 实现的各种语言的排队系统:

可以在 Go 中开发类似的东西,但当谈到真正有保证的交付语义时,细节决定成败。

专用队列系统可能会更好地为您提供服务,例如 RabbitMQ 或 ActiveMQ。虽然它们更复杂,但它们提供了更多功能,并且可能提供了更好的保证。

这是 RabbitMQ 的 Go 客户端:https://github.com/streadway/amqp

您可能还对 disque 感兴趣(来自 Redis 作者的专用队列解决方案),以及相应的 Go 客户端 https://github.com/EverythingMe/go-disque

最后,beanstalkd是另一种轻量级解决方案;你可以在以下位置找到 Go 客户端:https://github.com/kr/beanstalk

关于amazon-web-services - 基于队列的处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31479764/

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