Масштабирование веб-приложения горизонтально в Tomcat (выравнивание нагрузки / кластеризирующийся)

Я разрабатываю простое веб-приложение стиля 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 Кота на двух отдельных машинах?

Какой я должен выбрать? Я неправильно понимаю что-то? Статьи, ответы ценятся.

4
задан 15 October 2014 в 23:06
1 ответ

Сначала вы видите различия между обоими вариантами балансировки нагрузки (без кластера) и Кластер с репликацией .

Кластеризация имеет формальное значение. Кластер - это группа ресурсов которые пытаются достичь общей цели и знают об одном еще один. Кластеризация обычно включает настройку ресурсов (серверов обычно) для обмена данными по определенному каналу (порту) и сохранения обмениваются своими состояниями, поэтому состояние ресурса воспроизводится в других места тоже. Обычно он также включает в себя балансировку нагрузки, в которой запрос направляется на один из ресурсов кластера в соответствии с политика балансировки нагрузки.

Кластерная архитектура используется для решения одной или нескольких из следующих проблем:

  • Один сервер не может обрабатывать большое количество входящих запросов эффективно
  • Приложению с отслеживанием состояния необходим способ сохранения данных сеанса, если его отказ сервера
  • Разработчику требуется возможность вносить изменения в конфигурацию или развертывают обновления для своих приложений, не прерывая обслуживания.

Кластерная архитектура решает эти проблемы, используя комбинацию балансировки нагрузки, нескольких серверов для обработки сбалансированной нагрузки и репликации сеансов.
В вашем случае репликация сеанса не требуется, для этого я думаю, что конфигурация кластера - это не тот подход, который вам нужен.

Документация : Apache Tomcat - Кластеризация / репликация сеанса КАК

Балансировка нагрузки также может происходить без кластеризации, когда у нас есть несколько независимых серверов с одинаковыми настройками, но отличными от которые не знают друг друга. Затем мы можем использовать балансировщик нагрузки для перенаправлять запросы на один или другой сервер, но один сервер делает не использовать ресурсы другого сервера. Также один ресурс не делиться своим состоянием с другими ресурсами.

Фундаментальной особенностью балансировщика нагрузки является возможность распределять входящие запросы по нескольким внутренним серверам в кластере в соответствии с алгоритмом планирования.

На обеих архитектурах вам нужно что-то, что реализует балансировщик нагрузки, для этого единственным вариантом является использование HTTP-сервера Apache .

tomcat load balanceer

Для реализации балансировщика нагрузки в Apache Http Server у вас есть несколько вариантов:

  • Использование собственного соединителя JK
  • Использование Apache HTTP mod_proxy

Ссылка:

5
ответ дан 3 December 2019 в 03:17

Теги

Похожие вопросы