"
- Оригинальный адрес:Мой опыт работы со шлюзами API…
- Оригинальный автор:Mahesh Mahadevan
- Перевод с:Программа перевода самородков
- Постоянная ссылка на эту статью:GitHub.com/rare earth/gold-no…
- Переводчик:Ситу Гонгзи
- Корректор:Лю Хайдун, shixi-li
Вспомните это один раз — опыт создания службы шлюза API...
Некоторое время назад я работал над проектом по реализации шлюза API для нашего облачного продукта. Основной мотивацией этого является предоставление единой точки входа для всех внешних коммуникаций и защиты серверных служб, но есть и другие причины. Я предполагаю, что вы наткнулись на эту статью о шлюзах API и уже знаете о шлюзах API. Если нет, прежде чем читать эту статью подробно, вы должны прочитатьздесьиздесь.
Поиск шлюза API, соответствующего вашим потребностям,варианты перехода. Если вы отнесетесь к этому слишком серьезно, у вас может разбиться сердце. Как и другие основные программные стеки в отрасли сегодня, даже шлюзы API имеют множество вариантов и разновидностей. Честно говоря, очень сложно принять решение, не изучив каждый вариант и не сопоставив его с вашими конкретными потребностями. Эта статья — моя небольшая попытка упростить задачу, и в конце я привожу блок-схему, которая, надеюсь, поможет вам принять решение.
Когда мы начали наш поиск, мы начали анализировать эти варианты на основе нашего исследования. Для этого мы в основном полагаемся на различные сравнения, которые уже существуют в Интернете, и проводим некоторую фильтрацию на основе их текущей популярности и набора функций, которые они могут предложить.
Отказ от ответственности——В этой статье не приводится сравнение производительности шлюза API, хотя это также является нашим критерием выбора. Я не говорю, что обсуждаемые здесь реализации являются единственными доступными вариантами, но, когда я пишу это, они являются наиболее популярными вариантами, основанными на потребностях нашего продукта.
Список требований...
Во-первых, давайте быстро перечислим минимальные требования к решению шлюза API. Обратите внимание, что это не исчерпывающий список, и он не обязательно соответствует тому решению, которое вы ищете. Однако он должен охватывать большинство вариантов использования шлюза API.
- обратный прокси- Это самая важная причина, по которой большинство проектов используют шлюзовые решения. Любой зрелый проект, который открыл свой API для внешнего мира, должен избегать раскрытия URL-адреса серверной части из-за проблем с безопасностью и абстрагировать сложные службы серверной части от клиента. Это также обеспечивает единую точку входа для всех клиентов для доступа к серверному API.
- балансировки нагрузки- Шлюзы могут направлять входящие отдельные URL-адреса на несколько серверных пунктов назначения. В микросервисной архитектуре это часто бывает полезно, когда вы хотите масштабировать приложение для обеспечения высокой доступности, или при выполнении какой-либо конфигурации кластера сервисов, или даже другими способами.
- Аутентификация и авторизация. Шлюзы должны иметь возможность успешно аутентифицировать и разрешать доверенным клиентам доступ к API, но также использовать что-то вродеуправление доступом на основе ролейспособ предоставления услуг авторизации.
- Список IP-адресов — разрешить или заблокировать прохождение определенных IP-адресов. Обеспечивает дополнительный уровень безопасности для вашей экосистемы, что очень полезно, когда вы обнаружите группу вредоносных адресов, пытающихся сломать ваше приложение через DDOS.
- Аналитика — предоставляет способ регистрации использования и других полезных показателей, связанных с вызовами API. Должна быть возможность разбить использование API каждым клиентом для возможной выгоды.
- Ограничение скорости — возможность ограничить вызовы API, например, вы хотите разрешить только 10 000 вызовов в минуту для всех потребителей или 1000 вызовов в месяц для определенного потребителя.
- Transform — преобразование запросов и ответов перед пересылкой (Включая заголовок сообщения и тело сообщения)Способность.
- Управление версиями — вы можете одновременно использовать разные версии API илиКанарский релизилисине-зеленое развертываниеAPI постепенно внедряются в виде .
- выключатель—— Для шаблона микросервисной архитектуры очень полезно избегать прерывания обслуживания.
- WebSocketПоддержка — многие динамические функции и функции в реальном времени могут быть решены с помощью WebSocket.В бизнес-сценариях с частым обменом данными для клиентов предоставляется интерфейс WebSocket, чтобы уменьшить накладные расходы на несколько HTTP-вызовов.
- gRPCПоддержка — Google gRPC обещает еще больше снизить нагрузку за счет использования HTTP/2, который можно эффективно использовать для внутренней связи между серверами. Я предлагаю вам обязательно добавить это в список требований, чтобы сделать ваше решение более надежным.
- Кэширование. Если часто запрашиваемые данные можно кэшировать, это еще больше снизит пропускную способность сети и время приема-передачи, а также повысит производительность.
- Документация. Если вы планируете предоставлять API разработчикам за пределами вашей организации, вам необходимо рассмотреть возможность использования документации по API. НапримерSwagger или OpenAPI.
Шлюзы API и сервисные сетки
Прежде чем сравнивать их реальные реализации, я должен также рассказать о поиске шлюзов,сервисная сеткаЕще одна закономерность, с которой вы можете столкнуться, когда дело доходит до времени. Поначалу может быть сложно понять разницу между API-шлюзом и сервисной сеткой и для чего каждый из них используется. Поэтому, прежде чем продолжить, я опишу их подробно.
Шлюз API используется дляМодель OSIСедьмой уровень, или, можно сказать, управляет сетевым трафиком извне (иногда его называют трафиком север-юг). А сервисные сетки применяются к четвертому уровню модели OSI или управляют взаимодействием между сервисами (иногда называемым трафиком восток-запад). Некоторые примеры шлюзов API включают обратные прокси, балансировку нагрузки, аутентификацию и авторизацию, списки IP-адресов и ограничение скорости и т. д.
С другой стороны, сервисная сетка работает как прокси или шаблон sidecar, она снимает ответственность за связь между сервисами и обрабатывает прерыватели цепи, тайм-ауты, повторные попытки и обнаружение сервисов. На момент публикации этой статьи,IstioЭто хорошо известная реализация сервисной сетки.
Как вы, должно быть, заметили, мой список требований также включает в себя некоторые функции, предоставляемые сервисной сеткой. В настоящее время довольно много реализаций шлюзов API могут работать как на уровне 4, так и на уровне 7 модели OSI и удовлетворять потребности сервисной сетки. Было бы здорово, если бы мы могли получить реализацию, которая обрабатывает некоторые требования грид-сервиса, если в этом нет необходимости. Вот хорошая статьястатья, в котором подробно описаны их различия.
сравнивать
Основной контент
Я сравню следующие шлюзы API...(отказ от ответственности)
- NGINX
- Kong
- Tyk
- Ambassador
- AWS API gateway
Nginx
NginxЭто уже один из лучших вариантов для создания единой точки входа для прокси-серверов балансировки нагрузки уровня 7 и серверных приложений. Он был использован и проверен во многих различных производственных средах и заменил многие существующие аппаратные средства балансировки нагрузки с чрезвычайно низким использованием памяти, что также экономит компании много денег. многиеCDNИспользуйте Nginx в качестве механизма для кэширования данных с пограничных узлов.
Самым большим преимуществом использования Nginx в качестве шлюза является то, что он имеет функции от простых до сложных, что позволяет вам выбирать функции, соответствующие вашим требованиям. Например, если поначалу вам нужны только функции балансировки нагрузки и обратного прокси-сервера, Nginx может легко выполнить это с минимальными усилиями, а со временем, когда ваш продукт станет более совершенным, вы сможете перейти на другие функции. Вы также можете использовать их коммерческие продуктыNGINX Plusреализовать полноценную службу шлюза API, даже если его продукт с открытым исходным кодом может сделать это с помощью широкого спектра доступных подключаемых модулей.
Nginx известен своим небольшим объемом памяти и высокой производительностью при низкой задержке. вы также можете получить некоторыеСторонний пользовательский плагин Nginx, эти плагины могут охватывать широкий спектр сценариев настройки. Конечно, вы также можете обратиться за помощью к его обширной сети разработчиков, когда где-то столкнетесь с проблемами. Единственная проблема, с которой вы можете столкнуться, заключается в том, что настройку Nginx может быть немного сложно освоить, если вы еще не сделали это самостоятельно. В противном случае вам придется пролистывать части его документации, пока вы не освоите ее.
Kong
Kongоснован на Nginx иOpenRestyШлюз API + Service Mesh, отвечающий большинству из перечисленных выше потребностей. как предоставленоИнструкции по установке докераУстановка довольно проста.
Архитектура Конга очень проста и понятна, она состоит из множества компонентов...
- Базовый модуль Kong инкапсулирует OpenResty и Nginx и представляет собой реально работающий движок.
- Уровень базы данных, дополнительно Cassandra или Postgres для хранения всех данных конфигурации для быстрого восстановления в случае сбоя.
- Панели мониторинга предоставляют пользовательский интерфейс для управления API и просмотра аналитики (Несмотря на то, что kong предоставляет REST API, исходящие API и сервисы управления для своих потребителей, он предоставляет только сервисы корпоративного уровня.)
У Kong есть реализации как с открытым исходным кодом, так и для предприятий, обе из которых стабильно работают с задержками на уровне миллисекунд на базе nginx. Представьте себе использование Nginx для операций шлюза, в то время как REST API и уровень базы данных легко управляют конфигурацией.
Конг предлагает различныеплагин, которые удовлетворяют большинство комплексных задач, связанных с контролем доступа, безопасностью и кэшированием документов. Он также позволяет вам писать на Lua и использовать собственные плагины. Открытый исходный код Kong — хорошее начало для понимания их стека. Хотя у него нет информационной панели веб-интерфейса, есть несколько доступных информационных панелей с открытым исходным кодом, которые могут помочь вам управлять их конфигурацией. В противном случае, если вы знакомы с REST, вы можете напрямую использовать ихAPI управления.
Конг также может быть развернут вKubernetes Ingressи поддерживает прокси-серверы gRPC и Websocket. Преимущество Kong заключается в его базовом движке, который состоит из легких, но мощных движков Nginx и OpenResty, а также может быть встроен в полноценный шлюз API.Вы можете думать о Kong как о версии Nginx с автоматическим переключением. У этой реализации есть возможный недостаток, не все функции доступны из коробки, некоторые должны активировать соответствующие плагины для настройки вручную, что может потребовать времени и ресурсов на первоначальную настройку, но для многих команд зрелых инженеров, говоря об этом, это может не будет большой помехой.
Tyk
Tyk— еще один шлюз с открытым исходным кодом, который обещает отличную производительность, он написан на Go. Tyk предоставляет множество функций, которые являются частью нашего списка требований. Веб-панель Tyk является лучшей в своем роде, позволяя вам контролировать практически каждый аспект конфигурации вашего API и предоставляя отличную аналитику использования API.
Tyk имеет богатый набор функций и красивый веб-интерфейс пользователя, это хороший выбор для проектов со сложными сценариями управления API. Отличительной чертой Tyk является то, что он включает в себя панели инструментов API, аналитику, безопасность, контроль версий, портал разработчика, ограничение скорости и другие функции шлюза из коробки, которые вы можете использовать для некоммерческих сценариев бесплатно. Однако для коммерческих целей вам необходимо приобрести их коммерческую лицензию, которая также включает их поддержку.
Tyk действительно хорош для проектов, которые ищут что-то нестандартное и готовы за это платить с первого дня (Например, вы собираетесь использовать его в коммерческих целях.) вместо того, чтобы изучать такие варианты, как Nginx и Kong, что может занять некоторое время у вашего разработчика, чтобы получить все необходимые функции. В чем Tyk отстает от первых двух реализаций, так это в простоте установки и стоимости. В Tyk слишком много компонентов, которые непросто установить и управлять локально. Он предлагает облачные и гибридные варианты установки, которые снижают затраты на установку и управление. Но у него также есть своя цена, и он увеличивает выплату вашего проекта.
Ambassador
AmbassadorУстановленоEnvoyШлюз микросервисов Kubernetes с открытым исходным кодом поверх Kubernetes. Его можно использовать в качестве входного потока и балансировщика нагрузки Kubernetes, чтобы легко и быстро публиковать и тестировать микросервисы в среде Kubernetes.
Ambassador очень легкий, и все состояние хранится в Kubernetes, поэтому база данных не требуется. Конструкция Ambassador ориентирована на разработчиков, поэтому все его операции и концепции ориентированы на разработчиков, например — добавление маршрута в Ambassador, наиболее рекомендуемый метод — в файле конфигурации yaml службы Kubernetes добавить примечание. Его бесплатная версия включает в себя контроль версий, gRPC, поддержку WebSocket, аутентификацию, ограничение скорости, интеграцию с Istio для работы в качестве сервисной сетки, однако такие функции, как OAuth, единый вход, аутентификация JWT, политики контроля доступа и фильтрация, являются частью его платная версияAmbassador Proчасть.
Его преимущество заключается в том, что он обслуживает большой трафик с минимальными затратами и минимальными услугами по начальной настройке в среде Kubernetes. Однако ему не хватает многофункциональности по сравнению с шлюзами, обсуждавшимися ранее. Потому что в нем отсутствует интеграция панелей мониторинга и аналитики из коробки, что требует некоторой настройки.
Шлюз API Amazon
Шлюз API Amazon— это управляемый облачный сервис управления API от AWS, который упрощает создание, публикацию и управление API всего за несколько кликов. Вы можете открывать узлы REST или WebSocket, импортировать новые API с помощью Swagger или Open API, направлять свои URL-адреса на различные серверные части, включая AWS EC2, AWS lambda и даже внутренние узлы. Стоимость маршрутизации миллионов API через шлюз очень мала и предсказуема. Потому что для заданного количества запросов существует фиксированноеМодель ценообразованияможно обратиться(Поэтому вам следует быть осторожным в отношении стоимости из-за внешней передачи данных.).
Шлюз AWS API не требует настройки, так как он управляется, вы можете быстро создавать или маршрутизировать API всего несколькими щелчками мыши, защищать их с помощью SSL, обеспечивать аутентификацию и авторизацию, создавать секреты API для внешних клиентов ключа API, управлять своими версиями API, и он также может создавать клиентские SDK, если хотите. Сервис AWS API Gateway действительно мощный, и его простая настройка занимает всего несколько минут. Поэтому, если вы уже используете AWS или планируете использовать AWS, вам нужно серьезно рассмотреть этот шлюз в качестве своего первого выбора, если только у вас нет некоторых обязательных функций, которые он не может выполнить. Очевидным недостатком является то, что вы можете быть привязаны к сервисам AWS, и эти зависимости могут в какой-то момент в будущем сильно затруднить миграцию на другие фреймворки.
матрица сравнения
Сравнение 5 функций шлюза API представлено ниже в табличной форме.
- Зеленая отметка: некоторые функции являются версиями с открытым исходным кодом.
- Желтая метка: функция поддерживается только в платной версии.
- Красный Крест: особенностиЕще нетсуществует(Посетите их соответствующие порталы для поддержки наборов функций)
- Основные функции включают обратный прокси-сервер и балансировку нагрузки.
- Tyk предоставляет лицензию разработчика для некоммерческого использования, которая включает в себя все функции, для производственного использования вам необходимо приобрести их коммерческую лицензию, которую можно установить в Saas или в миксе.
- Версия Kong с открытым исходным кодом не имеет панели инструментов, но есть некоторые доступныеСторонние информационные панели с открытым исходным кодомПредоставляет веб-интерфейс для управления вашими API и плагинами.
- AmbassadorМожет быть установлен вместе с Istio, чтобы играть роль сервисной сетки.
время принятия решения
Наконец, вот блок-схема, которую я намеренно упростил. Вы должны использовать следующую диаграмму и приведенную выше матрицу функций, чтобы упростить свой выбор.
Известные реализации
"Если вы обнаружите ошибки в переводе или в других областях, требующих доработки, добро пожаловать наПрограмма перевода самородковВы также можете получить соответствующие бонусные баллы за доработку перевода и PR. начало статьиПостоянная ссылка на эту статьюЭто ссылка MarkDown этой статьи на GitHub.
"Программа перевода самородковэто сообщество, которое переводит высококачественные технические статьи из Интернета сНаггетсДелитесь статьями на английском языке на . Охват контентаAndroid,iOS,внешний интерфейс,задняя часть,блокчейн,продукт,дизайн,искусственный интеллекти другие поля, если вы хотите видеть больше качественных переводов, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.
В этой статье используетсяmdniceнабор текста