Apache APISIX 3.0: 11 основных моментов Open Source API Gateway
Вышла версия 3.0 API Gateway Apache APISIX с открытым исходным кодом! Мы выбрали 11 ключевых функций, чтобы кратко их представить.
API Gateway уже давно является важным компонентом. Он предоставляет такие функции, как ограничение скорости, аутентификация (например, использование Keycloak для защиты API) и наблюдаемость на уровне бизнеса.
API Gateway Apache APISIX
Apache APISIX был создан для помощи предприятиям в решении новых задач в облачных и микросервисных средах. Например, он обеспечивает автоматическое масштабирование бизнес-трафика благодаря полностью динамическим функциям и однократным изменениям для более удобного управления кластерами.
Поэтому в архитектурном дизайне APISIX плоскость данных и плоскость управления разделены для достижения полной динамичности и управления кластерами, что в основном реализуется с помощью компонента etcd.

APISIX хранит и управляет конфигурациями, связанными с маршрутизацией и плагинами, в etcd. Как показано на рисунке выше, конфигурации из Admin API (Плоскость управления) хранятся в etcd, в то время как плоскость данных слева в основном отслеживает изменения в etcd. Плоскость данных может быстро обнаруживать изменения без необходимости изменения конфигурационных файлов.
Но просто решить эти проблемы недостаточно. Как промежуточное ПО, которое получает запросы как от upstream, так и от downstream, API Gateway играет ключевую роль в архитектуре предприятия как точка входа трафика и связующее звено между уровнями сервисов. Роль API Gateway отличается от баз данных, которые получают запросы только на уровне бизнеса пользователя.
Помимо требований на уровне бизнеса, API Gateway также имеет требования к кастомизации и интеграции. Поэтому еще одной важной задачей, которую решает APISIX, является упрощение разработки для разработчиков, снижая порог входа для написания кода.
В APISIX плагины разрабатываются в основном на Lua, а LuaJIT (Just-In-Time компилятор для Lua) используется для обеспечения достаточной производительности скомпилированного кода.
Если вы не знакомы с Lua, вы можете использовать Plugin Runner, разрабатывая плагины APISIX на знакомых вам языках программирования. Мы также встроили Wasm в APISIX, и вы можете использовать Wasm для компиляции байткода Wasm, который будет выполняться в APISIX. В результате пользователи могут использовать Lua, Go, Python, Wasm и другие языки для создания пользовательских плагинов в APISIX.
Благодаря архитектуре и производительности APISIX, рост числа пользователей APISIX по всему миру значительно превысил ожидания за три года с момента его создания. Например, крупные технологические компании, такие как WPS, Sina Weibo и iQiyi, являются корпоративными пользователями, обрабатывающими десятки миллиардов API-запросов ежедневно. Кроме того, научно-исследовательские учреждения, такие как NASA и European Factory Platform, используют APISIX.
11 новых возможностей APISIX 3.0
APISIX предложил новый дорожную карту 3.0 в начале 2022 года. В версии 3.0 итерации и обновления будут сосредоточены на удобстве использования и экосистеме.

APISIX 3.0 был официально выпущен в конце октября 2022 года. Давайте рассмотрим новые интересные возможности!
1. Полная поддержка ARM64
ARM64 стала очень популярной архитектурой серверов для облачных провайдеров. От AWS Graviton, GCP Tau T2A до Huawei Kunpeng и других продуктов, мы видим, что различные облачные провайдеры начали выпускать серверы на основе архитектуры Arm. На следующем графике показаны результаты тестирования производительности APISIX на популярных серверах на базе Arm:

Согласно текущим данным, производительность серверов на базе Arm немного лучше, чем у x86. Чтобы соответствовать технологическим трендам, APISIX также провел полное регрессионное тестирование CI на ARM64, чтобы гарантировать, что пользователи смогут бесперебойно использовать различные функции при запуске APISIX на архитектуре Arm.
2. AI Plane
Apache APISIX добавляет AI Plane в версии 3.0, что повышает производительность на 30% (измеряется по QPS при нагрузочном тестировании). AI Plane будет динамически оптимизировать конфигурацию плоскости данных, используя такие данные, как настройки маршрутов и плагинов пользователей, а также метрики логов. Например, следующие три сценария могут быть автоматически оптимизированы AI Plane:
- Когда требования к сопоставлению просты (например, только uri или host), включается кэширование для ускорения процесса сопоставления маршрутов.
- Если плагины отсутствуют, выполняется только код, связанный с upstream.
- Если есть только один узел upstream и не включены другие параметры конфигурации, upstream настраивается в облегченном режиме.
AI Plane открывает новые возможности для обработки трафика. В будущем автоматический прогрев сервисов upstream и обнаружение угроз безопасности также могут быть реализованы через AI Plane.
3. Добавление gRPC Client
В версии 3.0 Apache APISIX будет поддерживать новый модуль core.grpc. Однако, если вы знакомы с NGINX и OpenResty, вы знаете, что их поддержка gRPC довольно ограничена, предоставляя только базовые функции, такие как обратный прокси или балансировка нагрузки.
APISIX уже реализовал трансляцию между протоколами gRPC и HTTP в текущей версии 2.x. В версии 3.0 Apache APISIX добавит новый gRPC клиент, который позволит разработчикам напрямую вызывать сторонние gRPC сервисы без необходимости введения дополнительных компонентов или использования различных HTTP интерфейсов, что значительно упрощает процесс.
4. Переработка Admin API
При использовании APISIX сегодня вы можете заметить, что тело ответа APISIX содержит много бессмысленных данных, таких как некоторые возвращаемые значения etcd, которые передаются клиенту без изменений. Кроме того, архитектурный дизайн всего тела ответа не идеален, с множеством избыточных полей.
В версии APISIX 3.0 структура тела ответа была улучшена. Кроме того, новый дизайн делает общий формат запроса и тело ответа более RESTful, что упрощает использование последней версии Admin API. Конечно, этот процесс также позволяет вам установить, какую версию Admin API использовать через параметры, освобождая пользователей от страха перед обновлением до несовместимых версий.
5. Разделение Data Plane (DP) и Control Plane (CP)
APISIX столкнулся с несколькими уязвимостями, связанными с безопасностью, за последние два года. Основная причина большинства уязвимостей заключается в том, что DP и CP развертываются вместе в режиме по умолчанию. Поэтому, если на плоскости данных существует уязвимость безопасности, злоумышленник может напрямую проникнуть в CP через DP, что повлияет на все остальные DP.
Поэтому в версии 3.0 поддерживается режим развертывания, и по умолчанию используется режим traditional, где DP и CP развертываются вместе. Конечно, новый режим развертывания рекомендует установить атрибут в data_plane или control_plane, чтобы разделить их.
При разделении не только решаются упомянутые выше риски безопасности, но и итерации функций на DP и CP становятся более управляемыми, не влияя друг на друга.
6. Улучшенная поддержка Service Discovery
В текущей версии APISIX поддерживает интеграцию многих компонентов для обнаружения сервисов, таких как Apache ZooKeeper, Consul, Nacos и других. Но в настоящее время эти интеграции выполняются на плоскости данных. Если у вас много узлов на DP, это создаст большую нагрузку на компоненты для обнаружения сервисов. В то же время, в реальной производственной среде пользователи хотят простой интеграции, такой как Consul KV или DNS, и полной интеграции функций, таких как проверки здоровья.
Поэтому в APISIX 3.0 мы добавили уровень абстракции, создав подпроект APISIX-SEED для поддержки обнаружения сервисов на уровне плоскости управления и снижения нагрузки на компоненты для обнаружения сервисов.

7. Добавление xRPC Framework
В текущей версии APISIX поддерживается TCP Proxy, но иногда простого проксирования TCP-протокола недостаточно. Пользователям нужно проксирование для конкретных прикладных протоколов, таких как Redis Proxy, Kafka Proxy и т.д., потому что некоторые функции могут быть реализованы только после кодирования и декодирования протокола.
Поэтому в версии 3.0 APISIX реализует фреймворк для расширения транспортного уровня под названием xRPC, который позволяет разработчикам настраивать конкретные прикладные протоколы. На основе xRPC разработчики могут кодировать и декодировать запросы и ответы с помощью кода на Lua, а затем реализовывать инъекцию ошибок, отчеты о логах и динамическую маршрутизацию на основе понимания содержимого протокола.
На основе фреймворка xRPC APISIX может предоставлять реализации прокси для нескольких популярных прикладных протоколов. В то же время пользователи также могут поддерживать свои собственные частные TCP-протоколы на основе этого фреймворка, что позволяет им иметь точный контроль на уровне приложений, аналогичный проксированию HTTP-протокола. Кроме того, на основе различных протоколов можно абстрагировать общие факторы для реализации связанных функций плагинов, чтобы другие протоколы могли использовать эти функции.
8. Поддержка большего количества возможностей наблюдаемости на транспортном уровне
APISIX всегда уделял большое внимание поддержке наблюдаемости, поддерживая почти все компоненты наблюдаемости, такие как Zipkin, Apache SkyWalking, Datadog и другие. Различные компоненты логирования также поддерживаются, но большинство из них выполняются на уровне приложений.
Apache APISIX добавит больше поддержки наблюдаемости на транспортном уровне в версии 3.0. Например, добавлена поддержка Prometheus и различных логов, что позволяет пользователям легко наблюдать проблемы трафика на уровне приложений и проверять статус работы трафика на транспортном уровне.
9. Интеграция с OpenAPI Specification
API — это элемент, который охватывает весь жизненный цикл разработки, от проектирования до кодирования, тестирования и развертывания. В APISIX 3.0 Apache APISIX будет поддерживать стандарт OpenAPI 3.0.
Поэтому, если вы управляете API в программном обеспечении для проектирования и тестирования API, легко управлять и поддерживать данные в APISIX, экспортируя и импортируя их. В то же время, различные API в APISIX также могут быть экспортированы через спецификацию OpenAPI 3.0 и затем импортированы в другие системы для использования.
Кроме того, APISIX 3.0 также поддерживает пользовательские форматы, связанные с Postman (Postman Collection Format v2), что упрощает передачу данных между ними и делает интеграцию более удобной.
10. Полная поддержка Gateway API и Service Mesh
Поддержка Gateway API началась в APISIX Ingress Controller, и почти все конфигурации Gateway API поддерживаются в последнем выпуске 1.5.
В этом случае APISIX Ingress может быть настроен с использованием Gateway API, что означает, что вы можете переключаться между различными плоскостями данных. К концу этого года APISIX Ingress будет полностью поддерживать Gateway API и дополнительные функции транспортного и прикладного уровней.
В отличие от большинства решений для сервисной сетки, решение APISIX для сервисной сетки имеет преимущества на плоскости данных (благодаря высокой производительности самого APISIX). Поэтому при выборе плоскости управления мы надеемся, что она будет совместима с некоторыми популярными решениями в сообществе. В конечном итоге, используя протокол xDS для интеграции с Istio и записывая полученную конфигурацию в центр конфигурации xDS APISIX, конкретные правила маршрутизации генерируются APISIX для выполнения соответствующих запросов маршрутизации.
Это решение не только делает всю сервисную сетку более легкой, но и делает пользовательскую разработку и миграцию более удобными благодаря высокой расширяемости APISIX.
11. Интеграция с большим количеством экосистем
Помимо стандарта OpenAPI, упомянутого выше, в версии 3.0 будет добавлено множество плагинов для экосистемы, таких как OpenFunction, ClickHouse, Elasticsearch, SAML, CAS и другие, чтобы интегрировать больше поддержки для аутентификации, безопасности и наблюдаемости.
Один из интересных плагинов, workflow, используется для управления трафиком: мы можем выполнять некоторые детальные операции на уровне управления трафиком.
curl http://127.0.0.1:9180/apisix/admin/routes/1 \ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "uri":"/hello/*", "plugins":{ "workflow":{ "rules":[ { "case": [ ["uri", "==", "/hello/rejected"] ], "actions": [ [ "return", {"code": 403} ] ] }, { "case": [ ["uri", "==", "/hello/v2/appid"] ], "actions": [ [ "limit-count", { "count": 2, "time_window": 60, "rejected_code": 429 } ] ] } ] } }, "upstream": { "type": "roundrobin", "nodes": { "127.0.0.1:1980": 1 } } }'
Например, выполнять определенное действие, если условие A истинно, и другое действие, если условие B истинно, и т.д. Таким образом, пользователи могут более удобно управлять различным бизнес-трафиком.
Начните работу с Apache APISIX 3.0
Теперь вы можете ознакомиться с APISIX 3.0 на странице GitHub Release и Download page!
APISIX значительно вырос с момента своего создания до версии 3.0. Открытый проект может оцениваться не только по производительности и функциональности, но и с точки зрения пользователей, разработчиков и предприятий, чтобы понять, могут ли они использовать продукт для быстрого и эффективного решения своих текущих проблем.
Упомянутые в этой статье возможности и новые функции созданы благодаря сообществу с открытым исходным кодом. Apache APISIX стал более динамичным, получая обратную связь от различных разработчиков и корпоративных пользователей. Если вы хотите присоединиться к сообществу, ознакомьтесь с ним здесь!