2013-03-17 10 views
39

Ich bin verwirrt über das Konzept von Distributed Cache. Ich weiß irgendwie, was es von der Google-Suche ist. Ein verteilter Cache kann sich über mehrere Server erstrecken, sodass er in der Größe und in der Transaktionskapazität wachsen kann. Allerdings verstehe ich nicht wirklich, wie es funktioniert oder wie es die Daten verteilt.Was ist ein verteilter Cache?

Zum Beispiel, sagen wir, wir haben 1 Daten, 2, 3, 4, 5, 6, 7, 8, 9, 10 und 2 Cache-Server A und B. Wenn wir verteilten Cache verwenden, ist eine der möglichen Lösungen, dass Daten 1, 3, 5, 7, 9 im Cache-Server A gespeichert werden und 2, 4, 6, 8, 10 im Cache-Server gespeichert werden.

Also ist das korrekt oder habe ich es falsch verstanden? Die zweite Frage ist, dass ich normalerweise das Wort Serverknoten hörte. Was ist es? Im obigen Beispiel ist Server A ein Serverknoten, richtig?

Dritte Frage, wenn ein Server (sagen wir Server A) ausfällt, was können wir dagegen tun? Ich meine, wenn mein Beispiel oben korrekt ist, können wir die Daten 1, 3, 5, 7, 9 nicht aus dem Cache holen, wenn Server A heruntergefahren ist, was könnte dann Cache Server in diesem Fall tun?

Antwort

28
  1. Ja, die Hälfte der Daten auf Server a und die Hälfte auf Server b wäre ein verteilter Cache. Es gibt viele Methoden zum Verteilen der Daten, obwohl eine Art Hashing der Schlüssel am populärsten zu sein scheint.

  2. Die Begriffe Server und Knoten sind im Allgemeinen austauschbar. Ein Knoten ist im Allgemeinen eine einzelne Einheit einer Sammlung, die oft als Cluster bezeichnet wird. Ein Server ist im Allgemeinen ein einzelnes Teil der Hardware. In erlang können Sie mehrere Instanzen der erlang-Runtime auf einem einzelnen Server ausführen, und somit hätten Sie mehrere erlang-Knoten ... aber im Allgemeinen sollten Sie einen Knoten pro Server für eine optimale Planung haben. (Bei nicht verteilten Sprachen und Plattformen müssen Sie Ihre Prozesse entsprechend Ihren Anforderungen verwalten.)

  3. Wenn ein Server ausfällt und es sich um einen Cache-Server handelt, müssen die Daten von der ursprünglichen Quelle stammen. EG: Ein Cache ist normalerweise eine speicherbasierte Datenbank, die für den schnellen Abruf ausgelegt ist. Die Daten im Cache bleiben nur so lange bestehen, wie sie regelmäßig verwendet werden, und werden schließlich gelöscht. Für verteilte Systeme, in denen Sie Persistenz benötigen, ist es jedoch üblich, mehrere Kopien zu erstellen. EG: Sie haben Server A, B, C, D, E und F. Für Daten 1 würden Sie es auf A setzen, und dann eine Kopie auf B und C. Couchbase und Riak tun dies. Für Daten 2 könnte es auf B sein und dann auf C und D kopieren. Wenn also ein Server ausfällt, haben Sie immer noch zwei Kopien.

+3

Erstens, vielen Dank für Sie schnelle Antworten und es ist sehr, sehr klar. Ich habe es wirklich geschätzt. Kann ich zu Punkt 3 Server A, B für Echtzeit-Caching und Server C, D, E, F nur für Backups machen? dh. Für Daten 1 setze ich es auf Server A und kopiere dann auf C und D. Für Daten 2 setze ich es auf Server B und kopiere dann auf E und F. Also werden C D E F nur benutzt, wenn A oder B aus sind. Dieser Weg sieht strukturierter aus. Ist es das, was du in Punkt 3 meinst? – Joey

+0

Der Unterschied besteht darin, dass Sie die Daten und ihre Kopien auf allen Servern mischen. Beispielsweise haben Sie gesagt, dass Sie Daten 1 auf Server A und Kopien auf B und C, Daten 2 auf Server B und Kopien auf C und D legen. Dann hat Server B sowohl "Originaldaten" von Daten 2 als auch eine Kopie von Daten 1. Ist Ist es besser, wenn ich alle "Originaldaten" getrennt und kopiert und auf verschiedene Server lege? – Joey

+0

Nun, es klingt wie Sie Ihre eigene Software schreiben, so dass Sie natürlich tun können, was Sie wollen. Beim Entwurf solcher Systeme müssen Sie jedoch auf die Fehlermodi und die Verwaltungskosten der Server achten, insbesondere wenn Sie komplexe Systeme mit vielen Servern erhalten. – nirvana