Как балансировать нагрузку между серверами: разбираем на примерах


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

Технологии сглаживания перегрузки и для чего они необходимы

Для распределения перегрузки употребляют технологии балансировки перегрузки (server load balancing), с помощью их делят запросы по различным серверам. В общем и целом теория балансировки смотрится просто — запросы от юзеров поступают в некоторое централизующее приложение, которое направляет их далее на обработку в остальные приложения.

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

Также балансировка увеличивает скорость ответа — если запросов очень много, их можно пораздавать на большее количество остальных серверов. В среднем поток перегрузки на каждую машинку станет меньше, мы вроде бы «размазываем» нагрузку наиболее узким слоем по всей инфраструктуре. Это означает, что любой сервер может отвечать на запросы чуток резвее.

Как реализуют балансировку перегрузки на практике?

Балансировка перегрузки на домене

Самый обычный метод — балансировать запросы клиентов через ваше доменное имя. Допустим, ваш бэкенд вертится на адресе домена api.kotyatki.com. Ему соответствует общественный IP-адрес ХХХ.ХXХ.ХXX.ХXX, по которому находится сервер бэкенда.

Читайте:  Диплинк для Инстаграм и других соцсетей

Можно испытать на уровне DNS-сервера добавить к домену api.kotyatki.com 2-ой адресок — YYY.YYY.YYY.YYY. Это приведет к тому, что часть запросов на домен api.kotyatki.com попадет на наш 1-ый адресок XXX.XXX.XXX.XXX, а часть — на 2-ой YYY.YYY.YYY.YYY.

Какая часть запросов попадет на 1-ый адресок и какая на 2-ой? Мы не знаем. Никто не понимает. Это зависит от разных переменных, так что наверное сказать нереально, и, на самом деле, таковая балансировка будет неуправляемой.

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

Ставим балансировщик

Вариант номер два — на ваш домен api.kotyatki.com мы ставим особый сервер, который умеет принимать запросы от клиентов, распределять и передавать их далее. Это обычная и стремительная операция, она дает возможность отвечать клиентам практически одномоментно.

Таковой сервер воспринимает клиентские запросы и передает их серверам, на которых работает ваш бэкенд. Эти рабочие серверы сами на запросы клиентов не отвечают. Так мы получаем 10-ки серверов, работающих по одному адресу и прячущихся за сервером-посредником.

Этот посредник и именуется балансировщиком. В качестве примера можно привести HAProxy, Envoy, nginx. Load balancing при помощи nginx считается одним из самых фаворитных решений, потому что этот веб-сервер весьма многофункциональный и гибкий в настройке.


Ваш комментарий

Ваш адрес email не будет опубликован.

Для отправки комментария, поставьте отметку, что разрешаете сбор и обработку ваших персональных данных . Политика конфиденциальности

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.