gpt4 book ai didi

architecture - 如何从我的应用程序架构中消除这个单点故障?

转载 作者:行者123 更新时间:2023-12-04 05:18:53 27 4
gpt4 key购买 nike

我有一个当前具有以下设置的应用程序:

  • 复制 MySQL 数据库
  • 分布式工作队列
  • 几个工作队列消费者/ worker
  • 将作业添加到队列的单个生产者(下面红色的服务器)

  • 设置如下所示:



    工作生产者 在数据库中查询需要添加到需要每 N 分钟添加到工作队列的重复性作业列表中的新项目。这个作业生产者是我整个架构中唯一一个如果失败会导致整个过程失败的节点。我可以让一个数据库服务器、一个队列服务器或几个工作服务器发生故障,而该进程将继续运行。

    如何修改作业生产者,使其不是单点故障?我不知道如何分配它所做的工作,即每 N 分钟查询一次数据库并将新作业排入队列以进行处理。这是一项单一的任务。

    我考虑过有多个生产者,每个生产者将使用模数只处理 1/P 作业,其中 P 是生产者的数量。

    就像是:
    itemsToBeProcess = db.FetchItems()
    for (item in itemsToBeProcessed) {
    if item.id % producerNumber == 0) // Queue job
    }

    这会将生产者的工作分配给多个服务器。但是,这仍然不理想,因为如果单个生产者宕机,值(value) 1/P 的工作将停止处理。因此,它仍然是部分失败。

    任何人都可以就我如何使这个工作生产者不是我的申请中的单点故障提供任何指导吗?

    最佳答案

    是否有任何特定原因每 N 分钟查询一次 db?我会解决这样的问题,而不是 N 分钟,我会查询 N 个项目并使用“select for update”*(以确保项目由一个且只有一个生产者处理(检索和更新状态))。多亏了这一点,您将能够毫无问题地扩展/提供 FO 等。

    关于architecture - 如何从我的应用程序架构中消除这个单点故障?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32803318/

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