具有不同可伸缩性级别的故障转移的 Java 程序



本着使我的问题措辞简洁的精神,我尽量避免使用诸如"冗余","分布式","集群","编排","容错","容器"之类的词

如果我要写

  • Java 程序 A
  • Java 程序 B

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

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

问题 1:在以下每个可伸缩性级别启用检测 A 和"唤醒"B 终止所需的"监视"机制的最简单、最优雅的方法是什么?

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

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

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

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

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

Kubernetes 是其弹性的不错选择:从单主机单节点到大型部署。

  • 对于您的 1 级场景,您可以在Minikube上使用虚拟化运行 Kubernetes。

  • 对于 2 级、3 级和 4 级场景,您可以使用KubeAdm设置 Kubernetes 控制平面:它会创建主节点并为您提供一个加入密钥,因此您可以根据需要添加更多主机(节点(。

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

编辑:

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

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

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

最新更新