Масштабирование: как быть готовым к росту пользователей

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

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

Масштабирование — процесс, в ходе которого сервис начинает выдерживать большую нагрузку.

Когда стоит масштабироваться

Чтобы понять, когда стоит масштабироваться, стоит посчитать нагрузку на сервис (что мы только что сделали в прошлой главе). А теперь давай посмотрим, какие есть способы масштабирования. 

Признаки хорошего масштабирования

В процессе масштабирования легко ошибиться и сделать систему только хуже.

Давай посмотрим, на что ориентироваться: 

  1. При грамотном масштабировании удается сохранять низкое время отклика даже при большом RPS.
  2. Пропускная способность системы не падает.
  3. В случае роста нагрузки наша система деградирует контролируемо — то есть время отклика растет постепенно. 
  4. А в случае резкого скачка нагрузки система умеет защитить себя, чтобы не упасть.

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

Есть два варианта масштабироваться.

Масштабируем вверх

Если пользователи нахлынули на твой сервис, самый простой способ не испортить впечатление — это сделать масштабирование вверх (синоним — вертикальное масштабирование).

Вертикальное масштабирование (scale-up) — масштабирование сервиса за счет увеличения вычислительных мощностей. Например, увеличение оперативной памяти, процессоров или дисков.

Плюсы

  • Если сервис находится в облаке, сделать это достаточно просто
  • Хорошо работает для монолитных приложений

Минусы

  • Нельзя бесконечно увеличивать оперативную память и другие ресурсы, ведь есть аппаратные ограничения и можно быстро «упереться в потолок»

Что по итогу: масштабирование вверх подходит при резком наплыве клиентов и может помочь выдержать повышенный RPS. Но в долгосрочной перспективе это проигрышная модель из-за технических пределов по мощностям. 

Масштабируем горизонтально

Если ты проектируешь высоконагруженную систему, рано или поздно ты будешь думать как обеспечить доступность системы даже для 10 или даже 100 миллионов клиентов — и не просто наращивая число процессоров. Тут тебе поможет горизонтальное масштабирование.

Горизонтальное масштабирование (scale-out) — масштабирование за счет добавления новых экземпляров сервиса. Другими словами, теперь нагрузка будет приходиться на несколько экземпляров нашего сервиса.

Плюсы

  • Позволяет существенно повысить пропускную способность системы с перспективой на дальнейший рост нагрузки
  • Хорошо справляется с критическими ситуациями, даже если один из инстансов сервиса вышел из строя

Минусы

  • Сложность реализации — достаточно сложно сразу учесть все нюансы и верно построить хорошо масштабируемую систему
  • Увеличивает число компонентов системы и осложняет ее поддержку

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

Видео не скачано: Unknown video type or protected stream. Оригинальная ссылка