El mar., 21 abr. 2020 a las 20:37, J. Pablo Martín Cobos (<goi...@gmail.com>) escribió:
> > Alguno más se ánima al debate? > > Con las tareas asíncronas o en segundo plano como las llamas se pueden hacer virguerías. Aunque a veces eso de los timeouts se queda corto. Planteo un escenario: Tengo un sistema de colas de trabajo que ataca a una pila de servicios externos, pongamos 40. Normalmente todo va como un tiro y se come muchos trabajos por segundo, pero por si acaso pongo un timeout de 5 segundos a las tareas. Si por debajo todo usa la misma cola, en plan configuración por defecto de celery, voy a llegar a un punto en el que todas las peticiones con timeout están haciendo de tapón y no dejando entrar a las que cuando entren irán rápidas porque no fallan. Al final hay un número de workers limitado y están mayormente ociosos esperando al timeout. Posibles soluciones: - Segregar las colas de tareas en diferentes colas de mensajes. Las afectadas se encolarán por el tema de los timeouts y las otras seguirán yendo rápido como si nada pasase. - El worker implementa el patrón circuit breaker y mientras dura la avería ese tipo de tareas se encolan a lo dead letters, se descartan o se ejecutan con un plan b que no implique el sistema afectado. Solo se producen timeouts hasta abrir el circuito, luego no se producen más timeouts. - ??? (pon aquí la solución que se te ocurra, porque hay muchas formas de mejora) Pero no siempre se puede dejar al usuario sin confirmación o hacer las cosas "en segundo plano". Si hay fallos de usabilidad puedes tener al usuario repitiendo la operación todo loco. Si le dices "tu operación estará en unos segundos" lo tendrás haciendo polling cada segundo. Es posible que si un caso de uso va regulero el usuario haga reintentos (como podría estar haciendo tu sistema de colas de trabajo con las tareas que te dan timeout) y haciendo que el sistema pase de regulero a muy malito. Para este tipo de cosas puede venir bien el concepto de "feature switching": lo que va regulero lo deshabilitas hasta que tengas el sistema sano otra vez. Por resumirlo en un rollo de esos zen: - Lo que ahora va mal y en el instante siguiente va mal probablemente seguirá mal: ponlo en cuarentena y no vuelvas a intentarlo en un rato. - Las cosas pueden fallar, pon barreras para que cuando se estropeen no te estropeen el resto. Por ejemplo usa diferentes colas para diferentes tipos de tareas. - A veces es mejor dejar de hacer algo que hacelo mal, usa "feature switching" para esos momentos en los que las cosas no van finas. Un saludo, Javi
_______________________________________________ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es