【问题标题】:Multiple Instances of same Microservices should not fetch and update same MongoDB Documents相同微服务的多个实例不应获取和更新相同的 MongoDB 文档
【发布时间】:2020-06-04 10:28:52
【问题描述】:

问题陈述:

我们的微服务中有一个调度程序,它将获取 10 个请求文档(状态为“A”)并开始处理它们,然后更新每个文档的状态。

我们计划部署同一微服务的三个实例。一旦所有三个实例都开始执行调度程序,那么每个实例将获取 10 个请求文档并开始处理它们。

不应在多个实例中获取和处理相同的请求文档。如何确保每个微服务实例选择 10 个不同的文档?

【问题讨论】:

    标签: spring mongodb transactions microservices


    【解决方案1】:

    您的每个员工都应该选择一组不同的文件。

    例如,如果您的文档有一个自动递增的数字 ID:

    • Worker 1 可以获取 ID % 3 = 0 的所有文档
    • Worker 2 可以获取 ID % 3 = 1 的所有文档
    • Worker 3 可以获取 ID % 3 = 2 的所有文档

    如果自动增量 ID 不可用,您可以查看一致性哈希,这非常好学。

    散列很简单:

    1. 计算文档 ID 的哈希
    2. 使用此哈希来获取应由哪个工作人员处理此文档

    这种方法的问题在于,假设您的文档 ID 哈希的范围在 1 到 1000 之间,而您使用的是上述相同的方法。最终,工人 1 的工作量可能比工人 2 多。

    使用一致哈希,您可以扩大范围以获得更平衡。

    【讨论】:

    • 自动增量 ID 不可用。您能否为“一致性哈希”提供一些好的参考资料?
    • 我已经编辑了回复。我建议您从简单的散列开始。只需散列文档 ID,然后使用我给你的模数示例。如果你想做额外的步骤,你可以使用一致的散列。它可以在整个互联网上使用。
    • 感谢您提出解决方案,这非常好,但在我的场景中,我们没有数字 ID。我期待一些与 MongoDB 事务相关的解决方案。获取条件将是唯一的请求状态。
    • @DevChauhan 你有什么解决办法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多