Производительность 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
Временное хранение часто используемых ответов
Объединение нескольких запросов в один для сокращения количества обращений к серверу
Разделение большого запроса или ответа на более мелкие части (чанки), которые отправляются последовательно
Ограничение количества запросов за определенный промежуток времени
требует мониторинга и настройки
Повторение неудавшихся запросов
Установка максимального времени ожидания ответа
Разделение результатов на страницы
Сжатие данных перед передачей
Верхнеуровневые (архитектурные) способы
Распределение нагрузки между серверами
Использование сети серверов для кэширования и доставки контента
Выполнение операций без ожидания завершения, позволяя другим процессам продолжать работу
масштабируемость, т.к ресурсы не блокируются ожиданием завершения операций
#api