🏍️ Как сделать API быстрее: 5 ключевых стратегий оптимизации

Разработка API – это только полдела. Рассказываем, как правильно оптимизировать его работу, чтобы пользователи не сталкивались с задержками.

Этот материал взят из нашей еженедельной email-рассылки, посвященной бэкенду. Подпишитесь, чтобы быть в числе первых, кто получит дайджест.

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

Кэширование

В теории суть кэширования проста:

  • Нужно хранить часто запрашиваемые данные в кэше (высокоскоростном буферном хранилище), чтобы предоставлять быстрый доступ к ним, когда это необходимо.
  • Если какого-то запроса в кэше нет, данные загружаются из базы данных.
  • Если какие-то данные в кэше больше не пользуются спросом или утратили актуальность, нужно их удалить.

Практическая реализация кэширования сложнее – нужно решить две главные проблемы:

  • Выбрать оптимальную стратегию кэширования (неправильный выбор может привести к снижению производительности или к использованию устаревших данных). Чаще всего используется кэширование на стороне, кэширование со сквозным чтением или сквозной записью и кэш с отложенной записью.

Найти эффективный подход к инвалидации кэша — процессу удаления устаревших данных, который обеспечивает актуальность информации.

Основные стратегии кэширования

Готовое решение можно подсмотреть у высоконагруженных платформ – например, разработчики LinkedIn рассказали, как им удалось обеспечить более 4,8 млн запросов в секунду с помощью кэша Couchbase, а программисты Facebook* поделились секретами масштабирования Memcache.

***

С 28 августа по 4 сентября Proglib Academy предлагает скидку 35% на курсы:

***

Масштабирование с помощью балансировки нагрузки

Балансировщик нагрузки лучше всего подходит для приложений без сохранения состояния, которые легко масштабируются горизонтально

Асинхронная обработка

Иногда невозможно решить несколько сложных задач одновременно. В таких случаях лучший подход – отложить их на потом. С помощью асинхронной обработки можно сообщить клиентам, что их запросы зарегистрированы и находятся в процессе выполнения. Затем сервер обрабатывает запросы по одному и сообщает результаты клиентам в порядке очереди. Этот метод позволяет вашему серверу приложений не выйти из строя и обеспечить максимальную производительность. Однако, конечно же, асинхронная обработка подходит не для каждого приложения.

Асинхронная обработка

Пагинация

Если ваш API возвращает большое количество записей, нужно рассмотреть пагинацию – это процесс разбиения данных на отдельные страницы или пакеты. С помощью пагинации можно ограничить количество записей в каждом запросе, тем самым уменьшая объем передаваемых данных по сети. Это улучшает время ответа API с точки зрения клиента. Например, вместо того чтобы загружать 1000 записей сразу, можно загружать их по 20-50 за раз. Клиенту будет предложено получить первую страницу из списка записей. Когда клиент захочет увидеть больше записей, он может запросить следующую страницу, и так далее.

Пул соединений

Эта техника улучшает производительность приложений, которым необходимо часто подключаться к базам данных, особенно в системах с высокой степенью конкурентности. Вместо создания нового соединения с базой данных для каждого запроса, что может существенно замедлить работу из-за времени, необходимого на установку соединения, пул соединений позволяет заранее создать набор активных соединений, которые могут быть повторно использованы различными запросами.

Пул соединений

* Facebook принадлежит компании Meta, деятельность которой признана экстремистской и запрещена на территории РФ

***

Какие стратегии оптимизации вы уже применяли в своих проектах? Поделитесь своим опытом!

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ

matyushkin
12 мая 2020

Как запустить веб-приложение на Nginx в Docker 🐳👨🏽‍💻

Инструкция по настройке совместной работы веб-приложения и сервера Nginx в ...
Библиотека программиста
19 июня 2018

Что нужно знать, чтобы стать бэкенд-разработчиком в 2018

В этой статье речь пойдёт о том, какими языками и инструментами необходимо ...