Java分布式任务

标签 java design-patterns architecture

我正在构建应该由 3 个服务器组成的系统,并且相同的 Java (Spring mvc) 服务将在所有 3 个服务器上运行。 服务将能够执行 3 类任务,即 A、B 和 C。

我想要的是让服务器上的每个服务在与其他服务器通信时只执行一个类别。如果一台服务器挂掉,其余服务器应该进行协商,并且只有其中一台服务器应该归类。

例子:

  1. 服务器 1 - 服务做 A

    服务器 2 - 服务做 B

    服务器 3 - 服务执行 C

  2. 服务器 2 死亡

    服务器1和服务器3协商

    服务器 1 - 服务做 A 和 B

    服务器 3 - 服务执行 C

如果服务器 2 恢复正常状态,它应该从服务器 1(A 或 B)中获取类别

是否有任何模式、架构、技术、链接可以帮助我解决这个问题?

最佳答案

Zookeeper 专门用于在分布式环境中处理这些类型的场景。通过获取锁,将从 N 个服务器中选出一个主服务器。一旦 master 死亡,它会导致重新选举,新的 master 将服务于客户端请求。

另一种容易出错的方法是自己实现一个共享的全局分布式锁并处理极端情况。获得锁的服务器将为客户端请求提供服务。

来自 zookeeper文档页面:

ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services. All of these kinds of services are used in some form or another by distributed applications

enter image description here

您可以在 zookeeper Overview 中找到更多详细信息页面。

关于Java分布式任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33940924/

相关文章:

java - 文件已删除,但实际文件并未删除。 (听起来不对)

java - 使用 Java 管理 API 调用 [Android]

java - 在java中模拟左键单击?

java - 如果我在 JFrame 内的任何地方按 escape(不仅仅是在特定的文本框等;),如何关闭 JFrame ?

c# - 存储库模式以及如何管理实体之间的依赖关系

c# - 在 Windows Azure 中部署 WCF 应用程序

Java 应用程序架构 - 需要一个日志记录名称,希望保持类解耦

c# - 如何将 daoFactory 注入(inject) NHibernate EventListener

php - 如何在 PHP 中处理嵌套(递归迭代器)动态对象?

azure - Sitecore 9 PaaS 架构 : provisioning content delivery