TGViewer
Java: fill the gaps Java: fill the gaps @java_fillthegaps · 12.3K subscribers
Post #287 4.51K
Масштабирование: основные типы

Что такое масштабирование? Какие виды вы знаете? - популярные вопросы на собеседованиях на позицию мидл и выше.

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

Иногда достаточно просто поменять код. Например, добавить кэш и снизить нагрузку на БД. В итоге сервис обработает в 10 раз больше запросов, и этого улучшения хватит на несколько лет. Но это не масштабирование, а оптимизация.

При масштабировании считается, что с кодом всё отлично и мы упираемся в физические ресурсы. Процессор не справляется, память кончается и так далее. И вопрос становится более конкретным: как добавлять аппаратные ресурсы к текущей системе?

На самом верхнем уровне масштабирование делится на горизонтальное и вертикальное.

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

При горизонтальном нагрузка распределяется на несколько машин
✅ Отказ одного экземпляра не так страшен
✅ Пределы масштабирования гораздо шире
❌ Нужна инфраструктура для поддержки

В книжке Art of Scalability приводится концепт scale cube и три вектора горизонтального масштабирования:

🔸Horizontal duplication: несколько копий одного сервиса

✅ Простая реализация, нам нужен только балансировщик
❌ Запутанный код
❌ Тяжело обновлять версию сервиса
❌ Большие и перегруженные кэши

🔸Functional decomposition: делим монолит на микросервисы

Каждый сервис отвечает за небольшой функционал
✅ Простой и понятный код каждого сервиса
✅ Более специфичные и эффективные кэши
❌ Поделить монолит на отдельные сервисы и наладить общение между ними - чудовищно непросто
❌ Сложная инфраструктура

🔸Data partitioning или шардирование

Сервисы одни и те же, но каждый экземпляр работает на ограниченном количестве данных и своём экземпляре БД
✅ Отказы БД менее критичны
✅ Кэширование работает отлично
❌ Нужен компонент для перенаправления запросов
❌ Сложная логика работы с данными

На практике три подхода комбинируются в разных пропорциях.
  • ❤ 1
More from @java_fillthegaps
  1. Apr 30, 2026Get Your Hands Dirty on Clean Architecture: отзыв на книгу Когда я подняла тему чистой арх…
  2. Apr 27, 2026​Clean Architecture: отзыв на книгу Наконец-то дочитала книгу Clean Architecture Роберта М…
  3. Mar 4, 2026Как переиспользовать контекст в интеграционных тестах Сегодня расскажу базовый минимум для…
  4. Mar 4, 2026Post #660
  5. Mar 4, 2026Тестовый контекст поднимается 2 минуты. У нас 4 класса с интеграционными тестами, их конфи…
  6. Feb 25, 2026Чистая архитектура. Главы 3-5 Продолжаем спидран по Clean Architecture Роберта Мартина. ⭐️…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →