Институт системного программирования им. В.П. Иванникова РАН


API Gateway - платформа для эффективной балансировки нагрузки

API Gateway представляет платформу, предназначенную для эффективной балансировки нагрузки между вычислительными узлами и защиты от злоупотребления ресурсами. Эта платформа лежит в основе открытого программного интерфейса к технологиям, разработанным в ИСП РАН - api.ispras.ru.

Подобные системы необходимы в тех случаях, когда вычисления требуют значительного времени и ресурсов, в то время как одновременных пользователей может быть много. Если вычисления разных пользователей логически не связаны между собой, появляется возможность для перенаправления задач пользователей на независимые вычислительные узлы. Тем не менее, в таких условиях не работают стандартные технологии балансировки (такие как HAProxy), поскольку ресурсом всегда может воспользоваться слишком много людей. Система API Gateway решает и эту проблему, путем разграничения доступа к нижележащим API при помощи уникальных ключей.

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

В системе хранятся наборы ограничений для ключей каждой группы пользователей. Ограничения на использование ключей выражаются в количестве запросов в секунду, в день и в месяц. Такой подход позволяет избегать слишком высокой нагрузки на используемую вычислительную систему. В случае, если пользователь слишком часто делает обращения к API вычислительной системы, он получает в качестве ответа время, через которое он снова сможет сделать запрос. Каждый пользователь (если у него есть на это права), может создать себе не один ключ, а несколько, чтобы у него была возможность свои программы в нескольких экземплярах с независимыми наборами временных ограничений.

Система использует в служебных целях открытые проекты: хранилище ключей-значений Redis и кэширующий сервер приложений Varnish Cache. Система API Gateway состоит из четырех подсистем, каждую из которых можно использовать отдельно от другой. Это подсистемы учета пользователей, подсистема управления предоставляемыми сервисами, подсистема контроля доступа, подсистема управления ключами.

Подсистема учета пользователей позволяет пользователям регистрировать и получать ключи для доступа к API. Подсистема написана на языке Ruby и может использовать в качестве хранилища любую реляционную СУБД.

Подсистема управления предоставляемыми сервисами предназначена для администрирования списка пользователей, групп и их прав. Также подсистема управления предоставляемыми сервисами позволяет добавлять новые вычислительные узлы в кластере. Для этого достаточно указать только адрес добавляемого узла и выбрать сервис, который предоставляется на этом узле.

Подсистема контроля доступа представляет из себя надстройку к кэширующему серверу приложений Varnish Cache. Надстройка позволяет Varnish Cache взаимодействовать с хранилищем ключей-значений Redis. Подобная связка позволяет обрабатывать более 10 тысяч запросов в секунду и позволяет использовать к качестве фронтенда несколько серверов, т.к Redis также предусматривает и распределенный режим работы. В то же время, использование Redis позволяет добиться большой пропускной способности сервера.

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

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

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

Среди открытых решений, существует всего 5 аналогичных систем, рассмотрим их.

  1. apiGrove. Это решение нацелено на Enterprise сектор и подразумевает наличие специальных дополнительных средств (таких как шина ESB) для своей работы. Предоставляет те же возможности, что и описанная система API Gateway, но очень сложна в настройке и использовании и позволяет обрабатывать не более 2500 запросов на один узел, что в несколько раз меньше, чем API Gateway. Требует существенно больших аппаратных ресурсов, чем описанное решение.
  2. WSO2 API manager. Это решение также нацелено на Enterprise сектор. Предоставляемая функциональность также похожа на описанную. WSO2 также подразумевает наличие специальной инфраструктуры, включающей в себя шину Enterprise Service Bus, сервис Business Activity Monitor и ряда других сервисов. Требует существенно больших аппаратных ресурсов, чем описанное решение и может обрабатывать не более 6000 запросов в секунду на той же аппаратной платформе.
  3. Apiaxle. Это решение во многом похоже на API Gateway. Тем не менее, этот проект находится на начальном цикле разработки и работает только в теории. На момент разработки API Gateway рабочей версии не существовало.
  4. REPOSE. Это решение предоставляет только возможности контроля доступа без поддержки балансировки нагрузки.
  5. Varnish-apikey. Это решение использует кэширующий веб-сервер Varnish-Cache в своей основе как и API GatewayI. Тем не менее, этот проект так и не был завершён, и на момент последней версии поддерживал работу лишь на одном узле с управлением вручную без каких-либо средств для управления как политиками доступа, так и балансировкой нагрузки. Кроме того, в этом решении есть поддержка только одного статического правила ограничения доступа для всех пользователей одновременно.

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

Проекты

Разработка масштабируемой программной инфраструктуры для хранения и обработки данных в задачах вычислительной биологии

Разработчик/участник

Информационные системы

Перейти к списку всех технологий