python redis scalability sharding consistent-hashing

python task queue



Escalar horizontalmente o combinar Python-RQ o Redis con Python (1)

Intentando escalar horizontalmente la instancia de Redis que funciona como servidor de tareas para Python-RQ .

Hasta donde yo sé, la mejor manera de hacer esto sería agregar lógica de fragmentación (lo más probable es que use Hashing constante ) en una ConnectionPool y / o clase de Connection . Prefiero usar una biblioteca para el mecanismo Constant Hashing, ya que parece ser algo que probablemente debería estar disponible y probablemente sea mejor / más probado en la batalla que una solución interna.

¿Cuál sería un buen patrón para hacer algo como esto? ¿Hay alguna biblioteca que debería estar investigando? ¿Hay algo que me falta que debería tener en cuenta?

¡Muchas gracias!


Creo que deberías tener un par de cosas en mente.

El primero es acerca de dónde está el cuello de botella y por qué debería proporcionar una arquitectura de partición en su backend Redis bajo un paradigma Python-Rq. Creo que Redis tiene un rendimiento suficiente como para creer que el cuello de bota debe estar en su número de trabajadores y la cantidad de trabajos que desea procesar en un momento dado.

Puede decir: ¿cuánto tiempo puedo esperar hasta que se procese este trabajo? Si puedes descubrir este valor, latencia. Tendrás la clave para agregar / del más nodos en tu arquitectura.

Por cierto, si está buscando mejorar su infraestructura con alguna solución de fragmentación con un Hacking constante, debe tener en cuenta los problemas detrás de las claves de reequilibrio cuando se haya eliminado o agregado un nuevo nodo.

Por ejemplo, un trabajador actual podría estar conectado a un servidor redis incorrecto para un trabajo ya existente, porque se ha agregado o eliminado un nuevo servidor después de que se haya iniciado el nuevo trabajo y antes de que se haya terminado.