Производительность 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
Post #401
16.8K
- 👍 59
- 🔥 17
- ❤ 12