Load Balancer - Вопрос для собеседования по разработке системы

Опубликовано: 24 Мая, 2021

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

Когда веб-сайт становится чрезвычайно популярным, трафик на этом веб-сайте увеличивается, а также увеличивается нагрузка на один сервер. Одновременный трафик перегружает один сервер, и веб-сайт становится медленнее для пользователей. Чтобы удовлетворить запрос на такие большие объемы данных и быстро и надежно вернуть правильный ответ, нам необходимо масштабировать сервер. Это можно сделать, добавив в сеть больше серверов и распределяя все запросы по этим серверам. Но…. кто будет решать, какой запрос на какой сервер направлять… ???
Ответ… Балансировщик нагрузки . Давайте подробнее разберемся с концепцией балансировщика нагрузки…

Что такое балансировщик нагрузки?

Балансировщик нагрузки работает как «гаишник», который сидит перед вашим сервером и маршрутизирует клиентские запросы по всем серверам. Он просто эффективно распределяет набор запрошенных операций (запросы на запись в базу данных, запросы кэширования) между несколькими серверами и гарантирует, что ни один сервер не будет обрабатывать слишком много запросов, которые приводят к снижению общей производительности приложения. Балансировщик нагрузки может быть физическим устройством или виртуализированным экземпляром, работающим на специализированном оборудовании или программном процессе.
Рассмотрим сценарий, в котором приложение работает на одном сервере, а клиент подключается к этому серверу напрямую без балансировки нагрузки. Это будет выглядеть примерно так…

Нам нужно обсудить две основные проблемы с этой моделью…

  • Единая точка отказа: если сервер выйдет из строя или что-то случится с сервером, все приложение будет прервано, и оно будет недоступно для пользователей в течение определенного периода. Это создаст плохой опыт для пользователей, что неприемлемо для поставщиков услуг.
  • Перегруженные серверы: будет ограничение на количество запросов, которые может обрабатывать веб-сервер. Если бизнес растет и количество запросов увеличивается, сервер будет перегружен. Чтобы решить растущее количество запросов, нам нужно добавить еще несколько серверов, и нам нужно распределить запросы по кластеру серверов.

Чтобы решить указанную выше проблему и распределить количество запросов, мы можем добавить балансировщик нагрузки перед веб-серверами и позволить нашим службам обрабатывать любое количество запросов, добавив любое количество веб-серверов в сети. Мы можем распределить запрос по нескольким серверам. По какой-то причине, если один из серверов перейдет в автономный режим, обслуживание будет продолжено. Кроме того, задержка по каждому запросу будет уменьшаться, потому что каждый сервер больше не имеет узких мест в ОЗУ / Диске / ЦП.

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

Где обычно размещаются балансировщики нагрузки?

Ниже показано изображение, на котором можно разместить балансировщик нагрузки…

  • Между клиентским приложением / пользователем и сервером
  • Между сервером и серверами приложений / заданий
  • Между серверами приложений и серверами кешей
  • Между серверами кеширования и серверами баз данных.

Типы балансировщиков нагрузки

Мы можем добиться балансировки нагрузки тремя способами. Эти…

1. Программные балансировщики нагрузки в клиентах

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

2. Программные балансировщики нагрузки в службах

Эти балансировщики нагрузки представляют собой части программного обеспечения, которые получают набор запросов и перенаправляют эти запросы в соответствии с набором правил. Этот балансировщик нагрузки обеспечивает гораздо большую гибкость, поскольку его можно установить на любом стандартном устройстве (например, на компьютере с Windows или Linux). Это также дешевле, потому что нет необходимости покупать или обслуживать физическое устройство, в отличие от аппаратных балансировщиков нагрузки. У вас может быть возможность использовать стандартный программный балансировщик нагрузки или вы можете написать свое собственное программное обеспечение (например, запросы Active Directory для балансировки нагрузки Microsoft Office365) для балансировки нагрузки.

3. Аппаратные балансировщики нагрузки

Как следует из названия, мы используем физическое устройство для распределения трафика по кластеру сетевых серверов. Эти балансировщики нагрузки также известны как маршрутизаторы уровня 4-7, и они способны обрабатывать все виды трафика HTTP, HTTPS, TCP и UDP. HLD предоставляет внешнему миру адрес виртуального сервера. Когда запрос приходит от клиентского приложения, оно перенаправляет соединение на наиболее подходящий реальный сервер, выполняя двунаправленную трансляцию сетевых адресов (NAT). ДВУ могут обрабатывать большой объем трафика, но за это стоит очень дорого, а также он имеет ограниченную гибкость.

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

Различные категории балансировки нагрузки

Как правило, балансировщики нагрузки делятся на три категории…

1. Балансировщик нагрузки уровня 4 (L4)

В модели OSI уровень 4 - это транспортный уровень (TCP / SSL), на котором принимаются решения о маршрутизации. Балансировщик нагрузки уровня 4 также называется балансировкой сетевой нагрузки и, как следует из названия, использует информацию сетевого уровня для принятия решения о маршрутизации трафика. Он может контролировать миллионы запросов в секунду и обрабатывать все формы трафика TCP / UDP. Решение будет основано на портах TCP или UDP, используемых пакетами, а также на их IP-адресах источника и назначения. Балансировщик нагрузки L4 также выполняет преобразование сетевых адресов (NAT) для пакета запроса, но не проверяет фактическое содержимое каждого пакета. Эта категория балансировщиков нагрузки максимизирует использование и доступность, распределяя трафик по IP-адресам, коммутаторам и маршрутизаторам.

2. Балансировщик нагрузки уровня 7 (L7)

Балансировщик нагрузки уровня 7 также называется балансировщиком нагрузки приложений или балансировщиком нагрузки HTTP (S) . Это одна из старейших форм балансировки нагрузки. В модели OSI уровень 7 - это прикладной уровень (HTTP / HTTPS), на котором выполняются решения о маршрутизации. Уровень 7 добавляет переключение контента к балансировке нагрузки и использует такую информацию, как HTTP-заголовок, файлы cookie, унифицированный идентификатор ресурса, идентификатор сеанса SSL и данные HTML-формы, чтобы определить запрос маршрутизации между серверами.

3. Глобальная балансировка нагрузки на сервер (GSLB)

Сегодня множество приложений размещается в облачных центрах обработки данных в разных географических точках. По этой причине многие организации переходят на другой балансировщик нагрузки, который может доставлять приложения с большей надежностью и меньшей задержкой на любое устройство или место. Благодаря значительному изменению возможностей балансировщиков нагрузки GSLB оправдывает ожидания ИТ-организаций. GSLB расширяет возможности серверов L4 и L7 в разных географических точках и эффективно распределяет большой объем трафика между несколькими центрами обработки данных. Это также обеспечивает согласованный опыт для конечных пользователей при навигации по нескольким приложениям и службам в цифровом рабочем пространстве.

Алгоритмы балансировки нагрузки

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

1. Круговая система

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

2. Взвешенный круговой алгоритм

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

3. Метод наименьшего подключения

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

4. Метод наименьшего времени отклика

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

5. Хеш исходного IP-адреса

В этом методе запрос отправляется на сервер на основе IP-адреса клиента. IP-адрес клиента и получающего вычислительного экземпляра вычисляется с помощью криптографического алгоритма.

Как использовать балансировку нагрузки во время собеседований по проектированию системы?

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

  • Балансировщик нагрузки обеспечивает эластичную масштабируемость, повышающую производительность и пропускную способность данных. Это позволяет хранить множество копий данных (избыточность) для обеспечения доступности системы. В случае, если сервер выйдет из строя или выйдет из строя, у вас будет резервная копия для восстановления служб.
  • Балансировщики нагрузки можно разместить на любом программном уровне.
  • Многие компании используют как оборудование, так и программное обеспечение для реализации балансировщиков нагрузки, в зависимости от различных точек масштабирования в их системе.

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