2011-07-06 5 views
20

Quiero saber si hay alguna solución para autoescalar dynos Y trabajadores en Heroku en un entorno de producción (probablemente una solución diferente para cada uno de ellos, ya que no tienen ninguna relación). ¿Qué estás usando/empresas con respecto a esto?Gemas/Servicios para autoescalar Dinas y trabajadores de Heroku

Encontré muchas opciones, pero ninguna de ellas parece realmente madura para un entorno de producción. Hay Heroscale, que parece presentar cierta latencia, ya que no se ejecuta localmente, y también he oído hablar de algún tiempo de inactividad. Hay modificaciones de los retrasyed_jobs, que no se han actualizado durante mucho tiempo, y hay algunos problemas con los bundlers actuales. También hay algunas alternativas relacionadas con reque, que parecen no manejar muy bien algunas excepciones HTTP, que resultan en fallas de la aplicación, y otras que parecen necesitar un trabajador en ejecución constante para programar otros trabajadores, y también pueden sufrir algunas excepciones HTTP problemas.

Bien. En el final. ¿Qué se está utilizando, hoy en día, para autoescalar los dinamómetros y trabajadores de Heroku en un entorno de producción con Rails3?

Gracias de antemano.

Respuesta

34

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.

+0

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

+0

@Fernando ¿Qué terminaste yendo? – user456584

+0

@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

2

Estoy tratando de encontrar una buena manera de autoescala también.

https://github.com/ddollar/heroku-autoscale hace esto, pero tiene un descargo de responsabilidad acerca de su inmadurez.

+0

Ohh, encontré ese también. Me sentí un poco incómodo debido a esa cláusula de exención de responsabilidad, pero lo intentaré más tarde :) Gracias – FernandoH

+0

Puede valer la pena mirar las horquillas en https://github.com/ddollar/heroku-autoscale/network Por favor, comparta lo que alguna vez de lo contrario, encontrará por cierto – gunn

10

Heroku está ofreciendo un nuevo complemento llamado AdeptScale que acaba de salir de Beta.

Here is the add-on page for AdeptScale

Here is the more detailed documentation for AdeptScale

Here is the form to sign up for Heroku's Beta Program

Esperamos que esto sea una solución robusta para autoscaling heroku Dynos, ya que no no estoy siendo feliz con las opciones actuales.

Actualización (2/4/13): Me inscribí en el programa Beta de Heroku para probar este complemento, y funcionó muy bien para mí. De vez en cuando aumenta el tráfico, pero sobre todo estoy sentado en el número mínimo de dynos que he establecido en 2. Se ha reducido mucho mi factura y eliminado la preocupación de que pueda ser lento durante los tiempos pico de uso.

Actualización (3/6/13): Se agregó un enlace a la página de registro de Heroku para su programa beta.

Actualización (4/14/13): parece que el escalado automático está fuera de Beta. Todavía funciona muy bien para mí.

+0

¿Cómo te inscribiste en el programa Beta de Heroku? – simo

+0

Aquí está el formulario para registrarse: https://beta.heroku.com/signup –

3

HireFire.io (El Servicio, no el Proyecto de Código Abierto) ahora le permite usar sus métricas de New Relic para escalar automáticamente sus dindes web. New Relic es una herramienta de supervisión del rendimiento proporcionada como un complemento a través de Heroku. Tienen un nivel gratuito y es suficiente para usar con HireFire.

Usted puede auto-escala basada en:

  • Tiempo de respuesta
    • Este es el tiempo de respuesta se encuentra en la nueva reliquia del tablero de instrumentos. Es una combinación de varios factores, incluyendo Request Queue Server, Database Performance, App-capa, router, etc.
  • Apdex Puntuación
    • Esto permite aplicar una escala basada en el nivel de Nueva Relic Apdex, lo que le permite escalar basado en la experiencia/satisfacción del usuario, que está determinado por este puntaje.

Aparte de esto, se han convertido en el lenguaje/marco agnóstico. Para los dineros de trabajadores, todo lo que tiene que hacer para que el escalado automático funcione es configurar un punto final JSON en una ruta determinada en su aplicación que devuelva una cadena JSON muy simple que contenga el tamaño de la cola (proporcionamos macros convenientes, pero no necesarios) para el lenguaje Ruby y un poco de soporte inmediato para las aplicaciones de Django, pero como dije, funciona para cualquier lenguaje/framework al configurar manualmente un punto final JSON, es muy fácil). Para dynos web, puede usar el Source de HireFire Metric con básicamente cualquier lenguaje/framework, y el New Relic Metric Source mencionado anteriormente para lenguajes/frameworks que son compatibles con New Relic (estos son lenguajes comunes como Ruby, Python, Java, etc.)

Descargo de responsabilidad: He construido HireFire.

+1

+1 Soy un cliente feliz de hirefire.io para mi aplicación heroku Rails. Michael es muy receptivo a los problemas y hirefire hace lo que dice en la lata - ahora incluso admite múltiples colas para dynos de trabajadores. –

1

que he escrito recientemente un sistema de escalado automático heroku llamada Heroku vectorial:

https://github.com/wpeterson/heroku-vector

Se le permite escalar varios tipos de dinamómetros basadas en diferentes fuentes de tráfico. Actualmente es compatible con NewRelic a lo largo y con la cantidad de hilos ocupados de Sidekiq. A medida que el tráfico sube o baja, aumentará el número de dinámicas hacia arriba o hacia abajo. Es un proceso de daemon que se puede ejecutar en su propio banco de pruebas en Heroku o en otro lugar.

Cuestiones relacionadas