Nos encontramos con esto hace un tiempo y pasé bastante tiempo en esto para mi gran frustración. Intentaré mantener el punto sobresaliente. Hay varias soluciones de autoescalado Heroku que parecen decentes a primera vista.
El ejemplo que ya se ha dado heroku-autoscaler es en realidad para autoescalar dynos y es prácticamente la única solución que afirma hacer esto (y ciertamente no lo hace bien). La mayoría de los demás solo afirmarán autoescalar trabajadores por usted. Entonces, centrémonos en eso primero. Los autoescaladores que verá para los trabajadores dependen de lo que realmente está usando para sus trabajadores de segundo plano, p. delayed_job, resque. Esas son las librerías de procesamiento de fondo más comunes que las personas usan, por lo que los autoexplicativos intentarán engancharse en una de ellas. Se puede usar cosas como:
Algunos de estos trabajos en el Cedar apilar algunos podrían necesitar un poco de ajuste. El problema con todos ellos es que es como tratar de salir del pantano con tu propio cabello. Tomemos hirefire como ejemplo (probablemente sea el mejor del lote). Modifica el trabajo retrasado para que los propios trabajadores puedan ver la cola y generar más trabajadores si es necesario; si no hay más trabajos en la cola, los trabajadores se cerrarán mutuamente. Hay varios problemas:
- si desea poner un trabajo en la cola para que se ejecute en el futuro en lugar de en este momento, no tiene suerte.Un trabajador se inicia cuando los trabajos ingresan a la cola, pero como el trabajo se ejecutará en el futuro, el trabajador se apagará y no se iniciará a menos que otro trabajo entre en la cola (eso es lo único que hace que los trabajadores se pongan en marcha)
- pierde la capacidad de reintentar trabajos fallidos, esto es posible de forma predeterminada en el trabajo retrasado, pero tarda un poco antes de que un trabajo fallido se vuelva a intentar (y progresivamente más) si falla varias veces, pero los trabajadores se apagarán durante este tiempo de retraso y no hay nada que los incite a volver a iniciar (en esencia, este es el mismo problema que en el primer escenario)
Lo que soluciona este problema es tener un trabajador funcionando continuamente. por lo tanto, controle la cola periódicamente y puede ejecutar trabajos cuando sea necesario o incluso aumentar el número de trabajadores. Pero si haces eso, no estás ahorrando dinero (tienes un trabajador que funciona continuamente las 24 horas del día, los 7 días de la semana y tienes que pagar por eso) y esa es la premisa detrás de los escalada automáticos en heroku. Básicamente, si solo tiene que realizar el procesamiento en segundo plano ocasional, o si tiene trabajos en segundo plano que pueden fallar pero logran volver a intentarlo o tiene trabajos en segundo plano que no necesitan ejecutarse al instante, no hay una biblioteca de ajuste automático que pueda uso que funcione para usted.
Aquí hay una alternativa. El tipo que escribió Hirefire, más tarde lo convirtió en una aplicación web (Hirefire app), cuya esencia es monitorear externamente sus empleados/dinners Heroku para usted y girar/apagar los dinines de los trabajadores según sea necesario. Esto fue gratis en versión beta, pero ahora cuesta dinero, menos de lo que pagaría por tener un trabajador las 24 horas del día, los 7 días de la semana, pero no es insignificante si solo necesita algunos trabajos de fondo de vez en cuando. De cualquier forma, esta es la única forma viable de asegurarse de que su infraestructura de trabajo en segundo plano haga lo que quiera (eso y su propia solución, lo que significa tener una máquina como EC2, donde puede colocar algunos scripts que hagan ping a su aplicación heroku y giren subir/cerrar trabajadores según sea necesario, una cantidad de esfuerzo no trivial).
Ahora la aplicación Hirefire ofrece una autoescala de sus dinas para usted también, esto se basa en conectarse a la latencia de su cola de solicitudes heroku. Sin embargo, descubrí que esto no funcionó bien, tal vez si estás cerca del centro de datos de Amazon donde realmente vive tu aplicación heroku (no lo éramos), es posible que tengas una experiencia diferente. Pero, para nosotros, generó innecesariamente un montón de dynos y nunca los giraría, sin importar cuánto haya ajustado la configuración. Puede atribuirlo al hecho de que fue una versión beta, puede haber mejorado desde entonces, pero esa es la experiencia que tuve.
Para resumir, si quiere autoescalar a sus trabajadores, use la aplicación Hirefire, ahorrará mucho menos dinero de lo que pensaba, pero sigue siendo la opción más barata. Si quieres autoescalar dynos básicamente no tienes suerte. Esta es solo una de esas limitaciones con las que vives para tener la comodidad de una plataforma como Heroku.
Muchas gracias, gran respuesta. Le daré a Hirefire una oportunidad más tarde, y si encuentro alguna otra buena solución, informaré aquí también. – FernandoH
@Fernando ¿Qué terminaste yendo? – user456584
@skorks, probé Heroku-autoscaler por un tiempo. Funcionó, pero no perfectamente, y no me sentí muy bien con algo capaz de escalar los recursos que me costó. Al final, abandoné el escalado automático a través de estos ... ¿Estás considerando usar alguno de estos? Dado que lo probé hace más de un año, puede haber mejores soluciones hoy en día, ¡dígame si encuentra alguna! – FernandoH