nodejs - ¿Una manera fácil de prevenir el ralentí de Heroku?
heroku php (16)
Chico, aquí hay una aplicación de heroku que puedes ejecutar para mantener vivas varias aplicaciones de heroku. Solo agregue las URL que desea hacer ping en config.json.
En las aplicaciones gratuitas de Heroku, los días parecen estar inactivos: mi aplicación tiene poco tráfico, pero tampoco es realmente aceptable en mi caso que mis usuarios tengan que esperar más de 20 segundos para hacer girar un nuevo dinamómetro.
Francamente, con ese tipo de espera, muchos se irán antes de que aparezca la primera página.
Por lo tanto, tengo un problema: ¿debería pagar $ 36 al mes para ahorrar a cada usuario unos 20 segundos vergonzosamente largos cuando mi tráfico es de un dígito por día?
¿¿Hay alguna forma de evitar esto??
Como alternativa a Pingdom te sugiero probar Uptimerobot . Es gratis y ofrece un intervalo de 5 min. Funciona muy bien para mí.
ACTUALIZACIÓN del 7 de mayo de 2015: esto ya no será posible, ya que blog.heroku.com/archives/2015/5/7/heroku-free-dynos para evitar mantenerlo vivo durante las 24 horas completas:
Otro cambio importante tiene que ver con dormir dormido o "inactivo". Mientras que las aplicaciones no pagas siempre han dormido después de un tiempo de espera de actividad, algunas aplicaciones utilizaron servicios de ping automático para evitar ese comportamiento. se permiten días de alerta 18 horas despiertos por un período de 24 horas, y durante las próximas semanas comenzaremos a notificar a los usuarios las aplicaciones que excedan ese límite. Con la introducción del hobby dyno ($ 7 por mes), le pedimos que deje que su aplicación se duerma después de un tiempo de espera o que se actualice a esta nueva opción.
¿Cuándo va a ser esto en vivo? Según su publicación en el blog:
Las aplicaciones que ejecutan un único dinamómetro 1X que no acumula ningún otro cargo de dinamómetro se migrarán gradualmente a los nuevos dinamizadores gratuitos que comienzan el 1 de julio .
En la documentación de Heroku, se dice que tener más de 1 dinosaurio web nunca estará inactivo. Posiblemente una solución más barata que $ 0.09 por hora, como sugiere Pierre.
En mi opinión, el uso del nivel ''gratuito'' del servicio no debería ser una aplicación de producción o de cara al cliente. Mientras que las soluciones anteriores funcionan en contra del ralentí de Dyno, piensa detenidamente en lo que estás haciendo.
Si no es nada más, use un trabajo cron para hacer ping a su sitio, y desactive la verificación de los períodos de bajo uso conocidos (es decir, durante la noche) para asegurarse de que Heroku no elimine el nivel gratuito para todos los demás.
Encontré otro sitio gratuito que constantemente hará ping a tu sitio llamado Unidler
Igual que pingdom, pero no necesita iniciar sesión.
He anotado los pasos:
➜ Agregue la gema ''newrelic_rpm'' a su Gemfile bajo la puesta en escena y producción
➜ paquete de instalación
➜ Inicie sesión en el panel de control de Heroku y agregue el complemento newrelic
➜ Una vez agregado, configure el ping automático a su sitio web para que no esté inactivo
➜ Navegue hasta Menú> Monitoreo de disponibilidad (bajo Configuración) → Haga clic en "Activar monitoreo de disponibilidad"
➜ Ingrese la url para hacer ping (por ejemplo: http://spokenvote.org )
➜ Seleccione 1 minuto para el intervalo
Puedes usar http://pingdom.com/ para verificar tu aplicación; si se hace aproximadamente cada minuto, heroku no desocupará tu aplicación y no necesitará girar.
Respuesta fácil: si usted valora el servicio, entonces pague por él.
Todos estos ''trucos'' para obtener los beneficios del servicio pagado ... bueno, es esencialmente como robar un cable. Cuestionable incluso para enumerarlos aquí. ¿Qué sigue, trucos sobre cómo piratear juegos?
Como otro póster aquí, valoro el servicio gratuito para el desarrollo y las pruebas y me molestaré enormemente con todos los tipos con problemas de ética si Heroku lo elimina porque hay demasiados cargadores. Simplemente no creo que él fuera lo suficientemente directo en sus críticas.
Si tiene acceso a un servidor Unix que siempre está activo, puede configurar un trabajo cron para obtener su sitio web. Bajo los nuevos términos del plan gratuito, probablemente desees desactivar los GET
en las horas de la noche, usando una línea en tu crontab como esta:
*/20 8-22 * * * /usr/bin/curl domain.com &> /dev/null
Esto instruye a curl
a GET
domain.com cada 20 minutos entre las horas 8 y 22.
Sé consciente de
- No todos los que quieren ver tu sitio web viven en tu zona horaria y
- Su sitio puede recibir otras solicitudes en medio de la noche, despertando su dinamómetro y causando otra hora de uso para cada solicitud. Incluso si nadie más conoce su dominio, hay robots 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 de su sistema esté configurada correctamente para que la ventana de tiempo de inactividad ocurra cuando usted lo espera.
También puedes probar http://kaffeine.herokuapp.com , está diseñado 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.
Tenga en cuenta que los nuevos tipos de dinamómetro ( actualmente en versión beta , entrantes en junio de 2015) prohibirán mantener un dinamómetro gratis 24/7, ya que tendría que dormir al menos 6 horas por día.
Así que intente eliminar cualquier solución que haya encontrado en este hilo antes de que salga (o pague por el servicio que realmente usa).
Tengo una aplicación que solo necesita ejecutarse de lunes a viernes a la hora del almuerzo. Acabo de agregar 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
Uso el complemento Heroku Scheduler proporcionado por Heroku de forma gratuita. Una vez agregado, es simple como crear un trabajo con ''curl http://yourapp.herokuapp.com '' y un intervalo de 10 minutos.
este trabajo para mí en una aplicación de Spring realizó una solicitud http cada 2 minutos a la ruta de la URL de la 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 el programador y crear el bean para su programador
@EnableScheduling
public class AppConfig {
@Bean
public HerokuNotIdle herokuNotIdle(){
return new HerokuNotIdle();
}
}
Probado y trabajando en mi propia aplicación Heroku usando Node.js 0.10.x el 28/6/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();
Puedes 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 dinamómetro deje de funcionar.
Más o menos la misma solución que Jesse, pero quizás más integrada a Heroku ... Y con algunas ventajas (la supervisión del rendimiento es simplemente genial).
Nota: para todos aquellos que dicen que no funciona: la parte importante en mi respuesta es "monitor de disponibilidad". Simplemente instalar el complemento no ayudará. También debe configurar el monitoreo de disponibilidad con la URL de su aplicación heroku.