Memcache Konsistente Hashing -, Cluster -, PHP-code, Ketama und alles über ihn
Ich habe versucht, für den ganzen Tag zu verstehen, und den code für Memcache mit PHP, aber ich bin immer verwirrt, auf wenige Punkte. Ich habe schon viele Artikel und fast jeder SO Fragen Sie diese aber nicht finden konnte genaue Antworten.
1) Was wäre der code zum erstellen von Konsistenten Hash-Schlüssel in PHP? Welche Bibliotheken muss ich installieren und was muss ich wirklich tun? Jeder gute Artikel durch zu gehen?
2) Angenommen, ich habe erfolgreich gespeichert, eine Konsistente Hash-Key, nun, wenn meine jeder der server ist down oder es wurde eine neue server würde es keinen Unterschied machen, obwohl ich bin mit Konsistenten Hash-Key etc?
3) Wird der Einsatz von Memcached::addServers() anstelle von Memcached::addServer() keinen Unterschied machen, im Falle von Konsistenten Hashing wie bereits in http://ru.php.net/manual/en/memcached.addserver.php wenn nicht, dann was bedeutet?
$m = new Memcached();
$m->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
$m->addServers($servers);
4) Ist mit obigen code ist genug für Konsistentes Hashing, und klicken Sie dann hinzufügen/entfernen von Servern würde keinen Unterschied machen zu lösen?
5.) Was ist Ketama Bibliothek? und warum nutzen Sie es, wenn Memcached::DISTRIBUTION_CONSISTENT kann besser funktionieren? folgende http://www.last.fm/user/RJ/journal/2007/04/10/rz_libketama_-_a_consistent_hashing_algo_for_memcache_clients
6) muss ich zu hash-meine Schlüssel in irgendeiner Weise oder einfach nur meinen Schlüssel und ließ den Memcached-den rest erledigen?
Bitte Jungs ich brauche Eure echte Unterstützung zu verstehen und zu implementieren, ist es meine Produktionsumgebung so bald wie möglich. Ihre Antworten lassen würde, mich zu verstehen was sollte ich code für besser.
- Ich kann sehen, dass Sie ganz bestimmt zu implementieren ist, aber leider habe ich keine Erfahrung damit und ich war schon immer interessiert. In Ihrem Beitrag erwähnten Sie scheuern SO, hab das include Webmaster oder serverfault? Scheint, wie Sie haben einige ziemlich hardcore Zeugs da.
- Yup, ich hab mein bestes versucht, auch habe ich versucht am besten auf google. Und immer noch mit dem kratzen Oberfläche. Und es enthält PHP-Programmierung, so fragte es auf SO
- Wow auch ich hoffe einige guru kommt aus dem Wald-Wort und rettet den Tag =) ich Frage mich, ob ich ein Kopfgeld auf dieser nach ein paar Tagen gehen...
- LOL! Ja, ich Wünsche für diese. Vielen Dank für das Verständnis meiner Neugier :). Ich wirklich brauchen, dies zu tun.
- Ich dachte, es wäre eine gute Idee, Sie zu Benachrichtigen, so gut ich bekam gute Antworten, die aus Holz-Wort-Jungs, wie Sie sagte.
- Lol danke! Ich auf jeden Fall sagen wollte mit Holz arbeiten
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nun ja, es sind viele Fragen auf einmal, lassen Sie mich versuchen, mein bestes, Sie zu beantworten eins nach dem anderen.
1) Was wäre der code zum erstellen von Konsistenten Hash-Schlüssel in PHP? Welche Bibliotheken muss ich installieren und was muss ich wirklich tun? Jeder gute Artikel durch zu gehen?
Gut wie Sie Ihren code in Frage, dieser code ist genug für Konsistentes Hashing in PHP. Sie müssen nur verwenden Sie Ihre LibMemcached-Client-Bibliothek verwenden Konsistente Hashing mit Memcached. Nur fügen Sie die folgende Zeile unter deinem code
Es wird dringend empfohlen, diese option zu aktivieren, wenn Sie möchten, verwenden Sie konsistente hashing, und es kann aktiviert werden, standardmäßig in zukünftigen Versionen. Folgen Sie dieser für eine Reihe von Konstanten und Ihre definition für besseres Verständnis http://www.php.net/manual/en/memcached.constants.php
Obwohl eine bessere Herangehensweise sein kann, mehr eine bessere performance durch die Einstellung Global in der php.ini (habe ich noch nicht getestet.)
wie vorgeschlagen in http://blog.fedecarg.com/2008/12/24/memcached-consistent-hashing-mechanism/, dann brauchen Sie nicht, um anzugeben, einzeln in jeder memcached aufrufen. Standardwert ist der Standard und verwendet die E-Modul-Berechnung, die nicht hilfreich sind, wenn Sie hinzufügen oder entfernen von Servern.
2) Angenommen, ich habe erfolgreich gespeichert, eine Konsistente Hash-Key, nun, wenn meine jeder der server ist down oder es wurde eine neue server würde es keinen Unterschied machen, obwohl ich bin mit Konsistenten Hash-Key etc?
Obwohl als lsmooth sagte, Es gibt immer eine Wirkung, wenn die Server entfernt oder Hinzugefügt werden, aber minimal, da angenommen Zugabe von 1 server in 3 Servern es wird etwa 1/4 = 25% Verlust von Schlüsseln so viele Server wie die weniger die Chancen, den Verlust von Schlüsseln.
3) Wird der Einsatz von Memcached::addServers() anstelle von Memcached::addServer() keinen Unterschied machen, im Falle von Konsistenten Hashing wie bereits in http://ru.php.net/manual/en/memcached.addserver.php wenn nicht, dann was bedeutet?
Wie gesagt von Ismooth. Er ist korrekt. Es ist bevorzugt zu verwenden addServers.
Beachten Sie, dass «addServers()» muss aufgerufen werden, nachdem alle Optionen eingestellt sind, mit setOption, da sonst die Optionen nicht anzuwenden auf die Server.
4) Ist mit obigen code ist genug für Konsistentes Hashing, und klicken Sie dann hinzufügen/entfernen von Servern würde keinen Unterschied machen zu lösen?
Bereits beantwortet Frage Nr. 1 beantworten.
5) Was ist Ketama Bibliothek? und warum nutzen Sie es, wenn Memcached::DISTRIBUTION_CONSISTENT kann besser funktionieren? http://www.last.fm/user/RJ/journal/2007/04/10/rz_libketama_-_a_consistent_hashing_algo_for_memcache_clients
LibKetama ist die Bibliothek auf die Konsequente Hashing key distribution Algorithmus basiert auf. Also, verwenden Konsistente Hashing in Memcached bedeutet, mit LibKetama und das ist, was es ist.
6) muss ich zu hash-meine Schlüssel in irgendeiner Weise oder einfach nur meinen Schlüssel und ließ den Memcached-den rest erledigen?
Sagte von Yvan als "Memcached-client wird der hash-Ihre Schlüssel automatisch. Sagen wir, du hast 3 Server A, B und C und 3 Schlüssel «K1» bis «K9». Zum Beispiel die client-hash-Algorithmus zu speichern, wie folgt : K1/K2/K3 gespeichert, K4/K5/K6 gespeichert auf B, K7/K8/K9 gespeichert auf C: Wenn Ihr server B ausfällt, die Tasten (K4/K5/K6) gespeichert werden gleichmäßig auf die verbleibenden 2 Server (A und C). Zum Beispiel, K4 gehen Sie zu Einem, und der K5/K6 wird, wechseln Sie zu server-C.
Das ist nur ein Beispiel, nicht das eigentliche Algorithmus. Finden Sie heraus, welche Taste geht auf dem server mit der Funktion $memcached->getServerByKey( 'K4'). Dann machen Sie einen server gehen, und sehen, was die getServerByKey() sendet Sie nach diesem Fehler". bei http://www.dugwood.com/895442.html#dwCmtForm.
Konsistente Hashing wird unterstützt von der PHP-memcached-Erweiterung. Sie nicht haben, etwas zu tun, außer nutzen es in Ihrem code wie folgt:
Wenn Sie dann beginnen hinzufügen von Elementen zur cache, der Erweiterung verteilt Sie an die Server automatisch so, dass es minimiert cache Verluste in Fall, dass Sie server hinzufügen(s). Im Fall, dass es nicht abgerufen werden kann, ein Element von einem server wo es sein soll - weil der server down ist zum Beispiel - Sie haben zu handhaben, die in Ihrem php-code selbst.
Mit addServers statt addServer macht keinen Unterschied für Konsistentes Hashing. Wie in der Dokumentation erwähnt, die Sie verwenden sollten addServers obwohl beim hinzufügen von mehreren Servern, so dass die internen Datenstrukturen sind nur einmal geupdatet.
PHP-Implementierung von Konsistenten Hashing ist basiert auf libketama es muss nicht libketama überhaupt. Die Erweiterung kümmert sich um die Verteilung der Elemente auf die verschiedenen Server für Sie, so dass es minimiert den cache Verluste. Es gibt immer eine Wirkung, wenn die Server entfernt oder Hinzugefügt werden.