Производительность 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