Redis Leistung auf einer Multi-Core-CPU
Ich bin auf der Suche rund um redis zu mir ein intermediate-cache-Speicher, der mit viel Rechenarbeit, um die Mengenoperationen wie Schnittmenge und Vereinigungsmenge.
Ich habe mir bei der redis-website und fand, dass die redis ist nicht ausgelegt für multi-core-CPU. Meine Frage ist, Warum ist es so ?
Auch, wenn ja, wie können wir uns 100% - Auslastung der CPU-Ressourcen, mit redis auf einem multi-core-CPUs.
InformationsquelleAutor der Frage Love Hasija | 2014-01-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist eine design-Entscheidung.
Grund für die Wahl einer event-driven-Ansatz ist, dass Synchronisation zwischen threads kommt an Kosten sowohl in der software (code complexity) und die hardware-Ebene (context switching). Hinzu kommt, dass der Engpass von Redis ist in der Regel die Netzwerknicht die CPU. Auf der anderen Seite, eine single-threaded-Architektur hat Ihre eigenen Vorteile (beispielsweise die Gewährleistung von Atomarität).
Daher event-loops scheinen, wie eine gute Gestaltung für eine effizient & skalierbare system wie Redis.
Den Redis-Ansatz, um die Skalierung über mehrere Kerne ist Splittermeist zusammen mit Twemproxy.
Allerdings, wenn aus irgendeinem Grund Sie immer noch wollen, um eine multi-threaded-Ansatz, werfen Sie einen Blick auf Thredis aber stellen Sie sicher, Sie verstehen, die Auswirkungen von dem, was seine Urheber haben (Sie können nicht verwenden Sie es als ein Replikations-master, zum Beispiel).
InformationsquelleAutor der Antwort Agis
Redis-server ist ein single-threaded. Aber es ermöglicht eine 100% - Auslastung der CPU-Ressourcen, mit der Redis-Knoten (master und/oder slave).
Lesevorgänge werden könnte, skaliert mit der Redis-master/slave-Konfiguration mit single-master. Ein CPU-Kern verwendet, für master-Knoten und alle anderen zu Sklaven.
Schreib-Operationen werden konnte, skaliert mit der Redis-multi-master-cluster-Konfiguration. Mehrere CPU-Kerne verwendet werden für master-Knoten und alle anderen zu Sklaven.
Redisson - Redis-basiertes framework für Java bietet eine vollständige Unterstützung des Redis cluster. Arbeitet mit AWS RDS-und Azure-Redis-Cache. Es enthält master/slave-discovery und topology update.
InformationsquelleAutor der Antwort Nikita Koksharov