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

标签 java kubernetes distributed-computing scalability failover

本着以干净简单的方式表达我的问题的精神,我尽量避免使用“冗余”、“分布式”、“集群”、“编排”、“容错”、“容器'

如果我要写

  • 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 因其弹性而成为一个不错的选择:从单主机单节点到大型部署。

  • 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 系统的影响,而该系统又是为了处理短暂的延迟敏感请求(例如网络搜索)而设计的。 查看维基百科以了解有关此主题的更多信息。

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

关于具有不同可扩展级别的故障转移的 Java 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59779543/

相关文章:

java - 在java中生成随机数,使其平均值为特定值

java - 使用扫描器比较和字符串

profiling - 监视和分析之间有什么区别?

nosql - 分片与 DFS

c - 在部署新代码或热插拔代码时维护套接字连接?

JavaFX:监听节点的位置变化

java - 检查 sqlite 中的文本

docker - 如何将私有(private)组织镜像从 docker hub 部署到 kubernetes

kubernetes - 如何允许Kubernetes Job访问主机上的文件

docker - 无法启动容器:进程被终止