API Gateway против Load Balancer
Beng Chen
March 3, 2023
С развитием интернет-технологий количество запросов на сетевые данные значительно увеличилось, что создает большую нагрузку на серверы. В архитектуре систем ранних дней для распределения сетевого трафика между несколькими серверами обычно использовался балансировщик нагрузки, тем самым снижая нагрузку на отдельный сервер.
Однако в настоящее время многие различные типы серверных служб предоставляют API для внешнего мира, что приводит к увеличению количества API. В результате ограничения архитектуры систем, которые в основном полагаются на балансировщики нагрузки, стали очевидными, поскольку они в основном работают на уровне 4 и имеют ограниченные возможности на уровне 7. Это привело к появлению инфраструктуры под названием API Gateway, которая в основном работает на уровне 7 и предлагает широкие возможности расширения.
В этой статье мы представим отличительные особенности балансировщика нагрузки и API-шлюзов, а также рассмотрим их различия, чтобы помочь читателям лучше понять их взаимосвязь.
Что такое балансировщик нагрузки?

Основная роль балансировщика нагрузки заключается в предоставлении функциональности балансировки нагрузки для нескольких серверных служб, позволяя им распределять трафик на основе различных алгоритмов балансировки нагрузки. История балансировщиков нагрузки обширна и может быть примерно разделена на следующие этапы:
-
Первый этап: Балансировщики нагрузки на этом этапе обычно состоят из аппаратных устройств, которые обладают высокой производительностью и высокой надежностью, но негибки и дороги.
-
Второй этап: Балансировщики нагрузки начали реализовываться в программном обеспечении, что сделало их более гибкими и масштабируемыми, часто появляясь в программных дистрибутивах и, следовательно, менее дорогими. LVS (Linux Virtual Server) является примером такого типа.
-
Третий этап: С ростом технологии облачных вычислений балансировщики нагрузки также начали иметь облачные версии. Одним из значительных преимуществ такого балансировщика нагрузки является то, что он может помочь предприятиям получить высокопроизводительные услуги балансировки нагрузки по более низкой стоимости. Другим преимуществом является то, что он может использовать масштабируемость и эластичность облачных вычислений для повышения общей доступности. Примерами облачных балансировщиков нагрузки являются
Classic Load Balancer,Application Load BalancerиNetwork Load Balancerот AWS.
Помимо распределения трафика и улучшения масштабируемости сети, балансировщики нагрузки также могут использоваться для повышения сетевой безопасности. Например, они могут использоваться для изоляции внутренних серверов от публичного интернета, предотвращая злонамеренные атаки и несанкционированный доступ. Простым примером использования является внутренний сервер, содержащий конфиденциальную информацию, который балансировщик нагрузки может изолировать во внутренней сети для эффективной защиты его безопасности.
Что такое API Gateway?

В краткосрочной перспективе API Gateway — это инфраструктура, которая управляет и перенаправляет трафик API, в основном работая на уровне 7. Она предоставляет мощные возможности расширения, которых нет у балансировщиков нагрузки, включая аутентификацию, наблюдаемость и пользовательские плагины. Некоторые из его ключевых функций:
-
Богатые стратегии маршрутизации: Поскольку API Gateway работает на уровне 7, он может анализировать данные на уровне HTTP/HTTPS. Следовательно, он может направлять запросы на различные вышестоящие серверы на основе таких условий, как путь запроса, домен или заголовок.
-
Аутентификация: API Gateway поддерживает несколько методов аутентификации на уровне API для предотвращения несанкционированных запросов, таких как OAuth2 и JWT. Аутентификация может быть отделена от бизнес-логики и оставаться независимой, чтобы быть ненавязчивой или минимально навязчивой для бизнес-кода.
-
Ограничение скорости: Мелкозернистое ограничение скорости может быть применено к различным уровням маршрутизации для предотвращения злонамеренных атак и избежания перегрузки серверных служб.
-
Наблюдаемость: Наблюдаемость относится к способности наблюдать за состоянием работы и использованием ресурсов внутренней программы извне системы. API Gateway поддерживает связывание логов с Kafka, Google Cloud Logging Service, Elasticsearch и т.д., а также связывание соответствующих метрик с prometheus, datadog и т.д.
-
Расширение: Поскольку сам API Gateway является шлюзом, он разработан для того, чтобы адаптироваться к различным сценариям применения разных компаний, таким как различные методы аутентификации, канареечные выпуски, политики безопасности и сбор логов. Более того, API Gateway должен позволять пользователям выбирать расширения или осуществлять пользовательскую разработку; следовательно, масштабируемость сильна, и выбор доступных расширений довольно разнообразен. Например, Apache APISIX имеет 13 различных расширений аутентификации, почти охватывая все распространенные требования к аутентификации на рынке.
В настоящее время на рынке доступно множество различных API-шлюзов, таких как Apache APISIX, Kong, Tyk, Zuul и т.д. Разработчики могут выбрать наиболее подходящий API Gateway в соответствии с их конкретными требованиями.
Основные различия между API Gateway и балансировщиком нагрузки
Различные области фокуса

Хотя и API Gateway, и балансировщик нагрузки поддерживают прокси на уровне 4 и уровне 7, API Gateway в основном фокусируется на уровне 7, а балансировщик нагрузки — в основном на уровне 4.
Поэтому балансировщик нагрузки, работающий на уровне 4, имеет множество преимущественных особенностей. Во-первых, он снижает накладные расходы на анализ протоколов по сравнению с API Gateway, что приводит к более высокой пропускной способности. Во-вторых, он поддерживает прозрачную пересылку IP-адресов клиентов, тогда как API Gateway обычно передает IP-адреса клиентов через HTTP-заголовки.
Богатство функций

Например, балансировщики нагрузки имеют более слабые возможности обработки на уровне HTTP 7 и часто не имеют таких функций, как аутентификация, авторизация, сложная логика маршрутизации и сбор логов. В то время как API-шлюзы имеют более сильные возможности обработки протоколов уровня 7 и могут прикреплять различные расширения функций, такие как управление доступом, логирование, управление API и бессерверные вычисления.
Пользовательская разработка
В быстро развивающемся технологическом рынке многие компании требуют возможности поддержки пользовательской разработки. API-шлюзы предлагают различные варианты пользовательской разработки, такие как поддержка различных языков программирования и возможность внедрения пользовательской логики обработки на различных этапах пересылки трафика. С другой стороны, балансировщики нагрузки не предлагают никаких вариантов пользовательской разработки.
Способы распределения трафика
Балансировщики нагрузки обычно используют прямое распределение трафика для достижения балансировки нагрузки. С помощью алгоритмов данные трафика отправляются непосредственно на определенные узлы серверов, что означает, что каждый экземпляр службы, ожидающий получения трафика, должен вести себя одинаково, что снижает некоторую гибкость. В отличие от этого, API-шлюзы распределяют трафик на основе различных измерений, таких как URL Path, Domain и Header. В результате экземпляры служб, ожидающие получения трафика, могут различаться, например, частный API или GRPC API, что делает распределение трафика высоко гибким.
Примеры использования
Пример использования в микросервисах

Для систем с архитектурой микросервисов API Gateway является обязательным. Во-первых, он может легко управлять и маршрутизировать различные серверные службы. Во-вторых, API Gateway может предоставлять множество продвинутых функций, таких как аутентификация, авторизация, ограничение скорости, пересылка и логирование. Поэтому различные микросервисы больше не нуждаются в повторной реализации функций, таких как ограничение скорости и аутентификация, что делает реализацию функций каждого микросервиса более сфокусированной и снижает затраты на разработку.
Микросервисы архитектура включает множество служб, что делает балансировщики нагрузки уровня 4 непригодными для балансировки нагрузки нескольких серверных служб. Вместо этого они более подходят для использования с монолитными серверными службами. В то же время балансировщики нагрузки уровня 7 обычно не могут предложить продвинутые функции, что делает их преимущества перед API-шлюзами в микросервисах менее значительными.
Управление и развертывание API
API Gateway также очень подходит в сценариях, где необходимо управлять и развертывать большое количество API, так как он обладает мощными возможностями управления API. В этом случае вы можете легко включить или отключить конкретный API, быстро изменить конфигурацию пересылки API и добавить такие функции, как ограничение скорости, аутентификация и логирование, к API без необходимости перезапуска API Gateway.
В качестве примера можно привести Apache APISIX, который является топовым проектом с открытым исходным кодом под эгидой Apache Foundation и в настоящее время является самым активным проектом шлюза с открытым исходным кодом. Как динамический, реального времени и высокопроизводительный API Gateway с открытым исходным кодом, Apache APISIX предоставляет различные функции управления трафиком, такие как балансировка нагрузки, динамический вышестоящий сервер, канареечные выпуски, прерывание цепи, аутентификация, наблюдаемость и т.д.


С другой стороны, традиционные балансировщики нагрузки относительно слабее в управлении API и не имеют таких богатых продвинутых функций.
Высокопроизводительный сетевой доступ
Для сценариев, требующих высокого трафика и чрезвычайно высокой стабильности сетевого доступа, балансировщик нагрузки уровня 4, очевидно, более подходит. Он может напрямую распределять исходный трафик уровня 4 сети на каждую серверную службу без влияния множественного анализа протоколов уровня приложения в промежуточных слоях, что делает его более способным обрабатывать более высокую пропускную способность.
В отличие от этого, API Gateway, работающий на уровне 7, как единая точка входа, будет иметь определенный предел пропускной способности из-за необходимости анализа протоколов. Даже использование API Gateway уровня 4 для сетевого доступа не является особенно выгодным, поскольку этот уровень не является фокусом API Gateway. По сравнению с многолетним техническим накоплением балансировщиков нагрузки на этом уровне, преимущества API-шлюзов значительно менее значительны.
Резюме
В целом, API Gateway и балансировщик нагрузки — это инфраструктурные решения, используемые для решения различных проблем. API Gateway в основном используется как прокси для серверных API-интерфейсов, предоставляя единую точку доступа к различным типам API и независимые функции, такие как ограничение скорости, аутентификация и мониторинг. С другой стороны, балансировщик нагрузки в основном используется для распределения трафика уровня 4, распределяя запросы между несколькими серверными серверами для балансировки нагрузки запросов и повышения общей доступности и отказоустойчивости системы.
При разумной архитектурной конструкции API Gateway и балансировщик нагрузки обычно используются вместе. Балансировщик нагрузки является сетевым доступом для всей системы, распределяя трафик на несколько экземпляров API Gateway. Каждый экземпляр API Gateway затем маршрутизирует, аутентифицирует и авторизует запросы отдельно, чтобы сделать всю сеть более надежной, стабильной и масштабируемой.