Java 个具有不同级别可扩展性的故障转移程序
Java programs with failover at different levels of scalability
本着让我的问题措辞简洁明了的精神,我尽量避免使用 'redundancy'、'distributed'、'clustering'、'orchestrating'、'fault tolerant'、'container'
如果我要写
- java 程序 A
- java 程序 B
,两个非常相似的程序,每个都是多线程的
我的目标是以这样的方式编写 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 是一个不错的选择,因为它具有弹性:从单主机单节点到大型部署。
在 minikube 上完成初始阶段后,您可以轻松导出 yaml
配置,以便 运行 在更大的本地集群、混合集群或 100% 云端。
编辑:
Kubernetes 平台是否适合运行在其中构建类似高频交易 (HFT) 的应用程序,这是另一个话题,需要 打开一个SO 上的单独线程。
我只能在这里提醒一下,Kubernetes 的设计受到了 Google 的 Borg 系统的影响,而 Borg 系统又被用来处理短暂的延迟敏感请求(例如网络搜索)。
查看维基百科以了解有关此主题的更多信息。
现在 Kubernetes 上的应用程序 运行ning 可以使用本地底层硬件。例如,本地存储直接连接到工作节点(如 NVMe SSD 驱动器)或 GPU 资源,它们分别提供
为您的应用程序提供一致的高性能磁盘 I/O 操作,并且可以加速计算密集型任务。
本着让我的问题措辞简洁明了的精神,我尽量避免使用 'redundancy'、'distributed'、'clustering'、'orchestrating'、'fault tolerant'、'container'
如果我要写
- java 程序 A
- java 程序 B
,两个非常相似的程序,每个都是多线程的
我的目标是以这样的方式编写 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 是一个不错的选择,因为它具有弹性:从单主机单节点到大型部署。
在 minikube 上完成初始阶段后,您可以轻松导出 yaml
配置,以便 运行 在更大的本地集群、混合集群或 100% 云端。
编辑:
Kubernetes 平台是否适合运行在其中构建类似高频交易 (HFT) 的应用程序,这是另一个话题,需要 打开一个SO 上的单独线程。
我只能在这里提醒一下,Kubernetes 的设计受到了 Google 的 Borg 系统的影响,而 Borg 系统又被用来处理短暂的延迟敏感请求(例如网络搜索)。 查看维基百科以了解有关此主题的更多信息。
现在 Kubernetes 上的应用程序 运行ning 可以使用本地底层硬件。例如,本地存储直接连接到工作节点(如 NVMe SSD 驱动器)或 GPU 资源,它们分别提供 为您的应用程序提供一致的高性能磁盘 I/O 操作,并且可以加速计算密集型任务。