web-dev-qa-db-fra.com

Redéfinir les performances sur un processeur multicœur

Je regarde autour de redis pour me fournir un stockage de cache intermédiaire avec beaucoup de calculs autour d'opérations définies comme l'intersection et l'union.

J'ai consulté le site Web de redis et j'ai constaté que le redis n'était pas conçu pour un processeur multicœur. Ma question est: pourquoi en est-il ainsi?

Si oui, comment pouvons-nous utiliser à 100% les ressources du processeur avec redis sur un processeur multicœur.

22
Love Hasija

J'ai consulté le site Web de redis et j'ai constaté que le redis n'était pas conçu pour un processeur multicœur. Ma question est la suivante: pourquoi en est-il ainsi?

C'est une décision de conception.

Redis est un thread unique avec epoll/kqueue et évolue indéfiniment en termes de simultanéité d'E/S. - @ antirez (créateur de Redis)

Une raison pour choisir une approche événementielle est que synchronisation entre les threads a un coût à la fois au niveau du logiciel (complexité du code) et du matériel (changement de contexte). Ajoutez à cela que le goulot d'étranglement de Redis est généralement le réseau, pas le CPU. En revanche, une architecture mono-thread a ses propres avantages (par exemple la garantie d'atomicité).

Par conséquent, les boucles d'événements semblent être une bonne conception pour un système efficace & évolutif comme Redis.

De plus, si oui, comment pouvons-nous utiliser à 100% les ressources du processeur avec redis sur un processeur multicœur.

L'approche Redis pour évoluer sur plusieurs cœurs est sharding, principalement avec Twemproxy .

Cependant, si pour une raison quelconque vous souhaitez toujours utiliser une approche multi-thread, jetez un œil à 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).

32
Agis

Le serveur Redis est un thread unique. Mais il permet d'atteindre 100% d'utilisation des ressources CPU en utilisant des nœuds Redis (maître et/ou esclave).

  1. Les opérations de lecture peuvent être mises à l'échelle en utilisant la configuration maître/esclave Redis avec un seul maître. L'un des cœurs de processeur utilisé pour le nœud maître et tous les autres pour les esclaves.

  2. Les opérations d'écriture peuvent être mises à l'échelle à l'aide de la configuration de cluster multi-maître Redis. Plusieurs cœurs de processeur utilisés pour les nœuds maîtres et tous les autres pour les esclaves.

Redisson - Redis Java qui fournit une prise en charge complète du cluster Redis. Fonctionne avec AWS Elasticache et Azure Redis Cache. Il comprend la découverte maître/esclave et la mise à jour de la topologie.

2
Nikita Koksharov