hobby - heroku worker
Heroku: dyno web vs dyno trabajador? ¿Cuántas/qué relación necesito? (5)
Dynos son básicamente procesos que se ejecutan en su instancia. Con la nueva pila de Cedar, se pueden configurar para ejecutar cualquier comando de shell arbitrario. Para las aplicaciones web, generalmente tiene un proceso llamado "web" que es responsable de responder a las solicitudes HTTP de los usuarios. Todos los otros procesos son lo que anteriormente se llamaban "trabajadores". Se ejecutan continuamente en segundo plano para cosas como cron, colas de procesamiento y cualquier cómputo pesado que no desee vincular a sus procesos web. También puede escalar cada tipo de proceso, de modo que múltiples procesos de cada tipo serán arrancados para una concurrencia adicional. La cantidad de cada uno que use realmente depende de las necesidades de su aplicación y la carga que recibe. Puede usar herramientas como el complemento New Relic para supervisar estas cosas. Eche un vistazo a los artículos sobre el Modelo de proceso y el archivo de proceso en el centro de desarrollo de Heroku para obtener más detalles.
Tenía curiosidad sobre cuál es la diferencia entre los dynos web y de los trabajadores en Heroku. Dan una explicación de una oración en su página de precios, pero esto me dejó confundido. ¿Cómo sé cuántos elegir de cada uno? ¿Hay una relación a la que debería aspirar? Soy bastante nuevo en esto, ¿alguien puede dar una explicación en profundidad, o tal vez algún tipo de forma de calcular cuántos y qué tipo de dynos necesitaría?
Además, estoy confundido sobre lo que significan por la cantidad de horas para cada dinamómetro.
También me encontré con este artículo. Como una de sus soluciones sugeridas, dijeron que aumentar la cantidad de dynos. ¿A qué tipo de dyno se refieren aquí?
La respuesta breve es que necesita tantas como necesite para mantener sus colas bajas.
Como John describe, si comienzas a ver una cola en tus registros, entonces necesitas más dynos. Si comienza a ver que sus colas de fondo se vuelven demasiado largas (la forma en que obtiene esta información depende de lo que haya implementado), entonces necesita más trabajadores.
No hay proporción, ya que depende mucho del diseño y uso de la aplicación.
Su mejor indicación si necesita más dynos (también conocidos como procesos en Cedar) son sus registros heroku. Asegúrese de actualizar al registro ampliado (es gratis) para que pueda alinear su registro.
Está buscando las entradas heroku.router y el valor que más le interesa es el valor de la cola; si esto es constantemente más que 0, entonces es una buena señal de que necesita agregar más dynos. Básicamente, esto significa que hay más solicitudes entrantes de las que su proceso puede manejar para que estén en cola. Si se ponen en cola durante demasiado tiempo sin devolver ningún dato, se agotarán los tiempos de espera.
No hay una relación ideal, me temo, podría tener una aplicación que hace 100 solicitudes por segundo que necesitan muchos procesos web, pero que simplemente no hace uso de los trabajadores. Solo necesita procesos de trabajo si está procesando en segundo plano como enviar correos electrónicos, etc.
ps Backlog demasiado profundo sería un proceso web de Dyno que lo causaría.
ACTUALIZACIÓN: el 26 de marzo de 2013, Heroku retiró la cola y aguarda los campos desde el inicio de sesión.
los campos de cola y espera se han eliminado de los mensajes de registro del enrutador. Además, el enrutador Heroku ya no establece los encabezados HTTP X-Heroku-Dynos-En-Use, X-Heroku-Queue-Depth y X-Heroku-Queue-Wait-Time para las solicitudes entrantes.
Varias personas han mencionado que no existe una relación conocida y que la proporción de trabajadores de la web a trabajadores de "fondo" que usted querrá dependerá de cómo haya diseñado su aplicación, eso es correcto. Sin embargo, pensé que podría ser útil agregar que, como regla general, desea que sus trabajadores de la web, y por lo tanto las acciones de los controladores a los que sirven, sean rápidos y ligeros, para reducir la latencia en los tiempos de respuesta de las acciones del navegador. Si hay alguna acción del navegador que requiera más de, digamos, aproximadamente medio segundo de tiempo real para servir, entonces es probable que desee diseñar algún tipo de sistema que lleve la mayor parte de esa acción a una cola.
A continuación, diseñaría un (os) dyno (s) de trabajador fuera de línea que darán servicio a esta cola. Pueden tomar mucho más tiempo porque no hay respuestas HTTP pendientes en su salida. Tal vez la página que tradujiste desde la solicitud inicial del navegador que presiona la acción servirá un poco de Javascript que inicia un hilo que verifica si la solicitud ha finalizado cada 5 segundos o algo similar.
Todavía no puedo darte una razón para trabajar por la misma razón que otros, pero espero que esto te ayude a decidir cómo diseñar tu aplicación. (También debo mencionar que este es solo un diseño de muchos válidos).
https://.com/a/19965981/1233555 - Heroku ha ido al enrutamiento aleatorio, por lo que algunos dynos pueden tener colas apiladas (mientras sirven una larga solicitud) mientras que otros dinnos son gratuitos. Evite esto asegurándose de que todas las solicitudes se manejen muy rápidamente en sus dindes web. Esto reducirá la cantidad de dynos web que necesita, mientras que requiere más dynos de trabajadores.
También debe preocuparse de que su aplicación web admita la simultaneidad, lo que solo hacen algunas configuraciones de Rails: pruebe Unicorn, o código cuidadosamente escrito (para E / S que no bloquea EventMachine) con Thin.
Probablemente tengas que probar, en lugar de calcular, para ver cuántos dynos de cada tipo necesitas. Asegúrate de que New Relic reporte la cola de dyno - mira el enlace de arriba.