Beste Lösung für ein Cache-system unterstützt, Splitter -, Replikations-und hat eine niedrige Latenz
Wir sind in den Prozess der Bereitstellung einer hoch dynamischen website. Über 20.000 Artikel sind verarbeitet und jede minute aktualisiert am peak-Kapazität. Jedes Element kann zwischen einer Größe von 1 Kb bis 500 Kb. Diese Elemente abgerufen werden müssen, bearbeitet und aktualisiert im cache jede minute.
Erwarten wir einen traffic von bis zu 1000 Benutzer in den ersten zwei-drei Monate. Da jeder Nutzer landet auf der website, Sie können angefordert werden einige der beliebtesten Inhalte, aber andere können verlangen missliebiger Inhalte. Alle Inhalte einer höheren Ebene verarbeitet form von was sitzt in der persistent store. Daher ist es absolut notwendig, um alle verarbeiteten Elemente sitzen in einem low-latency-Speicher für hervorragende user-experience, sei es populär oder unpopulär ist.
Wir haben versucht, Memcache, Redis und Couchbase getrennt.
Memcache ist super schnell, aber wir lief in Probleme, bei denen bestimmte Platten ran out of memory und aktive Elemente begann immer vertrieben.
Redis, relativ langsamer als Memcache, ist großartig, wenn Sie wollen Beharrlichkeit in den Positionen.
Aber bald stellten wir fest, wir wollten Splitter und Replikation.
Couchbase angeboten, die out of the box.. Die Moxi-client-Schnittstellen mit dem Couchbase server hat seine eigenen Probleme nicht in der Lage, schwer zu handhaben gleichzeitige Prozesse. Es beginnt fehlenden sets und bekommt jedes jetzt und dann. Bewegt über das Python-SDK-Schnittstellen mit ihm. Er durchgeführt schlecht in dem Falle, wenn einer der Knoten im cluster ging, es war nicht in der Lage zu entdecken, die neue Topologie an alle. Landete verlieren einige Daten im cache und der Inaktivität auf der Website für mehrere kostbare Stunden.
An einem Punkt, wo wir erkennen, dass es kein perfektes Produkt gibt, die suite, die unsere Bedürfnisse. Sie müssen sich bewusst sein, alle Technologien und Ihre eigenen Bedürfnisse. Sie müssen vorhersehen, wie sich Ihre Daten entwickeln werden und entsprechend vorbereitet werden. Die beste Lösung ist wahrscheinlich eine Mischung von Technologien. Allerdings setzen diese in der Hoffnung, dass es vielleicht etwas anderes gibt. Wir nähern uns dem Ende von 2012. Wie schwer kann es sein für eine out-of-the-box-Lösung gesichert, die mit leistungsfähiger hardware zu liefern, was wir brauchen.
Gedanken und links zu aufschlussreichen Artikeln würde sehr geschätzt werden. Danke!
- Warum würden Sie müssen die Replikation auf einem cache-system? Du hast einfach nicht genug Speicher in Ihrem memcache-cluster?
- Wir brauchen Replikation, da Zeit zu Zeit unser Server down gegangen aufgrund von hardware-Ausfällen auf dem hosting-Anbieter Ende. In einem solchen Fall müssen wir einen Notfallplan in Kraft. Ja, anfangs hatten wir nicht genügend Speicher vorhanden, aber auch da hatten wir zu viele Elemente von der gleichen Größe und nicht genug Platten zugewiesen, um Sie zu halten.
- Ok nur scheint seltsam zu wollen, dass die Ebene der Beharrlichkeit, in einem cache. Scheint, dass Sie wirklich suchen, für horizontal skalierbaren, persistenten Speicher, wenn Sie don ' T haben keine Toleranz für den Aufbau eines high-speed-cache. Vielleicht mongodb, dynamodb, oder ähnlich könnte Ihre Bedürfnisse zu erfüllen, aber sicherlich würden Sie nicht so schnell wie in-memory-caching. Natürlich können Sie auch Blick auf die Verwendung in Speicher-caching-zusammen mit einigen system zum Spülen der cache so reducec Latenz für die Fälle, wenn Sie benötigen, um den Wiederaufbau der cache zu outtage auf einer partition, Anwendungs-Implementierungen, usw.
- ich bin auch Gebäude eine sehr dynamische website um couchbase. es scheint, dass das Hauptproblem das Sie haben, ist mit sank schreibt. was ist, wenn Sie zwei oder mehr identische parallele requests an die verschiedenen Server beim festlegen der Informationen? ich bin mir nicht sicher, ob Sie diese Art von setup, aber es würde die erforderliche Redundanz.
- Ich schlage vor, Sie Blick auf ein paar Dinge: Riak, Hazelcast, und vielleicht VoltDB.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier sind ein paar Notizen über einige der Technologien, die Sie erwähnt haben.
Memcached:
Memcached ist nur ein caching-system und wird nicht geben Ihnen mit jeder Daten-Persistenz. Wenn Sie wählen, verwenden Sie memcached, dann müssen Sie wählen Sie eine andere Art von persistenten speichern halten Sie alle Daten. Memcached ist auch eine sehr einfache caching-system und nicht Sie mit Replikation, aber es sind verschiedene Projekt (wie repcache), die zusätzliche Funktionen wie das zu memcached. Würde ich nur verwenden, memcached, wenn ich wollte, eine relationale Datenbank zu benutzen, als mein Persistenz-Schicht.
Redis:
Redis ist eine Datenstruktur, die server und sollte nur für diesen Zweck verwendet werden. Der Nachteil Redis ist, dass Sie nur ausgeführt werden können, es auf einem einzigen server und wenn Sie wollen, um mehrere Server von Redis, dann müssen Sie die Anwendung tun Splitter. Die meisten Bereitstellungen von Redis, die ich gesehen habe, sind Seite an Seite mit anderen Datenbank-Technologie.
Couchbase:
Couchbase 2.0 wird, schaltet sich das Produkt in eine Dokument-Datenbank. Das Produkt hat memcached-Technologie im inneren, so dass Sie bekommen, memcached out of the box, was bedeutet sub-Millisekunden-Latenzzeiten. Oben auf diese erhalten Sie die Replikation, cross data center replication und Abfragen unterstützen. Beachten Sie auch, dass die meisten Couchbase-SDKs nicht verwenden, moxi und das Python-SDK noch in der beta.
Eine Sache, die vielleicht nützlich für Sie zu tun ist zu überprüfen, die YCSB benchmarking-Projekt zusammen mit einigen der Ergebnisse, die bereits veröffentlicht worden sind. Dieses Projekt wird Ihnen erlauben, zu erhalten eine gute Idee von, wie diese und andere Datenbanken durchführen unter Last. Dann, wenn Sie finden, einige, die Sie mögen, Sie können schauen Sie durch Ihre feature-Liste und herauszufinden, mit Produkt hat die Eigenschaften, die am besten die Anwendung Ihrer Entwicklung.
Auch, wenn alle meine Informationen über die Datenbanken, die oben ist falsch, bitte lassen Sie mich wissen. Diese Projekte entwickeln sich schnell und es ist manchmal schwer, Schritt zu halten.
EDIT: ich sollte auch erwähnen, dass Couchbase ist das nur Datenbanken aus den aufgeführten Funktionen bieten, Replikation, Splitter, und der niedrigen Latenz. Ich kann mir vorstellen redis können Sie ein Replikat-server und damit die Replikation, aber keine Splitter, die Sie tun müssen getan werden, auf der Anwendungsschicht.