本着以干净简单的方式表达我的问题的精神,我尽量避免使用“冗余”、“分布式”、“集群”、“编排”、“容错”、“容器'
如果我要写
- 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 级重叠): A和B的多个实例运行在AWS Cloud和Google Cloud等云服务的不同节点上。 (例如使用 RMI、Docker、Kubernetes?)
问题 2:如果我的最终目标是按照级别 4,但我将首先在我的笔记本电脑上开始开发 A 和 B,类似于级别 1,那么完成这整个过程的整体好方法是什么开发/部署周期?
最佳答案
Kubernetes 因其弹性而成为一个不错的选择:从单主机单节点到大型部署。
在 minikube 上进行初始阶段后,您可以轻松导出配置的 yaml
,以便在更大的本地集群、混合集群或 100% 云端运行。
编辑:
Kubernetes 平台是否适合在其中运行类似高频交易 (HFT) 的应用程序,是另一个话题,并且需要在 SO 上打开一个单独的线程。
我只能在这里提醒一下,Kubernetes 的设计受到了 Google 的 Borg 系统的影响,而该系统又是为了处理短暂的延迟敏感请求(例如网络搜索)而设计的。 查看维基百科以了解有关此主题的更多信息。
如今,在 Kubernetes 上运行的应用程序可以使用 native 底层硬件。例如,本地存储直接连接到工作节点(例如 NVMe SSD 驱动器)或 GPU 资源,分别提供 为您的应用程序提供一致的高性能磁盘 I/O 操作,并可以加速计算密集型任务。
关于具有不同可扩展级别的故障转移的 Java 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59779543/