Наличие балансировки нагрузки перед Akka Http несколькими приложениями - PullRequest
0 голосов
/ 01 мая 2019

У меня есть несколько идентичных приложений Scala Akka-HTTP, каждое из которых установлено на выделенном сервере (около 10 приложений), отвечая на запросы HTTP на порт 80. Перед этой настройкой я использую один экземпляр HAproxy, который получает все входящий трафик и балансирует нагрузку на эти 10 серверов.

Мы хотели бы изменить HAproxy (мы подозреваем, что это вызывает у нас проблемы с задержкой) и использовать другой балансировщик нагрузки. Требуется принять другой сторонний балансировщик нагрузки или разработать простой с использованием scala, который циклически перебирает каждый http-запрос к http-приложениям бэкэнда akka и проксирует ответ.

  1. Есть ли другой рекомендованный балансировщик нагрузки (с открытым исходным кодом), который я могу использовать для балансировки / прокси входящих запросов http для нескольких приложений, кроме HAproxy (возможно, APACHE httpd)?

  2. Имеет ли смысл написать простой маршрут приложения akka http в качестве loadbalancer, зарегистрировать хосты серверных приложений в каком-либо файле конфигурации и округлить запросы к ним?

  3. может быть, я должен рассмотреть кластер Akka для этой цели? Дело в том, что приложения уже являются автономными сервисами akka http без поддержки кластера. и, возможно, это будет слишком много для кластеризации. (хотелось бы, чтобы все было просто)

Как лучше всего загружать запросы баланса в приложения http (особенно в приложениях akka http scala), так как я могу что-то здесь упустить?

Примечание. Наличие обратного давления - это то, что мы также хотели бы иметь в виду, что если серверы заняты, мы хотели бы ответить 204 или некоторым кодом состояния, чтобы у наших клиентов не было тайм-аутов в случае, если мой сервер занят .

1 Ответ

0 голосов
/ 05 мая 2019

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

Я не уверен, где вы развертываете свое приложение, но лучший (и более безопасный) подход - это использовать LB, предоставленный вашим облачным провайдером. У большинства из них есть один, и обычно это имеет хорошую выгоду-стоимость.

Если ваш облачный провайдер не предоставляет его или вы сами размещаете свое приложение, то сначала вы должны взглянуть на HAProxy. Вы выполняли тесты на HAProxy изолированным способом, чтобы увидеть, что он все еще имеет те же проблемы с задержкой? Вы уверены, что конфиг оптимизирован для того, что вы хотите? Достаточно ли у вашего HAProxy ресурсов (процессора и памяти) для работы? Ваш HAProxy находится в том же центре обработки данных, что и развернутое приложение?

Если вы следите и проверяете все эти вопросы и у вас все еще есть проблемы с задержкой, то я бы порекомендовал вам выбрать другой. Есть тонны, такие как Envoy и NGINX . Мне действительно нравится Envoy, и я использую его на работе уже несколько месяцев без каких-либо жалоб.

Надеюсь, я смогу помочь.

[] s

...