Redis performances sur un multi-core CPU
je regarde autour de redis pour me fournir un stockage de cache intermédiaire avec beaucoup de calcul autour des opérations comme intersection et union.
j'ai regardé le site Web de redis, et j'ai découvert que le redis n'est pas conçu pour un CPU multi-core. Ma question est, pourquoi est-ce ainsi ?
en outre, si oui, comment pouvons-nous faire une utilisation à 100% des ressources CPU avec redis sur un CPU multi core.
2 réponses
j'ai regardé le site Web de redis, et j'ai constaté que le redis n'est pas conçu pour un CPU multi-core. Ma question est, pourquoi est-ce ainsi?
C'est une décision de conception.
Redis est mono-threadé avec epoll / kqueue et échelles indéfiniment en termes de concurrence e / s. --@antirez (créateur de Redis)
une raison pour choisir une approche axée sur les événements est que synchronisation entre les threads vient à un coût à la fois dans le logiciel (complexité du code) et le niveau matériel (commutation de contexte). Ajoutez à cela que le goulot D'étranglement de Redis est généralement le réseau, pas le CPU. D'un autre côté, une architecture monofilée a ses propres avantages (par exemple la garantie d'atomicité).
donc les boucles d'événements semblent être un bon design pour un efficace & évolutive système comme Redis.
l'approche Redis à l'échelle sur plusieurs noyaux est partage, la plupart du temps avec Twemproxy.
Toutefois, si pour une raison quelconque, vous souhaitez utiliser un multi-thread approche, jetez un oeil à Thredis mais assurez-vous de comprendre les implications de ce que son auteur a fait (vous ne pouvez pas l'utiliser comme maître de réplication, par exemple).
le serveur Redis est un simple threaded. Mais il permet d'atteindre une utilisation à 100% des ressources CPU en utilisant les noeuds Redis (master et/ou slave).
les opérations de lecture peuvent être mises à l'échelle en utilisant la configuration maître/esclave de Redis avec un seul maître. Un noyau CPU utilisé pour le noeud maître et tous les autres pour les esclaves.
les opérations D'écriture peuvent être mises à l'échelle en utilisant la configuration multi-cluster multi-master de Redis. Plusieurs cœurs CPU utilisés pour les noeuds maîtres et tous les autres esclaves.
Redisson - le framework basé sur Redis pour Java fournit un support complet du cluster Redis. Fonctionne avec AWS Elasticache et Azure Redis Cache. Il comprend la découverte du maître/esclave et la mise à jour de la topologie.