Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама

Чим вертикальне масштабування відрізняється від горизонтального?

Вертикальне масштабування (scale up) - зробити сервер потужнішим: більше процесорів, пам'яті, швидші диски.

Горизонтальне (scale out) - додати ще сервери й розподілити навантаження між ними.

Вертикальне Горизонтальне
зміни в коді майже не потрібні застосунок має бути готовим
межа найпотужніший доступний сервер практично немає
відмовостійкість одна точка відмови відмова одного сервера не зупиняє систему
вартість дорожчає нелінійно лінійна, дешеві сервери
складність низька балансувальник, спільний стан, деплой на кілька машин

Почати варто з вертикального. Сучасний сервер з 32 ядрами й 128 ГБ пам'яті витримує дуже багато - для більшості Laravel-проєктів це роки росту без зміни архітектури. Передчасне горизонтальне масштабування додає складність без потреби.

Горизонтальне потрібне, коли:

  • вертикальне вперлося в межу чи стало непропорційно дорогим;
  • потрібна відмовостійкість - навіть невеликий сервіс з вимогою «працювати під час оновлення сервера» потребує щонайменше двох екземплярів;
  • навантаження стрибкоподібне (розпродажі, пікові години) - простіше додати й прибрати сервери.

Що треба зробити в застосунку, щоб масштабуватися горизонтально - прибрати стан з окремого сервера:

  • сесії - у Redis чи базі, а не у файлах;
  • завантажені файли - в S3/R2, а не на локальний диск;
  • кеш і блокування - у спільному Redis;
  • черги - Redis/SQS, воркери на окремих машинах;
  • планувальник - запуск на одному сервері (onOneServer()).

Різні шари масштабуються по-різному: вебсервери горизонтально прості (вони без стану), а база даних - найскладніша частина: її зазвичай спершу масштабують вертикально, потім репліками для читання, і лише в крайньому разі - шардингом.

Докладніше в документації: System Design Primer

Схожі питання