Java 个具有不同级别可扩展性的故障转移程序

Java programs with failover at different levels of scalability

本着让我的问题措辞简洁明了的精神,我尽量避免使用 'redundancy'、'distributed'、'clustering'、'orchestrating'、'fault tolerant'、'container'

如果我要写

,两个非常相似的程序,每个都是多线程的

我的目标是以这样的方式编写 A 和 B,当 A 意外终止时,B 将 运行 代替。 由于 A 和 B 共享一个中央数据库,因此数据的完整性不是这里的主要关注点。

问题 1:启用检测 A 和 'wake up' B 终止所需的 'monitoring' 机制的最简单和最优雅的方法是什么,在以下每个可扩展性级别?

1 级: A 和 B 每个的一个实例 运行ning 在同一处理器和 RAM 上(例如,我应该使用 JMXConnector 吗?)

2 级: A 和 B 运行 在 LAN 中的不同处理器和 RAM 集合上各有一个实例,例如家里两台笔记本电脑。 (例如使用 RMI、Docker、Kubernetes?)

3 级: A 和 B 运行ning 在 WAN 上的不同处理器和 RAM 集上各有一个实例,例如我的笔记本电脑和远程位置的 PC

4 级(是的,在概念上可能与 2 级和 3 级重叠): A 和 B 的多个实例 运行ning 在云服务的不同节点上,例如 AWS 云和 Google 云。 (例如使用 RMI、Docker、Kubernetes?)

问题 2:如果我的最终目标是按照级别 4,但我将首先在我的笔记本电脑上开始开发 A 和 B,类似于级别 1,那么什么是总体上好的方法完成整个 development/deployment 周期?

Kubernetes 是一个不错的选择,因为它具有弹性:从单主机单节点到大型部署。

  • For your Level 1 scenario you can run Kubernetes using virtualization on Minikube.

  • For your Level 2, 3 and 4 scenarios you can set up your Kubernetes Control Plane with KubeAdm: It creates the Master Node and provides you a joining key, so you can add more Host Computers(Nodes) as you need.

在 minikube 上完成初始阶段后,您可以轻松导出 yaml 配置,以便 运行 在更大的本地集群、混合集群或 100% 云端。

编辑:

  • Kubernetes 平台是否适合运行在其中构建类似高频交易 (HFT) 的应用程序,这是另一个话题,需要 打开一个SO 上的单独线程。

  • 我只能在这里提醒一下,Kubernetes 的设计受到了 Google 的 Borg 系统的影响,而 Borg 系统又被用来处理短暂的延迟敏感请求(例如网络搜索)。 查看维基百科以了解有关此主题的更多信息。

  • 现在 Kubernetes 上的应用程序 运行ning 可以使用本地底层硬件。例如,本地存储直接连接到工作节点(如 NVMe SSD 驱动器)或 GPU 资源,它们分别提供 为您的应用程序提供一致的高性能磁盘 I/O 操作,并且可以加速计算密集型任务。