Изучите варианты масштабирования, доступные в Heroku

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

Но что происходит, когда покупатели слишком сильно любят ваше творение?

В этом видео продукт Vertabiz мгновенно приобрел успех. Сначала это было здорово! Но через несколько секунд они поняли, что им не хватает возможностей удовлетворить потребительский спрос.

Хотя реклама по ссылке выше была связана с доставкой и логистикой, та же проблема существует на уровне обслуживания. Знание того, когда следует расширять (и сокращать), чтобы опережать спрос, не только сохраняет качество обслуживания клиентов, но также может принести финансовые выгоды.

В этой статье я собираюсь изучить варианты масштабирования в экосистеме Heroku.

Как я узнаю, когда мне нужно масштабировать?

В видео Vertabiz (выше) команда осознала необходимость увеличения своих мощностей, когда увидела, что количество заказов превышает их ожидания. Для обеспечения бесперебойной работы клиентов с веб-приложениями необходимо добавить емкость до того, как существующие службы будут загружены на 100%.

Концепция «знать, когда масштабировать» так же важна, как и создание масштабируемой архитектуры. В конце концов, слишком быстрое масштабирование потребует больше затрат, чем требуется, а последующее масштабирование повлияет на производительность и потенциально приведет к потере клиентов. Такой же дорогостоящий сценарий существует, когда спрос снижается и нет необходимости использовать дополнительную мощность.

Heroku предоставляет следующие параметры, которые помогут понять, когда необходимо изменить емкость вашего приложения или службы:

  • ссылка на вкладку Metrics на панели инструментов Heroku обеспечивает графическое представление исторического спроса на приложение, которое может оправдать изменения текущей емкости.
  • с помощью надстройки loader.io, которая может помочь понять, где вашему приложению требуется дополнительная емкость.
  • использование надстройки Монитор с торговой площадки Heroku, чтобы следить за производительностью

Масштабирование по вертикали и горизонтали

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

  • Вертикальное масштабирование - увеличьте размер дино. Думайте об этом как об обновлении до более мощной системы для обработки запросов.
  • Горизонтальное масштабирование - увеличивает количество динамиков для одного и того же типа.

В большинстве случаев простое добавление экземпляров по горизонтали не решает проблемы; то есть, если архитектура приложения не подготовлена ​​для этого сценария, как отмечено в аспекте процессы в Двенадцатифакторном приложении. Именно здесь часто используются балансировщики нагрузки или шлюзы API.

В Heroku маршрутизация запросов является частью экосистемы - просто еще одним способом экономии времени и ресурсов Heroku. Подробнее об этом можно прочитать здесь.

Масштабирование вручную с помощью Heroku

Ручной подход к автоматическому масштабированию с помощью Heroku просто означает, что кто-то собирается использовать панель управления Heroku или интерфейс командной строки Heroku (CLI) для удовлетворения потребности, связанной со спросом, в данном приложении или услуге.

Использование веб-панели управления Heroku

В приведенном выше примере, если бы я хотел увеличить вычислительную мощность конфигурации Dyno (вертикальное масштабирование) для одной из моих служб, работающих в Heroku, были бы использованы следующие шаги:

  1. Перейдите на вкладку Ресурсы на панели инструментов Heroku:

2. Нажмите один раз кнопку «Изменить тип дино» и сделайте соответствующий выбор.

Следуйте остальным инструкциям на экране, сохраните запрос, и Heroku сделает все остальное за вас.

Если бы я хотел масштабировать свое существующее приложение Heroku (Professional) по горизонтали с использованием того же пользовательского интерфейса, был бы выбран значок карандаша на первом шаге. На последующем экране можно было бы увеличить количество Dynos по мере необходимости.

Использование Heroku CLI

Использование интерфейса командной строки - еще один вариант масштабирования приложений или служб Heroku вручную. Однако этот выбор зависит от вашего знания желаемого результата.

Например, для увеличения количества экземпляров Dyno можно выполнить следующий интерфейс командной строки:

heroku ps:scale web=3

Чтобы изменить тип Dyno, можно выполнить следующий интерфейс командной строки:

heroku ps:type worker=standard-2x

Имейте в виду, что изменение типа Dyno не влияет на количество экземпляров.

Конечно, опытные инженеры DevOps могут использовать внешние процессы для выполнения Heroku CLI, чтобы автоматизировать масштабирование Dyno в Heroku, имея запланированный процесс, выполняющий команды CLI.

Автомасштабирование с помощью Heroku

Если вы используете Heroku на уровне производительности или Dynos работают в частных пространствах (выделенные среды, работающие в изолированной сети), автомасштабирование встроено в уровень обслуживания, предоставляемый Heroku.

Для таких ситуаций вкладка Ресурсы в Heroku Desktop включает кнопку включения автомасштабирования, которая открывает следующий диалог:

Поскольку эта функция ограничена более продвинутыми уровнями экосистемы Heroku, эта статья предоставляет отличную документацию по функции автомасштабирования.

Другие параметры автомасштабирования

Для приложений, работающих на других уровнях в Heroku, в Heroku Marketplace доступно несколько дополнительных продуктов:

Я работал с некоторыми из этих надстроек, которые разбиты на следующие категории автомасштабирования:

  • Режим по расписанию - автоматическое масштабирование на основе расписания
  • Интеллектуальный режим - автоматическое масштабирование в зависимости от времени запроса / ответа.

Запланированный режим автомасштабирования

В запланированном режиме автомасштабирования изменения количества Dynos, запущенных в Heroku, известны группе инженеров, поддерживающих приложение или службу. Есть две подкатегории подхода:

  • Пользовательский интерфейс - надстройка использует специальный интерфейс для масштабирования Dynos.
  • Планировщик - надстройка использует интерфейс командной строки для автоматического масштабирования.

Пользовательский интерфейс

Подкатегория пользовательского интерфейса содержит надстройки Heroku Marketplace, которые предназначены для настройки расписаний для приложений или служб, работающих в Heroku. Эти параметры включают ориентированный на цель пользовательский интерфейс, упрощающий работу конечного пользователя.

Следующие надстройки позволяют автоматизировать масштабирование Dynos по расписанию:

Важно отметить, что AutoIdle - это только вариант «масштабирования до нуля» и рекомендуется для непроизводственных сред. Основная цель - сэкономить деньги на непроизводственных Dynos, которые в настоящее время не используются.

Планировщик

Надстройки на основе планировщика могут использоваться для передачи команд интерфейса командной строки и могут использоваться для увеличения и уменьшения масштаба по мере необходимости.

В этом подходе используются следующие команды интерфейса командной строки Heroku (указанные в разделе "Использование интерфейса командной строки Heroku" выше):

heroku ps:scale web=3
heroku ps:type worker=standard-2x

Следующие дополнительные продукты позволяют выполнять команды интерфейса командной строки по расписанию:

Эти решения часто опираются на базовые функции Cron, работающие в базовых системах в экосистеме Heroku.

Интеллектуальный режим автомасштабирования

Ограничение режима автоматического масштабирования по расписанию состоит в том, что структура спроса на приложение или услугу полностью известна. Это означает, что можно предсказать как более высокий, так и более низкий уровень спроса. Это не всегда может быть известно - видео Vertabiz во введении является примером сценария.

Интеллектуальный режим автомасштабирования изменяет количество Dynos в зависимости от текущего времени запроса / ответа, реализуемого в вашем приложении или сервисе. Следующие дополнительные продукты предлагают эту функцию:

Использование опции интеллектуального автомасштабирования гарантирует, что неожиданные изменения спроса будут обработаны без какого-либо вмешательства человека. Это полезно в тех сценариях, где спрос превышает любые ожидаемые уровни из вариантов, указанных в этом документе до сих пор.

Заключение

В своих публикациях я ссылался на следующее заявление о миссии, которое я предлагаю всем ИТ-специалистам:

«Сосредоточьте свое время на предоставлении функций / функций, которые увеличивают ценность вашей интеллектуальной собственности. Используйте фреймворки, продукты и сервисы для всего остального ».
- Дж. Вестер

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

В настоящее время для каждого типа Dyno в Heroku существуют следующие диапазоны количества экземпляров:

Хотя автомасштабирование связано с расходами, правильно реализованные уровни принесут общую экономию от попыток масштабирования приложения или службы вручную. Используя указанные выше параметры, вероятность потери клиентов в процессе значительно снижается.

Хорошего дня!