📖 Ванечка выбирает, как масштабировать
В понедельник у ПиццаЕдинорога лёг сайт заказов🤪
Не подтормаживал, а именно лёг, наглухо, ровно в тот момент, когда на него пришло больше людей, чем обычно.
Ванечка решил проблему быстро: зашёл в панель облака и переключил тариф на сервер помощнее, больше памяти, больше ядер, больше диска.
Неделю всё летало. Потом трафик снова вырос, Ванечка снова полез в панель, а там уже некуда, он упёрся в самый жирный тариф, который вообще существует. Ванечка сидел и смотрел на кнопку улучшить, которая больше ничего не улучшала.
👍ПиццаЕдинорог как раз вытаскивал противень из печи.
- Ванечка, у нас поток вырос вдвое. Что делаешь с печью?
- Куплю печь побольше.
- Купил. Поток снова вырос. Что делаешь?
- Ещё побольше...
- В какой-то момент печь перестанет влезать в кухню.
- И что тогда?
- Тогда ставишь вторую печь, вот и всё различие. То, что ты делал, называется вертикальное масштабирование: увеличиваешь характеристики той же машины, память, процессор, хранилище. Просто, переписывать ничего не надо. Так чаще всего масштабируют SQL-базы и приложения с состоянием, потому что растащить состояние по нескольким машинам и удержать его согласованным очень сложно. Но потолок есть всегда, ты в него только что упёрся.
- А вторая печь это...
- Горизонтальное масштабирование. Добавляешь машины и распределяешь нагрузку между ними.
- Так, а как клиент поймёт, на какую машину идти? Я же не могу выдать людям два разных IP и сказать: выбирайте сами, к какой печи вставать.
- Не можешь. Поэтому на входе стоит администратор, в системах он называется балансировщик нагрузки. Все клиенты обращаются к нему одному, он принимает входящий поток и отправляет каждый заказ на наименее загруженную печь. Клиент вообще не знает, сколько у нас печей, три или триста.
- И что чаще используют в реальности?
- Горизонтальное, почти всегда. Вертикальное это первая помощь, на стратегию оно не тянет.
Ванечка поднял три инстанса, поставил перед ними балансировщик и впервые за неделю выспался.
💛💛💛💛💛
Что важно запомнить:
➡️ Вертикальное масштабирование это увеличить мощность одной машины, просто, но упирается в потолок
➡️ Горизонтальное это добавить машины и распределить нагрузку, потолка практически нет
➡️ Клиенту нельзя раздавать разные IP, поэтому перед серверами стоит балансировщик нагрузки
➡️ В реальном мире большую часть времени используют горизонтальное масштабирование
💛💛💛💛💛
🔸🔸🔸🔸🔸🔸
Вертикальное (scale up):
⚫️Что делаем: докидываем RAM, CPU, диск на ту же машину
⚫️Плюс: код менять не надо, состояние живёт в одном месте
⚫️Минус: жёсткий физический потолок, машина остаётся единой точкой отказа
⚫️Где применяют: SQL-СУБД, stateful-приложения, там, где согласованность состояния важнее
Горизонтальное (scale out):
⚫️Что делаем: добавляем инстансы и раскидываем нагрузку
⚫️Плюс: масштабируется дальше, отказ одной машины не роняет систему
⚫️Минус: нужен балансировщик, состояние приходится выносить наружу, в кэш или БД
⚫️Где применяют: stateless-сервисы, веб-приложения, микросервисы
Как работает балансировщик:
⚪️Было: 8 клиентов, 1 сервер, перегрузка.
⚪️Стало: 8 клиентов идут в балансировщик, он отправляет 4 на сервер 1 и 4 на сервер 2. Балансировщик сам определяет, какой сервер наименее загружен.
Что спросить на аналитике: хранит ли приложение состояние в памяти инстанса. Если хранит, горизонтально его не размножить, пока состояние не вынесут наружу. Это ограничение архитектуры, и всплывать оно должно на этапе требований, а не на нагрузочном тесте.
💛💛💛💛💛
😐 А вы упирались в потолок вертикального масштабирования? Как выкручивались?
💛💛💛💛💛
Потренировать сбор требований
Где ещё я пишу:
YouTube
ВКонтакте
Сетка
Instagram*
Boosty
*Instagram принадлежит компании Meta, признанной экстремистской и запрещённой в РФ
#ВанечкаИЕдинорог #СистемныйАнализ #SystemDesign #Масштабирование #Обучение
Post #731
55

- 🔥 5
- ❤ 3
- 👏 3