Supponiamo che nell'applicazione Web sia necessario eseguire una serie di chiamate redis per eseguire il rendering di una pagina, ad esempio ottenere un gruppo di hash utente. Per accelerare questa operazione è possibile completare i comandi redis in una sezione MULTI/EXEC, quindi utilizzare il pipelining, in modo da evitare di effettuare molti round trip. Ma vuoi anche dividere i tuoi dati, perché ne hai un sacco e/o vuoi distribuire le scritture. Quindi il pipelining non funzionerebbe, perché chiavi diverse potrebbero vivere su nodi diversi, a meno che tu non abbia una chiara idea del layout dei dati della tua applicazione e del frammento basato sui ruoli piuttosto che usare una funzione di hash. Quindi, quali sono le migliori pratiche per suddividere i dati tra diversi server senza compromettere troppo le prestazioni a causa di molti server che vengono contattati per completare un lavoro "concettualmente unico"? Credo che la risposta dipenda dall'applicazione web che si sta sviluppando e alla fine eseguirò alcuni test, ma sarebbe utile sapere in che modo gli altri hanno affrontato i compromessi che ho citato.redis sharding, pipelining e round trip
risposta
MULTI/EXEC e pipelining sono due cose diverse. Puoi fare MULTI/EXEC senza alcun pipelining e viceversa.
Se si desidera eseguire lo shard e la pipeline contemporaneamente, è necessario raggruppare le operazioni sulla pipeline per l'istanza di Redis e quindi utilizzare il pipelining per ogni istanza.
Ecco un semplice esempio con Rubino: https://gist.github.com/2587593
Un modo per migliorare ulteriormente le prestazioni è quello di parallelizzare il traffico sulle istanze Redis una volta che le operazioni sono state raggruppate (cioè si raggruppano le operazioni, di inviarli a tutti istanze in parallelo, si aspettano le risposte da tutte le istanze).
Questo è un po 'più complesso, perché è richiesto un client asincrono non bloccante. Per le massime prestazioni, C/C++ dovrebbe essere usato sul lato client. Questo può essere facilmente implementato usando hiredis + il ciclo degli eventi di tua scelta.
Grazie mille per l'intuizione, in particolare per il parallelismo sul traffico! – idrarig