ПИРОЖКИ. ГОРИЗОНТАЛЬНОЕ И ВЕРТИКАЛЬНОЕ МАСШТАБИРОВАНИЕ
Сегодня обсудим понятия вертикального и горизонтального масштабирования. Постараюсь объяснить так, чтобы даже ваша любимая бабуля поняла.
Ваша бабушка делает самые вкусные пирожки на свете. Каждый раз, когда внучка приезжает в гости, эти произведения искусства уже на столе. Жили бы долго и счастливо, но однажды вы пришли с другом. Он тоже впечатлился пирогами, рассказал о них в вашей компании. И вот вы уже едете к бабуле в компании 10 друзей.
Ваша бабушка — женщина смелая и сильная. Так что сделать в 10 раз больше пирожков — это даже не вызов, а небольшая разминка. Она просто встанет пораньше, а на начинку фарш купит в магазине, а не будет прокручивать вручную.
После посиделок бабушкина популярность только крепчает. Родители друзей готовы на постоянной основе покупать пироги. Начинает работать сарафанное радио. Желающих всё больше. Кажется, у бабули на пенсии намечается бизнес.
Только простыми действиями, вроде раннего подъёма, уже не ускориться. Что можно сделать? Да много чего. Покупаем кухонный комбайн для нарезки капусты, лука и другой начинки. Покупаем духовку большего объёма и мощности. Покупаем дополнительные сковородки, миски и посудомоечную машину. Отлично! С этими новыми и более мощными девайсами пирожковый бизнес какое-то время успешно работает.
Дела идут слишком хорошо. Заказов всё больше! Даже с новой техникой бабушка не справляется. Но! У неё есть подруги из клуба «Московского долголетия». Они тоже готовы вписаться и заработать хорошую прибавку к пенсии. Бабушка делится рецептом — и вот уже три бабули кормят окружающих свежей выпечкой.
На этом примере мы видим, как масштабируются процессы. Давайте оставим пироги и посмотрим на IT — увидим те же три шага.
Вы запустили свой pet-project. Сначала клиентов у вас мало: ваша мама да друзья. Можно вообще не задумываться о масштабировании.
Затем нагрузка нарастает. Перед тем как бежать «заливать проблемы» железом или расширять облачную подписку, пробуем делать программные оптимизации. Как видели раньше, иногда очень простым изменением в коде можно получить x30. Меняем алгоритмы, добавляем кеширование, меняем архитектуру, снимаем блокировки и так далее. В крупных компаниях этот процесс идёт постоянно.
Следующий этап — когда программных оптимизаций не хватает или они настолько сложные, что у разработчика уйдёт год на их реализацию (а он у вас на зарплате, это не бесплатно!). Тогда можно улучшить сервер, на котором работает ваш продукт: докупить память, поставить SSD, обновить CPU. Это называется вертикальное масштабирование.
Из вертикального масштабирования вы тоже уже выжали всё, что можно. Не осталось места, куда ставить плашки памяти, у вас самая мощная конфигурация из доступных на рынке, а нагрузка продолжает расти. Остаётся одно: докупать серверы. Это горизонтальное масштабирование.
Сразу видно, что если у вертикального масштабирования есть предел, то у горизонтального его как будто нет. Сколько есть денег — столько серверов и покупайте. Были времена, когда была возможность заглянуть в бюджет на закупку серверов: один обходился примерно в 1 000 000 рублей (без видеокарт). И это без учёта обслуживания, электричества, стоимости стойки и так далее. Горизонтально масштабироваться — дорого!
Важно понимать, что и вертикальное, и горизонтальное масштабирование требуют модификации программного обеспечения. Что толку в дополнительном ядре, если вы его не используете? Что толку в дополнительном сервере, если вы не умеете направлять туда трафик?
Для горизонтального масштабирования нужна полноценная архитектура под распределённые вычисления. Это сложное ПО, которое нужно специально проектировать.
Если вернуться к примеру с бабушками: мы остановились на трёх, каждая из которых делает пирожки. Но может быть и так, что баба Зина лучше всех готовит начинку, но плохо справляется с лепкой. Тогда можно полностью делегировать ей приготовление начинки — и ей уже не нужна мощная духовка. Так что оптимизироваться всегда нужно с умом!
P.S. На фото — идеальный кулич моего производства.
#бабанюра_программирует
Post #692
163

- 🤓 6
- ❤ 2
- 👍 1
- 👨💻 1