Использование Amazon для экосистемы и роста Apache APISIX

Chao Zhang

Chao Zhang

October 26, 2022

Ecosystem

Автор Chao Zhang является членом Apache APISIX PMC, а также техническим экспертом в API7.ai. Он является руководителем продукта API7 Cloud и энтузиастом open-source. Данная статья представляет собой обобщение материалов, которыми Chao поделился на мероприятии "AWS Summit Greater China 2022".

Apache APISIX

В 2019 году два инженера-программиста арендовали небольшой офис, создали проект API-шлюза с нуля, открыли его исходный код и передали в Apache Software Foundation. Проект APISIX впоследствии стал топовым проектом Apache и самым популярным open-source API-шлюзом с активным сообществом и быстрым ростом. Эти два инженера, основавшие API7.ai, теперь объединились с единомышленниками со всего мира, продолжая вносить вклад в Apache APISIX, делая его яркой звездой в области управления API.

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

С момента своего создания APISIX требовал высокой производительности как облачный API-шлюз. Поэтому при использовании Apache APISIX пользователи чаще всего отмечают его высокую производительность и низкую задержку. В то же время, с точки зрения функциональности, APISIX обладает широкими возможностями для обработки трафика. Поэтому APISIX часто используется для канареечных релизов и сине-зеленых развертываний. Кроме того, APISIX также имеет функции аутентификации для обеспечения безопасности API, поддерживая различные методы аутентификации, такие как JWT Auth, HMAC Auth, протокол Open ID Connect и другие.

Кроме того, APISIX дружелюбен к разработчикам, занимающимся расширениями и кастомизацией. Помимо того, что APISIX поддерживает Lua, вы также можете использовать APISIX Plugin Runner для расширения APISIX с помощью языков высокого уровня, таких как Java, Go, Python и WebAssembly. Благодаря поддержке мультиязычных плагинов, вы можете выполнять кастомизацию без дополнительных затрат на обучение.

Разнообразная экосистема и активное open-source сообщество

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

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

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

Таким образом, APISIX начал привлекать корпоративных клиентов по всему миру, таких как Airwallex, Sina Weibo, European Factory Platform, NASA и Nayuki. Благодаря использованию и вкладу всё большего числа компаний, APISIX становится всё более известным. На данный момент количество контрибьюторов APISIX превысило 300, а общее количество контрибьюторов всех связанных с APISIX open-source проектов превысило 500.

github_contributors.PNG

Архитектурные улучшения

На уровне архитектуры продукта APISIX использует модель data plane + control plane, как показано на изображении ниже.

apisix_architecture.PNG

Слева находится сам APISIX, который является data plane всего API-шлюза и в основном обрабатывает бизнес-трафик пользователей. Кроме того, APISIX предоставляет функции управления услугами, такие как ограничение скорости, балансировка нагрузки и т.д. Справа находится control plane API-шлюза, который управляет компонентами работы APISIX, включая компоненты логирования, связанные с наблюдаемостью, для сбора данных о состоянии работы. В то же время, с помощью etcd и Admin API, APISIX помогает пользователям настраивать соответствующие правила, чтобы APISIX работал как задумано.

multi_language_plugin_architecture.PNG

Как упоминалось выше, мультиязычные плагины могут быть встроены в архитектуру data plane на левой стороне. Например, это позволяет пользователям использовать языки программирования, такие как C++ или Rust, для расширения APISIX через модуль wasm plugin внутри APISIX. В то же время, справа показано, как расширить APISIX на основе Plugin Runner с использованием нескольких языков. Он будет вызывать специфичный для языка Plugin Runner (например, Java Plugin Runner) для получения запросов от APISIX через традиционный Unix domain socket в стиле RPC и поможет APISIX обработать этот трафик.

Исследования APISIX на Amazon

В настоящее время APISIX проводит исследования в области продуктов и производительности на основе Amazon.

Amazon Marketplace

apisix_amazon_market.PNG Примечание: API7.ai также известна как Zhiliu Technology

Если вы поищете APISIX в Amazon Marketplace, вы увидите вышеуказанные результаты. Он был добавлен на платформу в 2021 году. Используя это программное обеспечение, вы можете быстро развернуть APISIX на всех экземплярах Amazon EC2. Кроме того, это программное обеспечение бесплатно, поэтому вам нужно оплачивать только стоимость экземпляров EC2.

Это программное обеспечение запускает экземпляр APISIX и экземпляр etcd в экземпляре EC2. Поэтому оно более подходит для существующих пользователей Amazon, когда вы хотите напрямую использовать APISIX или провести POC (Proof of Concept), чтобы убедиться, что APISIX соответствует требованиям ваших целевых сценариев.

CDK APISIX

CDK — это open-source фреймворк для разработки программного обеспечения, предоставляемый Amazon, который помогает пользователям управлять облачной инфраструктурой через код.

Контрибьютор сообщества APISIX, Pahud Hsieh, разработал cdk-apisix на основе CDK. Этот проект позволяет пользователям создавать экземпляры APISIX через код и автоматизацию. В отличие от упомянутого выше, он может напрямую развертывать APISIX на AWS Fargate. Таким образом, мы можем достичь автоматического развертывания и уничтожения в сценариях, требующих триггеров событий. Весь процесс не требует ручного вмешательства и становится более отзывчивым.

aws-cdk.PNG

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

Используя метод CDK, пользователи могут развертывать Apache APISIX с помощью знакомых языков программирования, что позволяет более удобно развертывать APISIX на Amazon. В то же время, с точки зрения использования, когда вы завершаете шаблон конфигурации развертывания, его можно копировать и настраивать. Таким образом, вы можете использовать этот шаблон конфигурации в будущем, что упрощает процесс развертывания.

Плагин Amazon-Lambda

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

Когда пользователь настраивает плагин amazon-lambda в маршрутизации APISIX, он может перенаправить весь трафик на адреса функций Lambda, настроенные пользователем. Функция Lambda обработает эти запросы и отправит результаты обратно клиенту через APISIX.

Этот плагин также поддерживает идентификацию Amazon IAM и Key Auth. В этом случае функция Lambda, развернутая на бэкенде, может лучше интегрироваться с APISIX без ущерба для безопасности.

Связанные тесты производительности

В мае 2022 года были официально выпущены процессоры AWS Graviton 3. Благодаря памяти DDR5 процессоры Graviton3 обеспечивают до 25% более высокую производительность вычислений, до 2x более высокую производительность операций с плавающей запятой и на 50% больше пропускной способности памяти по сравнению с процессорами AWS Graviton2; экземпляры на основе Graviton3 используют до 60% меньше энергии при той же производительности, чем сопоставимые экземпляры EC2.

Вскоре после выпуска процессоров AWS Graviton3 APISIX провел полный регрессионный тест на основе этих процессоров, что означает, что пользователи могут уверенно использовать APISIX на экземплярах EC2 с Graviton3. Проблем с совместимостью не будет. В то же время, мы также провели тесты производительности на семействе процессоров AWS Graviton. В следующих двух сценариях мы провели тесты производительности на процессорах AWS Graviton2 и AWS Graviton3.

  • Один апстрим: В этом сценарии мы используем только один апстрим (без каких-либо плагинов), и мы в основном тестируем производительность APISIX в режиме чистого прокси-сервера.
  • Один апстрим + несколько плагинов: В этом сценарии мы используем один апстрим и два плагина, и мы в основном тестируем производительность APISIX при включении limit-count и prometheus, которые являются двумя основными плагинами, потребляющими производительность.

aws-graviton.PNG aws-graviton-plugin.PNG

Из вышеуказанных изображений видно, что APISIX демонстрирует выдающуюся производительность как с точки зрения стабильности, так и с точки зрения способности обрабатывать трафик. Процессоры AWS Graviton3 обеспечивают до 76% более высокую производительность в IO-интенсивных сценариях вычислений, таких как API-шлюз, и снижают задержку до 38%. Эти данные даже лучше, чем официальные данные, предоставленные AWS (увеличение производительности на 25%).

performance-comparison.PNG

В целом, его производительность впечатляет при использовании APISIX на Grafana 3. Благодаря высокопроизводительным процессорам, таким как AWS Graviton3, APISIX может помочь повысить эффективность и снизить затраты на ресурсы в реальных бизнес-сценариях.

Как API7 Cloud использует Amazon для быстрого роста продукта?

С быстрым ростом Cloud Native всё больше компаний переносят свои бизнесы в облако (обычно они выбирают несколько публичных облачных платформ). Поэтому вопрос о том, как эффективно управлять и развертывать облачные API, стал актуальной проблемой.

API7 Cloud — это SaaS-сервис на основе APISIX, который помогает пользователям подключать все SaaS-продукты, развернутые на любой облачной платформе. API7 Cloud был впервые выпущен в марте 2022 года и предоставляет пользователям простую в использовании функцию управления API, гибкие и богатые метрики наблюдаемости и безопасность API, что делает подключение API более эффективным, безопасным и надежным.

Этот продукт взимает плату с пользователей за количество вызовов API, и в настоящее время он поддерживает два способа развертывания data plane. Первый — это self-host, что означает, что пользователи подготавливают свою инфраструктуру и развертывают APISIX на этой инфраструктуре, чтобы APISIX мог взаимодействовать с API7 Cloud. Другой способ называется полууправляемым (semi-managed или semi-hosted). Сначала пользователи должны авторизовать API7 Cloud для управления их облачным аккаунтом (например, аккаунтом Amazon). Затем они могут развернуть APISIX на всей своей инфраструктуре под их аккаунтом одним кликом на панели конфигурации API7 Cloud.

В настоящее время все компоненты API7 Cloud размещены на AWS и используют сервисы AWS; архитектура продукта показана ниже: api7_cloud.png

Из вышеуказанного изображения видно, что data plane с APISIX может быть развернут на различных облачных платформах, и он может быть даже развернут на инфраструктуре пользователя или в дата-центре. На стороне API7 Cloud в основном предоставляются ключевые атрибуты, такие как наблюдаемость, базовое управление API и безопасность.

Благодаря использованию сервисов Amazon, API7 Cloud имеет лучшую производительность продукта.

Во-первых, APISIX полагается на сервис Amazon EKS. Как новый SaaS-продукт, API7 Cloud был развернут на K8s с самого начала. Поэтому мы развертываем все компоненты на кластерах EKS; таким образом, мы можем использовать некоторые возможности, предоставляемые облаком. В то же время, у каждого пользователя будут разные компоненты, и любой отдельный компонент может работать внутри кластера. Таким образом, мы сделали некоторую сетевую изоляцию, используя метод изоляции арендаторов, разработанный на основе NetworkPolicy, чтобы гарантировать, что пространства имен этих арендаторов не смогут взаимодействовать друг с другом. В этом сервисе мы также используем APISIX Ingress Controller в качестве шлюза для плавной работы всей системы.

APISIX Ingress Controller — это реализация Ingress контроллера, которая позволяет пользователям преобразовывать настроенные правила в правила APISIX, чтобы APISIX мог обрабатывать реальный трафик.

Во-вторых, как самый важный компонент продукта, API7 Cloud выбирает Amazon RDS (Postgre SQL) в качестве базы данных. Мы храним метаданные пользователей в RDS, такие как исходные данные API и действия пользователей. Как SaaS-продукт, нам нужно знать, как пользователь использует наш продукт, чтобы определить, есть ли у нас проблемы с макетом и опытом разработчиков, чтобы определить будущее направление нашего продукта.

Мы также используем компонент Amazon ElasticCache в API7 Cloud и выбираем Redis в режиме master-slave. Redis в основном используется для хранения состояния экземпляров data plane, то есть данных о состоянии, которые периодически отправляются в Cloud, когда APISIX подключается к API7 Cloud. Поскольку данные не являются чувствительными или критически важными, и data plane должен часто взаимодействовать с control plane, мы не выбрали реляционную базу данных здесь.

Кроме того, этот компонент имеет еще одно важное применение: он может рассматриваться как очередь сообщений. Redis 5.0 вводит структуру данных Stream, поэтому мы можем использовать её как сверхлегкую очередь сообщений, чтобы помочь пользователям быстрее создавать, манипулировать и уничтожать данные.

Заключение

Эта статья делится опытом использования с точки зрения проектов, связанных с APISIX. Благодаря поддержке сервисов и экосистемы Amazon, APISIX продолжает исследовать свою экосистему. Мы надеемся, что APISIX и Amazon смогут интегрироваться ещё более интересными способами и вместе развивать лучшую экосистему.

Tags: