Представим ситуацию. Вы прошли курс JavaRush, прошли онлайн-стажировку, и у вас красуется первый проект на PaaS платформе Heroku. Вы рассылаете резюме и начинаете ходить по собеседованиям. И вот на одном из них вас просят показать ваш проект (или же его захотят быстро глянуть еще до собеседования, перейдя по ссылке из резюме). Открывается браузер, и начинает дооолго грузиться ваш сайт. Да, можно обьяснить, что это бесплатный Heroku и он так работает, но впечатление испорчено. В причинах данного поведения и методах борьбы с ним мы и попытаемся разобраться в этой статье.
Начать стоит с понятия dyno hours. Согласно документации, Dyno hours — это, по сути, время работы вашего приложения/приложений, выраженное в часах/месяц. Сразу после регистрации бесплатного аккаунта вам дается 550 часов в месяц. Проведя несложные калькуляции, получаем около 17 часов в день для одного приложения. Маловато будет. Посему привязываем кредитную карту в Account settings — Billing и получаем еще 450 бесплатных часов (32 часа в сутки уже с головой). Эту проблему решили. Есть еще одна. В вышеупомянутом документе указано также о "засыпании" (dyno sleeping) приложения при отсутствии активности на протяжении 30 минут. На просторах интернета встречается три основных подхода :
  1. Регулярно (к примеру, раз в 5 минут) отсылать запросы приложению изнутри самого приложения.

    С помощью JavaScript это будет выглядеть так:

    var http = require("http");
    setInterval(function() {
        http.get("http://<your app name>.herokuapp.com");
    }, 300000); // every 5 minutes (300000)
  2. Использовать внешние сайты "пингалки", которые будут с заданной периодичностью проверять ваш сайт.

    Примером таких сайтов является Pingdom, Uptime Robot, Kaffeine и другие. Принцип прост. Заходим, регистрируемся (если надо), указываем сайт и интервал времени и применяем настройки.

  3. Использовать Heroku Newrelic addon Данный плагин предназначен для мониторинга и уведомления о падениях сайта, но как полезный "побочный эффект" он не даст заснуть приложению. На этом методе, как на самом, на мой взгляд, красивом, я и остановился. Опишу его подробнее.

    Чтобы установить addon, нужно перейти по данной ссылке и нажать кнопку "Install New Relic APM". В открывшемся окне нужно выбрать тарифный план и название приложения, к которому будет применен данный addon.

    После чего нажать кнопку "Provision add-on".

    После установки New Relic станет доступен на странице настройки приложения в списке установленных аддонов.

    Клацаем на ссылку и попадаем на страницу настроек дополнения.

    Переходим на вкладку "Synthetics" и нажимаем кнопку "Add new".

    В открывшемся окне в разделе "Enter the details" указываем произвольное название монитора и адрес сайта, который будем мониторить. Выбираем локацию, откуда будет сайт проверяться в "Select monitoring locations".

    Периодичность проверки указываем в "Set the shedule" (я ставил 15 минут) и email для уведомлений в "Get notified".

    После всех настроек не забываем нажать кнопку "Create monitor".

Вуаля, монитор создан и теперь ваше приложение будет работать 24/7 и не подведет в самый ответственный момент :)