Практика использования API Gateway в Tencent с Apache APISIX

Fei Han

May 24, 2021

Case Study

Что такое API Gateway?

Традиционная архитектура

До интеграции с API Gateway у нас было несколько способов повторного использования некоторых общих функций, таких как:

  • Безопасность: аутентификация, авторизация, защита от повторного воспроизведения, защита от подделки, защита от DDoS и т.д.
  • Надежность: снижение качества обслуживания, предохранители, ограничение трафика и т.д.

В традиционной архитектуре наиболее распространенным способом решения этой задачи было размещение их в сервисном фреймворке и реализация через AOP, как показано на следующей архитектурной схеме:

Традиционная архитектура

Традиционная архитектурная схема включает следующие модули.

  • Backend: Бэкенд-сервисы
  • AOP: Слой AOP, поддерживаемый фреймворком;
  • SD: Сервисный центр, используемый для внутреннего обнаружения сервисов. В облачных технологиях мы часто используем Service для замены этого компонента;
  • LB: Балансировщик нагрузки, который мы используем на сетевой границе в качестве точки входа для внешнего трафика.

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

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

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

Почему бы не разместить эти общие функции в отдельном сервисе, который можно обновлять или поддерживать отдельно?

Режим шлюза

Режим шлюза

По сравнению с традиционной архитектурой, мы видим дополнительный компонент между бэкенд-сервисами и LB: Gateway.

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

  • Шлюз является зависимым компонентом в системах, и мы можем получить лучший опыт обслуживания.
  • Шлюз не зависит от языка.

Однако режим шлюза также имеет свои недостатки:

  • Поскольку мы сначала проксируем трафик через шлюз, у нас появляется дополнительная пересылка и более высокая задержка. Это приводит к более высокой сложности устранения проблем.
  • Если шлюз работает неправильно, он может стать узким местом для всей системы.

Как сбалансировать преимущества и недостатки модели шлюза — это вызов для технической команды. Давайте посмотрим, как Tencent OTeam работает с Apache APISIX.

Введение

OTeam

OTeam Tencent — это группа команд, и каждая команда поддерживает один или несколько технических продуктов. Их цель — создать стабильную, но мощную платформу для внутренних систем. Одна из OTeam поддерживает внутреннюю кастомизированную версию Apache APISIX в Tencent.

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

Некоторые Oteams включают в себя до десятка продуктов, в то время как другие имеют только один. Например, Oteam, в которой находится Apache APISIX, включает только один продукт — Apache APISIX. Изначальная цель этой Oteam — поддерживать кастомизированные функции Apache APISIX внутри Tencent.

Apache APISIX

Apache APISIX — это проект высшего уровня от Apache Software Foundation, и вот некоторые ключевые моменты:

  • Apache APISIX — это облачный, динамический API-шлюз на основе OpenResty, с более высокой производительностью маршрутизации, чем у Kong.
  • Apache APISIX предоставляет богатые функции управления трафиком, такие как балансировка нагрузки, динамический апстрим, канареечные выпуски, предохранители, аутентификация, наблюдаемость и многое другое.
  • Apache APISIX хорошо справляется с традиционным северо-южным трафиком, а также с восточно-западным трафиком между сервисами. Он также может использоваться как контроллер ingress для k8s.
  • Apache APISIX по умолчанию использует ETCD в качестве центра конфигурации, что позволяет обновлять конфигурацию за секунды.
  • Apache APISIX выпустился из Apache Software Foundation всего за несколько месяцев.

Стратегия работы OTeam Tencent

Стратегия работы OTeam

На приведенной выше схеме показано, как OTeam взаимодействует с сообществом Apache APISIX:

  • Пользователи оставляют отзывы или запросы через GitHub Issue.
  • Члены OTeam обсуждают решения на еженедельных встречах или отвечают непосредственно в Issue.
  • Реализуют функции или исправляют ошибки в соответствии с обсуждением.
  • Проводят Code Review и проверку CI, затем выпускают, если необходимо.

Этот процесс похож на другие проекты с открытым исходным кодом. Вот некоторые ключевые моменты:

  • После решения Issue инженеры Tencent определяют, является ли проблема также общей для сообщества. Если да, они создают PR для сообщества.
  • OTeam Tencent регулярно проверяет новые функции Apache APISIX, чтобы определить, стабильны ли они и являются ли они также болевой точкой для Tencent. Если ответ положительный, выбирают соответствующий код.

Вначале OTeam синхронизировала код с Apache APISIX каждые 12 часов, чтобы быстро следить за Apache APISIX, но этот подход вызвал некоторые проблемы:

  • После синхронизации кода с Apache APISIX мы могли убедиться, что правила корректны, но не могли гарантировать стабильность кода. Некоторые случайные ошибки происходили в случаях конкурентности.
  • Объединенный код иногда вызывал логические конфликты с несколькими PR вверх по течению, но CI Apache APISIX и OTeam не мог обнаружить этот случай. Только при слиянии PR в мастер-ветку мы могли обнаружить, что что-то пошло не так.

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

Тенденции OTeam

По состоянию на май 2021 года OTeam внедрила Apache APISIX для более чем десяти команд внутри Tencent, с ежедневным объемом запросов бизнеса, превышающим миллиард. В то же время OTeam также разработала более десяти функций для Apache APISIX, включая обнаружение сервисов, преобразование протоколов RPC и подключение к платформе мониторинга.

В то же время OTeam также внесла некоторые стандартные функции в сообщество Apache APISIX. В настоящее время два члена команды OTeam также являются PMC Apache APISIX, и OTeam внесла более 50 PR в сообщество. Мы верим, что OTeam продолжит сотрудничество с сообществом Apache APISIX в будущем.

Внутренние функции OTeam

Внутренние болевые точки

Основная ответственность OTeam — поддерживать функции Apache APISIX для Tencent. Давайте рассмотрим, с какими болевыми точками столкнулась OTeam.

  • RPC-фреймворк не дружелюбен к фронтенду: внутри Tencent есть множество устаревших проектов, использующих фреймворк TARS, который не поддерживает напрямую HTTP-протокол, как TRPC, он поддерживает только самый традиционный TCP-протокол RPC-фреймворка, а транспортное содержимое использует специфический бинарный протокол. Нам нужно поддерживать промежуточный сервис для преобразования этих интерфейсов в дружелюбную для фронтенда форму HTTP + JSON.
  • Разнообразие сервисных центров: Внутренние сервисы Tencent используют множество сервисных центров, таких как CL5, L5, Polaris и т.д. Хотя мы постепенно будем использовать один и тот же сервисный центр, в течение этого длительного периода мы будем использовать несколько сервисных центров одновременно. Изначально Apache APISIX не поддерживал это.
  • Оповещения: Как шлюз, оповещения не являются направлением, на которое он должен обращать внимание, но как фундаментальный компонент, оповещения должны быть обязательным компонентом для команды. Как решить проблему оповещений — это также болевая точка.
  • Безопасность: Tencent имеет огромный объем трафика и требования к безопасности. Многие продукты toC используют OTeam, и они сталкиваются с множеством злоупотреблений пользователей и атак из сети. Наиболее типичные случаи — это DDos, повторное воспроизведение, подделка запросов и т.д. Можем ли мы решить эти проблемы на уровне шлюза?

Решение проблем

Архитектура OTeam

Приведенная выше схема является упрощением случая внедрения внутри Tencent. Мы видим, что несколько проблем, поднятых ранее, были решены в OTeam:

  • Преобразование протоколов: на основе Apache APISIX OTeam достигает преобразования протоколов TRPC и TARS. Те, кто не использует HTTP для устаревших сервисов, могут напрямую использовать плагин преобразования в шлюзе для достижения требований передачи HTTP и RPC без написания промежуточных сервисов.
  • Множество сервисных центров: Мы внесли эту функцию в сообщество. Отчеты на платформу мониторинга: OTeam Tencent использует плагины для подключения к платформам мониторинга. Пользователям нужно только выполнить некоторые настройки, и система автоматически будет отправлять метрики, логи. Кстати, пользователи могут настроить политики оповещений на платформе мониторинга.
  • Защита от повторного воспроизведения и подделки: OTeam реализовала плагины защиты от повторного воспроизведения и подделки, позволяя внешним бизнесам, которым нужны эти возможности, использовать их прямо из коробки для защиты безопасности своих API.

Мы надеемся, что эти примеры помогут вам исследовать больше сценариев использования Apache APISIX и лучше использовать его как полезную платформу. Например, кто-то использовал шлюз для реализации некоторых обязательных спецификаций API в соответствии с политиками Tencent Cloud.

Итог

OTeam помогла бизнес-команде решить их болевые точки и непрерывно улучшала функции Apache APISIX внутри Tencent, двигаясь вперед вместе с развитием сообщества.

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

Tags: