Масштабирование веб-приложений

Автор: Макаров Д.А., Шибанова А.Д.

Журнал: Теория и практика современной науки @modern-j

Рубрика: Математика, информатика и инженерия

Статья в выпуске: 1 (67), 2021 года.

Бесплатный доступ

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

Архитектура, масштабирование, нагрузка, база данных, кеширование

Короткий адрес: https://sciup.org/140275782

IDR: 140275782

Текст научной статьи Масштабирование веб-приложений

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

Что такое масштабируемость приложения?

Масштабируемость приложения - это способность приложения расти со временем, способность эффективно обрабатывать все больше и больше запросов в минуту (RPM). Это не просто настройка, которую можно вклю-чить/выключить; это длительный процесс, который затрагивает почти каждый элемент в вашем стеке, включая как аппаратную, так и программную части системы. [1]

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

Проблемы с масштабированием приложений

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

Даже если у вас нет проблем с производительностью или масштабируемостью, таких как у Twitter или Shopify, правильное планирование и разработка приложения бесценны. Когда дело доходит до масштабирования, вы можете столкнуться с десятками различных проблем. Несколько общих источников ваших проблем могут быть связаны с:

  •    Ограниченные физические ресурсы, такие как память, процессоры и т.д.

  •    Неправильное управление памятью

  •    Неэффективный движок базы данных

  •    Сложная схема базы данных, плохая индексация

  •    Плохо выполняемые запросы к базе данных

  •    Неправильная конфигурация сервера

  •    Ограничения сервера приложений

  •    Общее качество кода

  •    Неэффективное кеширование

  •    Отсутствие инструментов мониторинга

  •    Слишком много внешних зависимостей

  •    Неправильный дизайн фоновых заданий [2]

Как сделать эффективное масштабирование?

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

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

Каждое отдельное веб-приложение выполняет огромное количество запросов к базе данных, даже если у вас есть прекрасно спроектированные отношения с правильной индексацией, работающие на лучшем движке на рынке, не забудьте эффективно запрашивать информацию у своей базы данных, избегая запросов N + 1, ненужной загрузки, и т.д.,

Мы должны помнить, что масштабируемость - это не только ваш код. Очень важно иметь правильную серверную инфраструктуру и конфигурацию. Вы можете сэкономить много времени, просто выбрав соответствующие инструменты и поставщиков. Например, Amazon EC2 предоставляет функции автоматического масштабирования, Docker предлагает масштабирование для создания контейнеров и т. д. [3]

Нам не нужен специальный компьютер для кэширования при запуске проекта, но это определенно хорошая практика для реализации, отслеживания и изменения ваших потребностей в кешировании с течением времени. Если мы не используем «готовую к работе» инфраструктуру, такую как AWS, помните, что однажды вы должны подготовиться к переходу от односерверной архитектуры к многосерверной с балансировкой нагрузки и обратным проксированием.

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

Даже если наша кодовая база чистая и легко обслуживается, нам нужны инструменты для ее мониторинга и выявления проблем как можно скорее.

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

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

Держите все в актуальном состоянии, чтобы избежать блокировок из-за устаревших частей вашей системы (например, старой версии Ruby).

Эти несложные рекомендации позволяют эффективно масштабировать нагрузку на веб-приложение.

Список литературы Масштабирование веб-приложений

  • Ли Атчисон. Масштабирование приложений. Выращивание сложных систем.-Санкт-Петербург: Питер, 2018. - 256 с.
  • Масштабирование нагрузки web-приложений. URL: https://habr.com/ru/post/113992/ (дата обращения: 04.01.2021).
  • Архитектура высоких нагрузок. URL: https://ruhighload.com/Архитектура+высоких+нагрузок (дата обращения: 04.01.2021).
Статья научная