Syntra Systems
Кейсы Услуги Продукты О нас Блог Медиа
+998 99 162 22 12 +7 999 900 22 12
RusEngUzb
Ряды одинаковых сиренево-голубых кубов, сложенных ступенями, — образ платформы, которая растёт за счёт одинаковых блоков
Сайты и платформы

Масштабируемая архитектура веб-платформы: монолит или микросервисы

· 9 мин чтения · обновлено

Масштабируемая архитектура — это устройство платформы, при котором рост нагрузки закрывают добавлением ресурсов, а не переписыванием кода. Для большинства проектов это модульный монолит с чёткими границами между частями, база данных, рассчитанная на рост объёма, состояние, вынесенное из приложения, и мониторинг. Микросервисы нужны не всем: они решают задачу независимых команд и релизов, а не саму по себе нагрузку.

Коротко

  • Масштабируемая архитектура закрывает рост нагрузки добавлением ресурсов, а не переписыванием кода.
  • Горизонтальный рост работает только если приложение не хранит состояние: сессии и файлы выносят во внешние хранилища.
  • Большинству проектов подходит модульный монолит; микросервисы решают задачу независимых команд и релизов, а не нагрузки.
  • Порядок подключения: индексы и запросы, кэш, CDN, очереди, реплики чтения и только потом разделение данных по узлам.
  • Для соблюдения закона достаточно облака в дата-центре Узбекистана: локализация обязательна лишь для отдельных категорий данных.

Что такое масштабируемость и чем вертикальный рост отличается от горизонтального

Масштабируемость — это способность системы выдерживать рост нагрузки без переделки: пользователей стало больше, платформа отвечает так же быстро, просто использует больше ресурсов. Путей два, и они не заменяют друг друга.

Оговорка про состояние здесь не формальность. Пока сессии пользователей, загруженные файлы и счётчики лежат в памяти одного сервера, второй сервер не поможет: часть запросов будет попадать «не туда». Кроме того, в любой системе остаётся работа, которую нельзя разложить на несколько машин, — например, запись в одну таблицу базы данных. Эта доля и задаёт реальный предел горизонтального роста.

Почему приложение должно работать без состояния

Приложение без состояния не хранит между запросами ничего, что нельзя потерять вместе с сервером. Методика Twelve-Factor App формулирует это прямо: процессы приложения не хранят состояние и ничего не разделяют между собой, а данные, которые должны сохраняться, лежат во внешнем сервисе — обычно в базе данных. Привязку пользователя к конкретному серверу, sticky sessions, методика называет нарушением принципа.

На практике это значит: сессии — в общем хранилище вроде Redis, загруженные файлы — в объектном хранилище, а не на диске сервера приложений, долгие операции — в очереди задач. Тогда любой сервер обрабатывает любой запрос, а вышедший из строя заменяется новым без потери данных.

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

Монолит, модульный монолит или микросервисы

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

ПодходКогда подходитЧто даётЧем рискуете
МонолитПервая версия продукта, одна команда, нагрузка неизвестнаБыстрый старт, простая отладка, одна база и один деплойСо временем части срастаются, и любое изменение задевает соседей
Модульный монолитПродукт растёт, команда до нескольких групп, нагрузка предсказуемаГраницы между модулями заданы заранее, любой модуль можно вынести позжеГраницы нужно поддерживать дисциплиной, иначе он превращается в обычный монолит
МикросервисыНесколько команд с разными релизными циклами, части с резко разной нагрузкойНезависимые обновления, точечное масштабирование перегруженных частейСеть между сервисами, распределённые сбои, своя инфраструктура и мониторинг

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

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

Что подключают при росте нагрузки и в каком порядке

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

  1. Медленные запросы и индексы. Первое узкое место почти всегда в базе данных. Журнал медленных запросов показывает, какие из них съедают время, а недостающие индексы и лишние выборки исправляются без изменения архитектуры.
  2. Кэш. Результаты частых и неизменных запросов держат в памяти — например, в Redis. Главный вопрос не «как положить», а «когда сбрасывать»: правило устаревания продумывают вместе с логикой, иначе пользователь увидит старые данные.
  3. Отдача статики через CDN. Картинки, скрипты и стили раздаёт сеть узлов ближе к пользователю. Это снимает с сервера приложений большую часть запросов и ускоряет загрузку страницы.
  4. Очереди. Отправку писем, генерацию документов, обработку файлов и выгрузки выносят из запроса пользователя в фоновые обработчики. Пользователь получает ответ сразу, а тяжёлая работа выполняется отдельно и переживает всплески.
  5. Реплики базы для чтения. Документация PostgreSQL описывает горячий резерв — сервер, который принимает подключения и обслуживает запросы только на чтение. На такие серверы уводят отчёты и аналитику, чтобы они не мешали работе с заказами.
  6. Разделение данных по узлам. Шардирование оставляют на крайний случай: оно усложняет запросы, резервное копирование и обновления. К нему переходят, когда предыдущие шаги пройдены, а одна база перестала справляться.

Автомасштабирование в облаке добавляет и убирает серверы по текущей нагрузке. Оно помогает при резких пиках, но не заменяет эти шаги: если узкое место — база данных, лишние серверы приложений только увеличат очередь к ней.

Как понять, что платформа перестаёт справляться

Со стороны системы смотрят на четыре показателя. Книга Google по SRE называет их золотыми сигналами: задержка (сколько занимает обработка запроса), трафик (сколько запросов приходит), ошибки (доля неуспешных) и насыщенность (насколько заполнены самые дефицитные ресурсы). Рост задержки при неизменном трафике — первый признак, что запас кончается.

Со стороны пользователя скорость измеряют по Core Web Vitals. Google задаёт пороги, при которых показатель считается хорошим, и считает результат по 75-му процентилю загрузок, отдельно для телефонов и компьютеров.

Нагрузочное тестирование проводят до пика, а не после него. Сценарии берут из реальной работы — регистрация, поиск, оформление заказа, — нагрузку поднимают постепенно и фиксируют, при каком числе одновременных пользователей растёт задержка и появляются ошибки. Полученное число становится известным пределом, а не сюрпризом в день акции.

Где размещать платформу в Узбекистане и что требует закон

Для соблюдения закона собственный сервер не нужен: достаточно облака в дата-центре на территории страны. С 27 марта 2026 года хранить в Узбекистане обязательно только биометрические и генетические данные и данные пользователей операторов связи — так устанавливает статья 27-1 закона о персональных данных в редакции закона № ЗРУ-1125 от 26.03.2026.

Важно Остальные персональные данные можно хранить за рубежом при одном из условий той же статьи. Разбор условий, перечня стран и задержек до зарубежных дата-центров — в статье об облаке и сервере в Узбекистане.

Собственные серверы оправданы при постоянной высокой нагрузке, когда аренда тех же мощностей за несколько лет выходит дороже покупки, или при требованиях к физической изоляции оборудования. Платформе с меняющейся нагрузкой удобнее облако: конфигурацию меняют без закупки и ожидания поставки.

Сколько стоит инфраструктура и от чего растёт счёт

Цена зависит от того, сколько ресурсов действительно нужно платформе, и от набора услуг вокруг них: резервных копий, мониторинга, защиты от DDoS и администрирования. На странице серверов и облака состав работ расписан по трём задачам.

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

Признаки архитектуры, готовой к росту

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

За пределами списка остаётся эксплуатация: кто дежурит при сбое, за какое время реагирует и кто обновляет систему. Без этого даже удачная архитектура не спасает — как устроена такая работа, разобрано в статье о технической поддержке IT-инфраструктуры.

Как мы проектируем платформы

Syntra Systems считает нагрузку до запуска: сколько одновременных пользователей ожидается, какой объём данных копится за год, в какие часы приходят пики и какие операции самые тяжёлые. По этим числам подбираем конфигурацию и решаем, что выносить в фоновые процессы, а после запуска пересматриваем её по фактическим показателям.

Пример На выставке UzFranchise Expo нагрузка приходилась на вход: за два дня отсканировали 3 539 QR-билетов, проверка одного гостя занимала 0,2 секунды. Такая нагрузка приходит не равномерно, поэтому запас считают по пиковым минутам, а не по среднему за день. Подробности — в кейсе выставки.

Платформу собираем модулями с чистыми границами, состояние выносим из приложения, отчётность и обработку файлов — в отдельные процессы. Размещаем в Syntra Cloud, в дата-центре на территории Узбекистана, с ежедневными резервными копиями и мониторингом доступности.

Обсудим вашу задачу

Расскажите, что нужно сделать, — оценим сроки и стоимость и предложим решение.

Обсудить архитектуру платформы

Частые вопросы

Нужны ли микросервисы каждому проекту?

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

Чем модульный монолит отличается от обычного?

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

Когда пора выносить модуль в отдельный сервис?

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

Что делать, если платформа уже тормозит под нагрузкой?

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

Нужно ли сразу закладывать Kubernetes и контейнеры?

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

Как часто проводить нагрузочное тестирование?

Перед запуском, перед сезонным пиком или рекламной кампанией и после крупных изменений в базе данных или интеграциях. Между этими точками достаточно мониторинга: если задержка растёт при неизменном трафике, тест стоит повторить раньше плана.

Насколько дороже проектировать платформу с расчётом на рост?

Разница на старте невелика: это вопрос порядка в коде и данных, а не дополнительных технологий. Дорого обходится обратное — переделка архитектуры, когда платформа уже работает, остановить её нельзя, а данные нужно переносить без потерь.

Читайте также