Перейти к основному содержимому

Производительность API: краткий обзор способов

1. Кэширование

Временное хранение часто используемых ответов.

  • Преимущества:
    • Снижение времени отклика.
    • Уменьшение нагрузки на сервер за счет повторного использования данных.
  • Недостатки:
    • Риск устаревания данных.
    • Сложность управления сроками жизни кеша.
  • Применяется при частых запросах к неизменяемым или редко изменяемым данным.

2. Batch-запросы

Объединение нескольких запросов в один для сокращения количества обращений к серверу.

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

3. Chunked-запросы

Разделение большого запроса или ответа на более мелкие части (чанки), которые отправляются последовательно.

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

4. Rate Limiting

Ограничение количества запросов за определенный промежуток времени.

  • Преимущества:
    • Защита сервера от перегрузок за счет контроля нагрузки.
    • Исключение злоупотребления API.
  • Недостатки:
    • Может вызвать неудобства у пользователей при жестких ограничениях.
    • Требует мониторинга и настройки.
  • Применяется для защиты от DDoS-атак и управления ресурсами сервера.

5. Retry

Повторение неудавшихся запросов.

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

6. Timeout

Установка максимального времени ожидания ответа.

  • Преимущества:
    • Предотвращение долгих ожиданий.
    • Освобождение ресурсов.
    • Обнаружение проблем с задержками.
  • Недостатки:
    • Возможны сбои при медленной работе сервера.
    • Требует точной настройки.
  • Применяется для предотвращения зависания запросов и оптимизации ресурсов.

7. Pagination

Разделение результатов на страницы.

  • Преимущества:
    • Снижение нагрузки на сервер за счет обработки небольших частей данных.
    • Улучшение скорости обработки.
  • Недостатки:
    • Увеличение сложности навигации по данным.
    • Усложнение реализации API.
  • Применяется для работы с большими объемами данных (списки, поисковые результаты).

8. Compression

Сжатие данных перед передачей.

  • Преимущества:
    • Снижение объема данных.
    • Повышение скорости передачи.
  • Недостатки:
    • Требует дополнительных ресурсов на сжатие и разжатие данных.
  • Применяется для уменьшения трафика.

Верхнеуровневые (архитектурные) способы

Load Balancing

Распределение нагрузки между серверами.

  • Преимущества:
    • Улучшение масштабируемости и устойчивости за счет равномерного распределения запросов.
    • Повышение доступности системы.
  • Недостатки:
    • Увеличение сложности настройки и управления.
    • Требуется мониторинг и управление балансировщиками нагрузки.
  • Применяется для высоконагруженных систем.

CDN (Content Delivery Network)

Использование сети серверов для кэширования и доставки контента.

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

Асинхронное взаимодействие

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

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

Подборка материалов по производительности API

  1. Что такое производительность API и как ее можно улучшить?
  2. Использование стратегий кэширования для повышения производительности API
  3. Инструменты и методы нагрузочного тестирования API
  4. Устранение распространенных проблем с REST API
  5. Cache API — кэшируем данные на стороне клиента
  6. Кэширование API
  7. Все о кэшировании и кэшах
  8. Проблемы при работе с кэшем и способы их решения
  9. Пакетный API: объединение запросов с помощью asyncio и Batch API
  10. Введение в потоковую передачу данных в Вебе (чанки)
  11. Ограничение скорости обработки запросов
  12. Как жить с ограничениями внешних API на количество запросов
  13. Ограничения для запросов
  14. Все что вам нужно знать о таймаутах
  15. Настройка времени ожидания с fetch API: POST запрос
  16. Дизайн пагинации страниц в API
  17. Сжатие запросов к API
  18. Как работает сжатие GZIP
  19. Распределяем нагрузку: Yandex API Gateway и другие инструменты балансировки
  20. Собеседование по проектированию систем: разница между шлюзом API и балансировщиком нагрузки
  21. CDN
  22. CDN: что такое и как это работает

Видео

  1. Rate Limiting (англ)
  2. Дмитрий Цепелев / Как ускорить GraphQL API
  3. High Load: CDN своими руками / Алексей Акулович

Книги

  1. Паттерны проектирования API — Джей Гивакс
  2. Проектирование веб-API — Арно Лоре
  3. Тестирование веб-API — Марк Винтерингем