Чтобы сделать формулировку моего вопроса понятной и простой c, я стараюсь избегать использования таких слов, как «избыточность», «распределенный», «кластеризация», «оркестровка», «отказоустойчивость». ',' контейнер '
Если мне нужно написать
- java программа A
- java программа B
две очень похожие программы, каждая многопоточная
Моя цель состоит в том, чтобы написать A и B таким образом, чтобы, когда A неожиданно завершал свою работу, B запускался вместо этого. Поскольку A и B совместно используют централизованную базу данных, целостность данных здесь не является главной проблемой.
Вопрос 1: какой самый простой и элегантный подход для включения механизма «мониторинга», необходимого для обнаружения завершение A и «пробуждение» B на каждом из следующих уровней масштабируемости?
Уровень 1 : один экземпляр каждого из A и B работает на одном и том же процессоре и ОЗУ (например, следует ли мне использовать JMXConnector?)
Уровень 2 : один экземпляр каждого из A и B, работающих на разных наборах процессоров и ОЗУ в локальной сети, например, на двух ноутбуках дома. (например, используйте RMI, Docker, Kubernetes?)
Уровень 3 : один экземпляр каждого из A и B работает на разных наборах процессоров и ОЗУ в глобальной сети, например, на моем ноутбуке и a P C в удаленном месте
Уровень 4 (да, концептуально может совпадать с Уровнем 2 и 3) : работает несколько экземпляров A и B на разных узлах облачного сервиса, таких как AWS Cloud и Google Cloud. (например, используйте RMI, Docker, Kubernetes?)
Вопрос 2: если моя конечная цель соответствует уровню 4, но я сначала начну разработку A и B на своем ноутбуке, аналогично до уровня 1, что может быть хорошим подходом для выполнения всего этого цикла разработки / развертывания?