Про capacity management
Поговорим об управлении ресурсами (Capacity Management). Этот процесс делится на два ключевых этапа: выделение ресурсов и планирование ресурсов.
Выделением ресурсов мы занимаемся, когда отвечаем на вопрос "Как поддержать работу сервиса прямо сейчас", это может быть резкий рост траффика, обновление сервиса и т.д. Во время данного этапа необходимо:
- Оценить влияние нехватки ресурсов. Нужно определить, какой функционал или какие зависимые сервисы страдают, это поможет оценить срочность выделения ресурсов.
- Проанализировать текущее использование ресурсов. Изучите пиковые значения потребления, проверьте, задействовано ли резервирование, чтобы понять, где есть узкие места.
- Заложить ресурсы под неизвестные факторы. Новая фича может "выстрелить", а за ней и траффик. Обновление библиотеки привести к снижению производительности. Но больше резервов = выше затраты, поэтому здесь необходимой найти баланс.
Планированием ресурсов мы занимаемся, когда отвечаем на вопрос "Как сохранить сервис в рабочем состоянии в обозримом будущем". При планировании нужно:
- Определить интервалы повышенной нагрузки. Их может быть несколько. Например, вашим сервисом по выбору авиабилетов активно пользуются в будни с 16:00 до 21:00. А перед новогодними праздниками или летом спрос на перелеты резко возрастает, и трафик может вырасти в разы. Зная эти периоды, вы сможете заранее выделить дополнительные ресурсы, а в спокойное время — освободить их для других приложений.
- Проверить доступность ресурсов. Если в пиковый момент дополнительных ресурсов не окажется, клиенты столкнутся с задержками в лучшем случае, а в худшем — сервис станет недоступен. Всегда учитывайте максимальные возможности масштабирования вашего сервиса и планируйте, исходя из них.
Для лучшего управления ресурсами используйте best practices:
- Мониторинг. Сегодня это must-have. Только с качественным мониторингом можно эффективно планировать ресурсы и оценивать текущее состояние сервиса. Без него вы работаете вслепую.
- Алертинг (Оповещения). Настроенный алертинг спасает от долгих простоев. Он помогает минимизировать время недоступности сервиса и даже предсказать потенциальное падение заранее.
- Квоты на ресурсы. Если есть возможность ограничить потребление ресурсов сервисом (CPU, память, SSD и т.д.), обязательно сделайте это. Учтите, что на те же ресурсы претендуют и другие сервисы.
- Autoscaling (автомасштабирование). Чтобы сервис справлялся с ростом трафика без ручного вмешательства, настройте автомасштабирование. Оно бывает вертикальным (увеличение выделенных ресурсов на сервис) и горизонтальным (добавление новых реплик сервиса).
- Нагрузочное тестирование. Хотите знать, сколько ваш сервис выдержит в текущей конфигурации? Проведите нагрузочное тестирование. Это особенно важно перед запуском сервиса или крупным обновлением. Не советую проводить нагрузочное тестирование с помощью клиентского траффика на проде 😁