img

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

 

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

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

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

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

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

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

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

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

Шлюз API

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

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

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

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

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

Шлюз 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 предоставляет интерфейс между клиентом и сервером, в то время как балансировщик нагрузки распределяет входящие запросы между несколькими серверами и службами для того, чтобы повысить производительность и уровень доступности. И несмотря на тот факт, что у них довольно схожее назначение, они не являются взаимозаменяемыми и довольно часто используются в рамках архитектуры на основе микрослужб совместно. И то, и другое позволяет микрослужбам сконцентрироваться на своих собственных задачах и повышает общую производительность системы, а также улучшает ее масштабируемость и повышает уровень надежности. 

Ссылка
скопирована
Программирование
Скидка 25%
Python-программист с нуля
Стань разработчиком на одном из самых популярных языков программирования.
Получи бесплатный
вводный урок!
Пожалуйста, укажите корректный e-mail
отправили вводный урок на твой e-mail!
Получи все материалы в telegram и ускорь обучение!
img
Еще по теме:
img
За последние годы микросервисы прошли путь от обычного переоцененного модного словечка до вещи, которую вы, как специалист по пр
img
Введение Резидентные базы данных (или хранилища в памяти) по большей части делают упор на хранилище данных в памяти, а не на жес
img
  Многие люди рассуждают так: «зачем, ну зачем мне изучать еще один язык программирования?» Для них это лишнее, и они стараютс
img
Введение Объекты в Kubernetes – это базовые постоянные сущности, которые описывают состояние кластера Kubernetes. Модули – это э
img
  Ключевые отличия между JDK, JRE и JVM: JDK – это набор средств для разработки программного обеспечения, JRE – это програ
img
  Довольно часто мы встречаемся с компонентами архитектуры программного обеспечения, которые являются частью любой системы, но п
Комментарии
ЛЕТНИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59