7,1K подписчиков

Собеседование по проектированию систем: разница между шлюзом API и балансировщиком нагрузки

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

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

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

В этой статье я хочу познакомить вас с этими двумя компонентами хотя бы на базовом уровне.

Давайте начнем с того, что определим некоторые родственные термины.

Что такое микрослужбы?

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

Что такое шлюз API?

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

Довольно часто мы встречаемся с компонентами архитектуры программного обеспечения, которые являются частью любой системы, но при этом понимаем, что мы не так много о них знаем.-2

Шлюз API

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

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

В чем разница между шлюзом API и балансировщиком нагрузки?

Шлюз API делает акцент на маршрутизации запросов к соответствующим микрослужбам, а вот балансировщик нагрузки – на равномерном распределении запросов между внутренними серверами.

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

Довольно часто мы встречаемся с компонентами архитектуры программного обеспечения, которые являются частью любой системы, но при этом понимаем, что мы не так много о них знаем.-3

Шлюз API и балансировщик нагрузки

Шлюз API: шлюз API – это разновидность связующего программного обеспечения, которое располагается между клиентом и группой микрослужб. Главная задача такого ПО заключается в том, что оно направляет запросы клиентов к подходящей микрослужбе, а затем возвращает ответ от микрослужбы обратно клиенту. Кроме того, шлюз API может выполнять и другие задачи, например, авторизацию, лимитирование скорости и кэширование.

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

Есть еще одно различие – тип обрабатываемых запросов. В большинстве случаев шлюз API используется для обработки запросов на доступ к API, которые по своей сути являются веб-интерфейсами, с помощью которых приложения могут взаимодействовать друг с другом через Интернет. У этих запросов, как правило, есть определенный URL-адрес, который непосредственно указывает на API, к которому клиент пытается получить доступ, и в зависимости от этого URL шлюз API направляет запрос к соответствующей микрослужбе. А вот балансировщик нагрузки обычно используется для обработки запросов, которые изначально отправляются на один общеизвестный IP-адрес, и которые затем направляются на один из множества возможных внутренних серверов с учетом таких факторов, как производительность и доступность.

Применение шлюза API

Шлюзы API применяются в архитектурах на основе микрослужб для самых различных целей, в том числе:

  1. Маршрутизация: шлюз API получает запросы от клиентов и направляет их на соответствующую микрослужбу. Таким образом, клиенты могут получать доступ к разным микрослужбам через единую точку входа, и при этом структура системы выглядит более простой.
  2. Лимитирование скорости: с помощью шлюза API вы можете ограничить доступ клиента к микрослужбе. Таким образом, вы можете предотвратить DoS-атаки (атаки-типа «отказ в обслуживании») и прочую вредоносную активность.
  3. Кэширование: шлюз API может кэшировать ответы, полученные от микрослужб, сокращая таким образом количество запросов, которые нужно перенаправить в микрослужбы, и повышая общую производительность системы.
  4. Аутентификация и авторизация: шлюз API можно применять для аутентификации клиентов и реализации политик контроля доступа в отношении микрослужб. Таким образом, вы можете гарантировать, что доступ к микрослужбам смогут получить только авторизированные клиенты. Кроме того, это помогает предотвратить попытки несанкционированного доступа.
  5. Балансировка нагрузки: шлюз API может распределять входящие запросы между несколькими экземплярами микрослужб. Таким образом, система сможет обрабатывать большее количество запросов, а ее общая производительность и способность к масштабированию увеличится.
  6. Наблюдение и контроль: шлюз API может собирать метрики и прочие данные о запросах и ответах, предоставляя полезную информацию, касающуюся производительности и поведения микрослужб. Таким образом, вы можете выявлять и диагностировать проблемы. Кроме того, это может повысить общий уровень надежности и отказоустойчивости системы.
  7. Преобразование: вы можете использовать шлюз API для того, чтобы преобразовывать данные, полученные от микрослужб, в формат, который будет удобен для клиента. Сюда относятся такие задачи, как преобразование между различными форматами данных (XML, JSON и т.д.) или объединение данных из разных микрослужб в один ответ.
  8. Проверка запросов и ответов: вы можете воспользоваться шлюзом API для того, чтобы проверить, соответствуют ли запросы и ответы от микрослужб ожидаемому формату и структуре. Таким образом, вы можете предотвратить ненужные ошибки и обеспечить корректную работу микрослужб.
  9. Автоматический выключатель: шлюз API можно использовать для реализации шаблона автоматического выключения. Этот шаблон позволит избежать того факта, что вся сеть выйдет из строя из-за отказа какой-то одной микрослужбы. Автоматический выключатель может отслеживать состояние микрослужб и в случае чего автоматически переключаться на резервную службу.
  10. Обнаружение служб: шлюз API можно применять для обнаружения доступных микрослужб и их местоположений. За счет этого клиенты могут получать к ним доступ, даже не зная их точных адресов. Таким образом, процесс добавления новых микрослужб или внесение изменений в уже существующие может стать куда проще, и, кроме того, он никак не будет затрагивать клиентов.

Преимущества применения шлюза API

Здесь приведены некоторые преимущества использования шлюза API:

  1. Повышенная производительность: за счет выполнения таких задач, как маршрутизация и балансировка нагрузки, шлюз API может повысить общую производительность системы, что, в свою очередь, позволяет обрабатывать больше запросов и быстрее отвечать клиентам.
  2. Упрощенная структура системы: шлюз API предоставляет единую точку входа для клиентов и, таким образом, делает структуру системы более простой, а клиентам становится проще получать доступ к различным микрослужбам.
  3. Повышенный уровень безопасности: шлюз API можно применять для проведения аутентификации и обеспечения выполнения политик контроля доступа, помогая тем самым предотвратить несанкционированный доступ и повысить уровень безопасности системы.
  4. Улучшенная масштабируемость: шлюз API может распределять входящие запросы между несколькими экземплярами микрослужб. За счет этого система может с легкостью масштабироваться и обрабатывать больше запросов.
  5. Более эффективный контроль и лучшая наблюдаемость: шлюз API может собирать метрики и прочие данные о запросах и ответах, предоставляя полезную информацию, касающуюся производительности и поведения системы. Это может помочь в выявлении и диагностировании проблем. Кроме того, это может повысить общий уровень надежности и отказоустойчивости системы.

Недостатки применения шлюза API

Вместе с тем, у применения шлюза API есть несколько потенциальных недостатков, в том числе:

  1. Возросшая сложность: применение шлюза API может привнести дополнительную сложность в систему, а это может затруднить управление и обслуживание.
  2. Накладные расходы по производительности: шлюз API может привести к некоторым дополнительным затратам вычислительных ресурсов, связанных с производительностью, так как он добавляет еще один уровень пути запрос-ответ, который должны пройти клиенты.
  3. Единая точка отказа: в случае, если шлюз API не был спроектирован и реализован должным образом, он может стать единой точкой отказа. Это может повлиять на общий уровень надежности и доступности системы.

Заключение

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