Manera fácil de evitar Heroku ralentí?


En las aplicaciones gratuitas de Heroku, los dynos parecen seguir inactivos: mi aplicación tiene muy poco tráfico, pero tampoco es realmente aceptable en mi caso que mis usuarios tengan que esperar más de 20 segundos para activar un nuevo dyno.

Francamente, con ese tipo de espera, muchos se irán incluso antes de que aparezca la primera página.

Entonces, tengo un problema: debo pagar 3 36 al mes para ahorrar a cada usuario 20 segundos vergonzosamente largos cuando mi tráfico está en un solo dígito por día.

¿Hay alguna manera ¿esto??

 257
Author: Sridhar Ratnakumar, 2011-03-30

16 answers

Puede instalar el complemento gratuito New Relic. Tiene una función de monitor de disponibilidad que hará ping a su sitio dos veces por minuto, evitando así que el banco de pruebas se ralentice.

Más o menos la misma solución que Jesse pero quizás más integrada a Heroku... Y con algunas ventajas (el monitoreo del rendimiento es simplemente genial).

Monitoreo de disponibilidad

Nota: para todos aquellos que dicen que no funciona: la parte importante en mi respuesta es "monitor de disponibilidad". Solo instalando el complemento no ayudará. También debe configurar el monitoreo de disponibilidad con la URL de su aplicación heroku.

 340
Author: Pierre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-13 06:42:52

Como alternativa a Pingdom sugiero probar Uptimerobot. Es gratis y ofrece 5 minutos de intervalo de verificación del sitio. Funciona muy bien para mí.

ACTUALIZACIÓN del 7 de mayo de 2015: Esto ya no será posible, ya que Heroku cambiará su dinamómetro libre para evitar mantenerlo vivo durante 24 horas completas:

Otro cambio importante tiene que ver con dyno sleeping, o 'idling'. Si bien las aplicaciones no pagadas siempre han dormido después de un tiempo de espera de actividad, algunas servicios de ping automáticos para prevenir ese comportamiento. los dynos gratuitos están permitidos 18 horas despiertos por período de 24 horas, y en las próximas semanas comenzaremos a notificar a los usuarios de aplicaciones que excedan ese límite. Con la introducción del hobby dyno (7 7 por mes), le pedimos que deje que su aplicación duerma después del tiempo de espera, o actualice a esta nueva opción.

¿Cuándo va a ser en vivo? De acuerdo con su entrada de blog:

Aplicaciones que ejecutan un solo dyno 1X que no acumular cualquier otro las cargas dyno se migrarán gradualmente a los nuevos dynos gratuitos comenzando el 1 de julio .

 85
Author: Cristian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-07 19:46:09

En mi opinión, el uso del nivel "gratuito" del servicio no debe alimentar una aplicación de producción o orientada al cliente. Mientras que las soluciones antedichas trabajan contra el ralentí del Dyno, piense minuciosamente sobre lo que usted está haciendo.

Si nada más, use un trabajo cron para hacer ping a su sitio y desactive la comprobación de períodos conocidos de bajo uso (es decir, durante la noche) para asegurarse de que Heroku no elimine el nivel gratuito para todos los demás.

 72
Author: drowe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-21 03:01:09

También puedes probar http://kaffeine.herokuapp.com , está hecho para evitar que las aplicaciones Heroku se duerman. Hará ping a tu aplicación cada 10 minutos para que no se duerma. Es completamente gratis.

 53
Author: Romain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-17 17:19:25

Puedes usar http://pingdom.com / para comprobar su aplicación; si se hace cada minuto más o menos, heroku no ralentizará su aplicación y no tendrá que girar.

 45
Author: Jesse Wolgamott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-30 01:18:28

Respuesta fácil if si valora el servicio, pague por él.

Todos estos 'trucos' para obtener los beneficios del servicio de pago...bueno, es esencialmente como robar cable. Cuestionable incluso para enumerarlos aquí. ¿Qué sigue, trucos sobre cómo piratear juegos?

Al igual que otro póster aquí, valoro el servicio gratuito para el desarrollo y las pruebas y estaré muy molesto con todos ustedes tipos con problemas de ética si Heroku lo elimina porque hay demasiados gorrones. No creo que fue lo suficientemente directo en su crítica.

 35
Author: elc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-10 18:02:06

Probado y trabajando en mi propia aplicación Heroku usando Node.js 0.10.x el 6/28/2013

var http = require('http'); //importing http

function startKeepAlive() {
    setInterval(function() {
        var options = {
            host: 'your_app_name.herokuapp.com',
            port: 80,
            path: '/'
        };
        http.get(options, function(res) {
            res.on('data', function(chunk) {
                try {
                    // optional logging... disable after it's working
                    console.log("HEROKU RESPONSE: " + chunk);
                } catch (err) {
                    console.log(err.message);
                }
            });
        }).on('error', function(err) {
            console.log("Error: " + err.message);
        });
    }, 20 * 60 * 1000); // load every 20 minutes
}

startKeepAlive();
 25
Author: DubbyTT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-28 05:04:31

Uso el complemento Heroku Scheduler proporcionado por Heroku de forma gratuita. Una vez añadido es tan sencillo como crear un trabajo con ' curl http://yourapp.herokuapp.com ' y un intervalo de 10 minutos.

 13
Author: Jordan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-11 22:50:18

Dice en la documentación de Heroku que tener más de 1 web dyno nunca se apagará. Posiblemente una solución más barata que $0.09 / hora como sugiere Pierre.

introduzca la descripción de la imagen aquí

Documentación

 10
Author: newshorts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-02 17:14:07

He escrito los pasos:

Add Agregue la gema 'newrelic_rpm' a su Gemfile en preparación y producción
install bundle install
Login Inicie sesión en el panel de control de heroku y agregue newrelic addon
setup Una vez agregado, configure el ping automático a su sitio web para que no esté inactivo
Browse Vaya a Menú > Supervisión de disponibilidad ( en Configuración) → Haga clic en"Activar el Monitoreo de disponibilidad"
Enter Introduzca la url para hacer ping (por ejemplo: http://spokenvote.org )
Select Seleccione 1 minuto para el intervalo

 9
Author: Pratik Khadloya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-03 17:28:00

Encontré otro sitio gratuito que hará ping constantemente a su sitio llamado Unidler

Http://unidler.herokuapp.com/

Igual que pingdom, pero no necesita iniciar sesión.

 3
Author: sonnyhe2002,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-01 04:32:52

Tenga en cuenta que los nuevos tipos de dyno ( actualmente en beta, entrantes en junio de 2015) prohibirán mantener un dyno libre despierto 24/7, ya que tendría que dormir al menos 6 horas por día.

Así que intenta eliminar cualquier solución que hayas encontrado en este hilo antes de que salga (o paga por el servicio que realmente usas).

 3
Author: aymericbeaumet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-26 14:47:29

Si tiene acceso a un servidor unix que siempre está activo, puede establecer un trabajo cron en GET su sitio web. Bajo los nuevos términos del plan gratuito, probablemente querrás desactivar las GETs en las horas nocturnas, usando una línea en tu crontab como esta:

*/20 8-22 * * * /usr/bin/curl domain.com &> /dev/null

Esto indica curl a GET domain.com cada 20 minutos entre las horas de 8 y 22.

Tenga en cuenta que

  1. No todos los que quieren ver su sitio web viven en su zona horaria y
  2. Su sitio puede reciba otras solicitudes en medio de la noche, despertando su banco de pruebas y causando otra hora de tiempo de uso para cada solicitud. Incluso si nadie más conoce tu dominio, hay bots y rastreadores que están activos todo el tiempo. Por lo tanto, es aconsejable configurar el proceso definido en su crontab para que esté activo durante solo 14 a 16 horas para proporcionar un búfer contra estos despertares

Además, asegúrese de que la hora del sistema esté configurada correctamente para que la ventana de tiempo de inactividad ocurra cuando se espera a él.

 3
Author: drs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-21 01:55:06

Esto funciona para mí en una aplicación de primavera que hace una solicitud http cada 2 minutos a la ruta de la url raíz `

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.client.RestTemplate;

public class HerokuNotIdle {

private static final Logger LOG = LoggerFactory.getLogger(HerokuNotIdle.class);

@Scheduled(fixedDelay=120000)
public void herokuNotIdle(){
    LOG.debug("Heroku not idle execution");
    RestTemplate restTemplate = new RestTemplate();
    restTemplate.getForObject("http://yourapp.herokuapp.com/", Object.class);
}
}

Recuerde configurar su contexto para habilitar scheduler y crear el bean para su scheduler

@EnableScheduling
public class AppConfig {

@Bean
public HerokuNotIdle herokuNotIdle(){
    return new HerokuNotIdle();
}
}
 1
Author: zeta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-11 03:18:22

Tío, aquí hay una aplicación heroku que puedes ejecutar para mantener vivas varias aplicaciones heroku. Simplemente agregue las URL que desea hacer ping en la configuración.json.

Https://github.com/jcarras/rise-and-shine

 1
Author: ReadyBird,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-05 07:10:02

Tengo una aplicación que solo necesita ejecutarse de lunes a viernes alrededor de la hora del almuerzo. Acabo de añadir el siguiente script al crontab en el trabajo:

#!/bin/sh
# script to unidle heroku installation for the use with cronjob
# usage in crontab:
# */5 11-15 * * 1-5 /usr/local/bin/uptimer.sh http://www.example.com
# The command /usr/local/bin/uptimer.sh http://www.example.com will execute every 5th minute of 11am through 3pm Mondays through Fridays in every month.
# resources: http://www.cronchecker.net
echo url to unidle: $1
echo [UPTIMER]: waking up at:
date
curl $1
echo [UPTIMER]: awake at:
date

Así que para cualquier aplicación, simplemente coloque otra línea en su crontab como:

*/5 11-15 * * 1-5 /usr/local/bin/uptimer.sh http://www.example.com
 0
Author: RedRoosterMobile,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-22 13:17:41