Трудности проектирования API-шлюза¶
При проектировании API-шлюза могут возникнуть некоторые трудности, а именно:
Производительность и масштабируемость¶
Так как через шлюз поступают все запросы приложения, большое значение имеют его производительность и возможности масштабирования. Ключевое решение, которое влияет на эти показатели, заключается в выборе между синхронным и асинхронным вводом-выводом.
В синхронной модели каждый запрос обрабатывается отдельным потоком. Это простая модель, однако ограниченная числом одновременно порождаемых потоков.
Альтернативный подход состоит в использовании асинхронной (неблокирующей) модели ввода-вывода. В ней передачей запросов обработчикам событий занимается один поток с рабочим циклом.
Неблокирующий ввод-вывод гораздо лучше масштабируются, однако при этом требуется намного более сложная модель программирования, основанная на функциях обратного вызова.
Использование абстракций реактивного программирования¶
При выполнении нескольких запросов параллельно, что необходимо для уменьшения общего времени ответа, основной трудностью будет написание понятного и лёгкого в поддержке кода. Обычно такой код основывается на использовании функций обратного вызова, что рано или поздно может привести к ситуации callback hell. Поэтому более удачным подходом здесь будет использование реактивных методик.
Обработка частичных отказов¶
API-Шлюз должен быть не только высокопроизводительным, но и надёжным. Для этого его можно запускать в нескольких экземплярах за балансировщиком.
С другой стороны, необходима правильная обработка исходящих запросов, которые завершаются неудачей, или выполняются слишком долго. Для этого API-шлюз должен использовать шаблон “Предохранитель”
Реализация шаблонов, общих для архитектуры приложения¶
API-шлюз должен реализовывать выбранные шаблоны для обнаружения сервисов для определения местонахождения экземпляров сервисов, чтобы обращаться к ним. Также шлюз должен поддерживать выбранные шаблоны обеспечения наблюдаемости.
Дата создания : 30 июля 2022 г.