Балансировка загрузки Spring

Я работаю над приложением для весенней загрузки.

Я хочу знать, как разместить балансировщик нагрузки перед приложением, чтобы распределить нагрузку по некоторому количеству серверов.

Я погуглил и обнаружил, что есть некоторые API Netflix, такие как Eureka, Hystrix, Ribbon и Archaius, которые помогут выполнить laod балансирующая работа.

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

Я просматриваю все это, но не могу найти точку входа для запуска. На самом деле я не понимаю, с чего начать.


person mahendra kawde    schedule 06.10.2015    source источник
comment
Посмотрите этот вопрос: stackoverflow.com/questions/31901054/. И вам также следует ознакомиться с spring-cloud.   -  person Ákos Ratku    schedule 06.10.2015
comment
@ ÁkosRatku Я посмотрю.   -  person mahendra kawde    schedule 06.10.2015
comment
@ ÁkosRatku Я все еще не понимаю, как это сделать   -  person mahendra kawde    schedule 06.10.2015
comment
@ ÁkosRatku, не могли бы вы предоставить мне пример, демонстрирующий концепцию балансировки нагрузки?   -  person mahendra kawde    schedule 06.10.2015
comment
Вы можете пойти по пути Netflix, но, в конце концов, ваш прокси Zuul станет единственной точкой отказа, если вы не распространите его. И если да, то у вас та же проблема, что и раньше. Если ваше приложение не использует какие-либо сеансы, вы можете напрямую поставить любой балансировщик нагрузки и заставить его работать. Если вы используете сеансы, вам необходимо заставить ваше приложение синхронизировать эти данные, например с помощью весенней сессии.   -  person daniel.eichten    schedule 06.10.2015
comment
@hrrgttnchml Я просто хочу сгруппировать свое приложение на множестве разных серверов, чтобы добиться высокой доступности и надежности.   -  person mahendra kawde    schedule 06.10.2015
comment
@mahendrakawde Эту часть я понял. Но как выглядит сборка вашего приложения? Использует ли он веб-модуль? Предлагает ли он услуги по отдыху / мылу, веб-сайт и т. Д.? Эти аспекты повлияют на то, как вы сможете достичь того, к чему стремитесь. Плюс то, что у меня есть сейчас, вы всего лишь пытаетесь быть доступным, но на самом деле не хотите распределять нагрузку, верно?   -  person daniel.eichten    schedule 06.10.2015
comment
@hrrgttnchml Мое приложение предлагает веб-службы на основе REST. На самом деле я хотел распределить нагрузку.   -  person mahendra kawde    schedule 06.10.2015
comment
@hrrgttnchml Я просматриваю API Netflix, но мне трудно понять. Если бы есть пример, демонстрирующий, как это было бы иметь значение. Теоретически я понял, что именно делает балансировщик нагрузки, каково значение Ribbon, Hystrix, но техническая реализация - это то, что я ищу. \   -  person mahendra kawde    schedule 06.10.2015
comment
@mahendrakawde здесь есть несколько рабочих примеров: github.com/spring-cloud-samples   -  person Ákos Ratku    schedule 06.10.2015
comment
@ ÁkosRatku Я не вижу там примеров на ленте ИЛИ связанных с балансировкой нагрузки   -  person mahendra kawde    schedule 06.10.2015
comment
@mahendrakawde забудь о весеннем облаке netflix. Это больше нацелено на вызовы балансировки нагрузки внутри вашего приложения, но не из внешнего мира. Смотрите мой ответ ниже.   -  person daniel.eichten    schedule 06.10.2015
comment
@hrrgttnchml хорошо, я видел твой ответ. См. Это dzone.com/articles/externalizing-session-state   -  person mahendra kawde    schedule 06.10.2015


Ответы (2)


Вы можете использовать HAProxy

Вы можете запустить его на своем сервере с вашим собственным файлом конфигурации, например:

global
   daemon
   maxconn 256

defaults
   mode tcp
   timeout connect 5000ms

listen http-in
   timeout client 180s
   timeout server 180s
   bind 127.0.0.1:80
   server server1 157.166.226.27:8080 maxconn 32 check
   server server2 157.166.226.28:8080 maxconn 32 check
   server server3 157.166.226.29:8080 maxconn 32 check
   server server4 157.166.226.30:8080 maxconn 32 check
   server server5 157.166.226.31:8080 maxconn 32 check
   server server6 157.166.226.32:8080 maxconn 32 check

Это позволит распределить каждый HTTP-запрос, поступающий на порт 80 локального хоста, по перечисленным серверам с использованием алгоритма циклического перебора. Подробнее см. Документацию HAProxy.

person Michał Kowalczyk    schedule 06.10.2015

Понимая, что ваше приложение предлагает услуги REST, я предлагаю вам не углубляться в изучение Netflix API. Это здорово, но не поможет в вашем случае. Предлагаю вам взглянуть на ha-proxy, nginx или http://httpd.apache.org/docs/2.4/mod/mod_proxy_balancer.html для простой балансировки нагрузки. Хорошая часть состоит в том, что вам не нужно проверять липкость сеанса, поскольку REST по умолчанию не имеет состояния.

person daniel.eichten    schedule 06.10.2015
comment
См. Это dzone.com/articles/externalizing-session-state. Это как-то связано с тем, что вы предлагаете? - person mahendra kawde; 06.10.2015
comment
Да, что касается части nginx. Забудьте о весенней сессии. Вы раскрываете службы REST, которые не используют сеансы. - person daniel.eichten; 06.10.2015
comment
в порядке. Я просто пойду через это и дам вам знать. Кстати, спасибо за быстрый ответ и ваши старания :) - person mahendra kawde; 06.10.2015