Alternative to NGINX That Makes Your Life Easier: Apache APISIX

Zexuan Luo

Zexuan Luo

September 15, 2022

Products

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

Отличной альтернативой NGINX является Apache APISIX, но что такое Apache APISIX?

Что такое Apache APISIX

APISIX Word Cloud

Apache APISIX — это высокопроизводительный, динамичный, полнофункциональный API-шлюз. Четыре ключевые особенности Apache APISIX:

  1. Свойство Apache: APISIX является открытым исходным кодом и также является проектом высшего уровня Apache Software Foundation. Невозможно изменить лицензию на открытый исходный код в середине пути, как это сделали ElasticSearch и MongoDB. Поскольку APISIX принадлежит Apache Software Foundation (ASF), он больше не является проектом компании или отдельного лица.
  2. Высокая производительность: APISIX разработан на основе OpenResty (дистрибутива NGINX), поэтому APISIX также наследует мощь самого NGINX.
  3. Динамичность: Если NGINX предоставляет надежную базовую архитектуру, то OpenResty добавляет больше возможностей для NGINX, позволяя использовать Lua для управления поведением NGINX. А APISIX, благодаря своей гибкости и сильной интеграции с другими системами, становится полностью динамичным API-шлюзом. Flow Software Architecture
  4. Реальное время: APISIX хранит конфигурацию в etcd. Это преимущество заключается в том, что изменения конфигурации можно отслеживать и получать в реальном времени через RESTful API etcd, поскольку etcd сам по себе является распределенной KV-базой данных, которая также используется Kubernetes для хранения конфигурации. NGINX использует статические файлы для хранения конфигурации, и если конфигурация обновляется, время перезагрузки NGINX будет очень долгим.

Apache APISIX vs NGINX

Поскольку мы упомянули, что APISIX разработан на основе NGINX, вы можете спросить: в чем разница между APISIX и NGINX?

Первое, что нужно отметить, это то, что сравнение APISIX и NGINX не является прямым сравнением. В конце концов, NGINX — это легковесный прокси, а APISIX сосредоточен на том, чтобы сделать функции продукта более зрелыми. Кроме того, у него больше функций, поскольку APISIX переработан на основе NGINX.

Если вы используете NGINX в качестве шлюза, следующие два преимущества APISIX дадут вам более глубокое понимание.

Более гибкая конфигурация

По сравнению с конфигурационными файлами NGINX, APISIX предоставляет различные способы настройки. Например:

  • Вы можете настроить APISIX через HTTP API. Конфигурация будет записана в etcd, а затем синхронизирована с каждым узлом через etcd;
  • Вы можете сделать это с помощью APISIX Dashboard. В APISIX Dashboard графическая визуализация поможет вам настроить все более четко;
  • Если вы не хотите использовать stateful-методы хранения, такие как etcd, вы можете использовать статические файлы, как в K8s. APISIX также поддерживает получение отдельных конфигураций из локальных YAML-файлов;
  • Если вы развертываете APISIX в K8s, вы можете использовать APISIX Ingress Controller для получения конфигурации, выпущенной через CRD;
  • Если вы развертываете APISIX как плоскость данных Istio, вы также можете получить конфигурацию, выпущенную Istio, через xDS.

Лучшая расширяемость

Хотя NGINX также представил NJS для достижения динамического управления, он не так идеален, как расширяемость APISIX.

Поскольку APISIX может быть расширен с помощью LuaJIT, он также поддерживает out-process Plugin Runner для запуска внешних плагинов, написанных на таких языках, как Go, Java, Python, Node.js и других.

Multi-Language Architecture

Кроме того, начиная с APISIX 2.11, вы можете запускать Wasm-плагины. С этой функцией вы можете писать плагины для APISIX на Rust, TinyGo и других языках, а затем компилировать их в Wasm-код для запуска на APISIX.

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

Каковы ключевые преимущества Apache APISIX

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

APISIX's Ecosystem

  • На уровне аутентификации APISIX поддерживает такие протоколы, как OIDC и LDAP. В то же время он может быть интегрирован с несколькими сервисами аутентификации или фреймворками, такими как Keycloak, Casdoor, Casbin, OPA и т.д.
  • На уровне наблюдаемости APISIX поддерживает подключение к множеству инструментов логирования, таким как Clickhouse, Datadog, Splunk, Apache Kafka, Apache RocketMQ и т.д. Он также может предоставлять богатые метрики через Prometheus для поддержки множества систем трассировки, таких как OpenTracing, OpenTelemetry и Apache Skywalking.
  • На уровне обнаружения сервисов APISIX не только поддерживает получение адресов вышестоящих сервисов из Nacos, Eureka, Consul и Zookeeper, но также из DNS (через A/AAAA записи или SRV записи). Более того, если вы используете APISIX как K8s Ingress Controller, вы можете получить соответствующую конфигурацию из ресурса Ingress (APISIX поддерживает спецификацию K8s Gateway API).

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

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

Какой API-шлюз выбрать

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

Если вы уже используете NGINX в качестве прокси перед бизнес-приложениями, и некоторая логика размещена на NGINX, то APISIX будет вашим лучшим выбором. Поскольку APISIX разработан на основе NGINX, вы можете плавно мигрировать NGINX на APISIX в зависимости от ваших потребностей.

Если вы никогда не использовали шлюз и хотите выбрать подходящий проект с открытым исходным кодом для API-шлюза, исходя из ситуации вашей команды, то вам нужно обратить внимание на следующие аспекты:

  1. Достаточно ли высока частота обновлений. Вы можете выбрать хорошо поддерживаемый проект API-шлюза, наблюдая за активностью каждого проекта, потому что никто не хочет выбирать проект, который идет на спад. Вы можете получить представление об активности проекта через график Contributor Over Time.
  2. Полнота функций проекта. Если выбранный шлюз не может удовлетворить текущие и будущие бизнес-потребности команды, и поскольку проект добавляет работу по разработке (например, управление конфигурацией, интеграция с внутренними сервисами), пожалуйста, тщательно обдумайте.
  3. Насколько хорошо выполняются некоторые сложные технические метрики проекта, например, QPS, задержка и использование памяти соответствуют ли бизнес-требованиям. Как правило, сложно сделать революционную оптимизацию шлюза. Поэтому, если шлюз не может соответствовать этим сложным метрикам, будет трудно добиться прорывов, как бы он ни итерировался в дальнейшем.
  4. Достаточно ли у команды ресурсов и времени для изучения и поддержки API-шлюза. В конце концов, техническое принятие решений — это не чисто техническая деятельность.

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

Как мигрировать с NGINX на Apache APISIX

Вы мудры, если, прочитав это, решили заменить ваш существующий NGINX на APISIX!

Но перед миграцией вам нужно освежить в памяти некоторые функции продукта, которые у вас есть или которые вы используете. Обычно эти функции можно разделить на три категории:

  1. Прямо заменяемые. APISIX позволяет пользователям использовать конфигурацию NGINX напрямую, поэтому большая часть глобальной конфигурации NGINX может быть повторно использована APISIX. Что касается конфигурации на уровне приложения, она может быть заменена маршрутами APISIX;
  2. Требующие корректировки, например, изменения в метриках;
  3. Требующие дополнительной разработки.

После завершения необходимой разработки вы постепенно замените NGINX на APISIX в реальных бизнес-сценариях. В процессе плавной миграции вам нужно рассмотреть следующие три вопроса:

  1. Как проксировать клиентские запросы на APISIX?
  2. Как поместить эквивалентную конфигурацию в APISIX и NGINX?
  3. Как обрабатывать метрики, предоставляемые как APISIX, так и NGINX?

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

Через эту статью, я уверен, вы поняли мощь Apache APISIX. Давайте попробуем использовать Apache APISIX в качестве вашего API-шлюза!

Tags: