Я разрабатываю простое веб-приложение стиля REST, состоящее из 2 основных модулей.
Module#1: сервер, выставляющий веб-сервисы REST, не сохраняющие состояние, развернутые в Tomcat
Module#2: клиент REST
Существует один экземпляр Tomcat с развернутым Module#1.
Я хотел бы масштабировать его горизонтально и выполнить второй Tomcat на второй машине. Я - полный новичок когда дело доходит до выравнивания нагрузки/кластеризации вот почему, я нуждаюсь в помощи. Нет никакой потребности в репликации сессии и обработке отказа.
Как я должен приблизиться к нему?
Я сделал исследование, и это возможные подходы, которые я вижу:
1. Никакой кластер, никакой сторонний прокси.
Я выполняю второй Tomcat на второй машине. Так как я управляю и клиентом и сервером, я могу предоставить очень простой алгоритм в стороне клиента и выбрать случайным образом хост, который был бы выбран перед вызовом API. Не было бы никакой потребности настроить кластер, ни обеспечить сторонний прокси. Есть ли какие-либо потенциальные ловушки? Действительно ли это - корректный подход?
2. Кластер Tomcat
Когда дело доходит до кластерной конфигурации Tomcat это означает, что там 2 Кота, работающие, отдельные машины и их конфигурация говорят, что они - кластер? Мне нужны отдельная библиотека, инструмент для этого? Tomcat достаточно? У меня будет 2 процесса, работающие как в первом подходе?
3. Подсистема балансировки нагрузки Tomcat
Каковы различия между кластером Tomcat и подсистемой балансировки нагрузки Tomcat? Снова, мне нужны отдельная библиотека, инструмент для этого? Tomcat достаточно?
4. Сторонний прокси
Я нашел некоторую информацию о вещах как HAProxy. Это означает, что все вызовы проходят его, и прокси решает который хост выбрать? Это означает, что кроме двух процессов Tomcat там будет третий, работающий отдельно? На которой машине этот прокси выполняет предположение, что у меня есть 2 Кота на двух отдельных машинах?
Какой я должен выбрать? Я неправильно понимаю что-то? Статьи, ответы ценятся.
Сначала вы видите различия между обоими вариантами балансировки нагрузки (без кластера) и Кластер с репликацией .
Кластеризация имеет формальное значение. Кластер - это группа ресурсов которые пытаются достичь общей цели и знают об одном еще один. Кластеризация обычно включает настройку ресурсов (серверов обычно) для обмена данными по определенному каналу (порту) и сохранения обмениваются своими состояниями, поэтому состояние ресурса воспроизводится в других места тоже. Обычно он также включает в себя балансировку нагрузки, в которой запрос направляется на один из ресурсов кластера в соответствии с политика балансировки нагрузки.
Кластерная архитектура используется для решения одной или нескольких из следующих проблем:
Кластерная архитектура решает эти проблемы, используя комбинацию балансировки нагрузки, нескольких серверов для обработки сбалансированной нагрузки и репликации сеансов.
В вашем случае репликация сеанса не требуется, для этого я думаю, что конфигурация кластера - это не тот подход, который вам нужен.
Документация : Apache Tomcat - Кластеризация / репликация сеанса КАК
Балансировка нагрузки также может происходить без кластеризации, когда у нас есть несколько независимых серверов с одинаковыми настройками, но отличными от которые не знают друг друга. Затем мы можем использовать балансировщик нагрузки для перенаправлять запросы на один или другой сервер, но один сервер делает не использовать ресурсы другого сервера. Также один ресурс не делиться своим состоянием с другими ресурсами.
Фундаментальной особенностью балансировщика нагрузки является возможность распределять входящие запросы по нескольким внутренним серверам в кластере в соответствии с алгоритмом планирования.
На обеих архитектурах вам нужно что-то, что реализует балансировщик нагрузки, для этого единственным вариантом является использование HTTP-сервера Apache .
Для реализации балансировщика нагрузки в Apache Http Server у вас есть несколько вариантов:
собственного соединителя JK
mod_proxy
Ссылка: