2012-05-09 13 views
6

Suponga que en su aplicación web necesita hacer una serie de llamadas redis para renderizar una página, como obtener un montón de hashes de usuario. Para agilizar esto, puede terminar sus comandos de redis en una sección MULTI/EXEC, usando el pipeline, para evitar hacer muchos viajes de ida y vuelta. Pero también quiere fragmentar sus datos, porque tiene mucho de eso y/o desea distribuir escrituras. Entonces la canalización no funcionaría, ya que las claves diferentes podrían vivir en diferentes nodos, a menos que tenga una idea clara del diseño de datos de su aplicación y fragmento en función de las funciones en lugar de utilizar una función de control. Entonces, ¿cuáles son las mejores prácticas para fragmentar datos en diferentes servidores sin comprometer demasiado el rendimiento debido a que muchos servidores son contactados para completar un trabajo "conceptualmente único"? Creo que la respuesta depende de la aplicación web que se está desarrollando, y eventualmente haré algunas pruebas, pero sería útil saber cómo otros han lidiado con las concesiones que mencioné.redis sharding, pipelining y round-trips

Respuesta

4

MULTI/EXEC y la canalización son dos cosas diferentes. Puede hacer MULTI/EXEC sin ningún tipo de canalización y viceversa.

Si desea fragmentar y canalizar al mismo tiempo, debe agrupar las operaciones en la canalización por instancia de Redis y luego utilizar la canalización para cada instancia.

Aquí está un ejemplo sencillo usando Ruby: https://gist.github.com/2587593

Una forma de mejorar aún más el rendimiento es poner en paralelo el tráfico en los casos Redis una vez que las operaciones se han agrupado (es decir, que agrupe las operaciones, se le envía a todos instancias en paralelo, esperas las respuestas de todas las instancias).

Esto es un poco más complejo, porque se requiere un cliente no bloqueante asíncrono. Para un rendimiento máximo, C/C++ se debe utilizar en el lado del cliente. Esto se puede implementar fácilmente mediante el uso de hiredis + el bucle de evento de su elección.

+0

¡Gracias a un millón por la información, especialmente la cuestión de paralelizar el tráfico! – idrarig