Heim > häufiges Problem > Hauptteil

Was ist konsistentes Hashing?

hzc
Freigeben: 2020-06-29 13:14:54
Original
2615 Leute haben es durchsucht

Der konsistente Hash-Algorithmus wurde 1997 vom MIT vorgeschlagen. Es handelt sich um einen speziellen Hash-Algorithmus, der darauf abzielt, das Problem des verteilten Cachings zu lösen. Beim Entfernen oder Hinzufügen eines Servers kann die Zuordnung geringfügig geändert werden zwischen bestehenden Serviceanfragen und den Servern, die sie bearbeiten.

Was ist konsistentes Hashing?

Der konsistente Hashing-Algorithmus wurde 1997 vom MIT vorgeschlagen. Es handelt sich um einen speziellen Hashing-Algorithmus, der das Problem des verteilten Caches lösen soll. Beim Entfernen oder Hinzufügen eines Servers kann die Zuordnung zwischen vorhandenen Serviceanfragen und den Servern, die die Anfragen bearbeiten, so wenig wie möglich geändert werden. Konsistentes Hashing löst die Probleme der dynamischen Skalierung einfacher Hashing-Algorithmen in verteilten Hash-Tabellen (DHT).

Einführung:

Der konsistente Hashing-Algorithmus wurde 1997 in der Arbeit „Consistenthashing and Random Trees“ vorgeschlagen und wird häufig in verteilten Systemen verwendet. Konsistentes Hashing ist ein Hashing-Algorithmus. Wenn ein Server entfernt oder hinzugefügt wird, kann dieser Algorithmus die Zuordnungsbeziehung zwischen vorhandenen Dienstanforderungen und dem Anforderungsverarbeitungsserver so wenig wie möglich ändern und die sexuellen Anforderungen so weit wie möglich erfüllen . In einem gewöhnlichen verteilten Cluster besteht eine Eins-zu-eins-Entsprechung zwischen Dienstanforderungen und Verarbeitungsanforderungsservern. Das heißt, die Zuordnungsbeziehung zwischen Dienstanforderungen und Verarbeitungsservern ist festgelegt und eine bestimmte Anforderung wird von einem festen Server verarbeitet . Diese Methode kann nicht die Last des gesamten Systems ausgleichen und kann dazu führen, dass einige Server zu ausgelastet sind, um neue Anforderungen zu verarbeiten. Während andere Server zu inaktiv sind, ist die Ressourcenauslastung des Gesamtsystems gering, und wenn ein Server im verteilten Cluster ausfällt, führt dies direkt dazu, dass bestimmte Dienstanforderungen nicht verarbeitet werden können.

Weitere Verbesserungen können Hash-Algorithmen verwenden, um die Beziehung zwischen Serviceanfragen und Verarbeitungsservern abzubilden, um eine dynamische Zuordnung zu erreichen. Die Dienstanforderung wird durch den Hash-Algorithmus konvertiert, und das konvertierte Ergebnis wird anhand des Serverknotenwerts modulo berechnet. Der Modulowert ist der der Dienstanforderung entsprechende Anforderungsverarbeitungsserver. Diese Methode kann Knotenausfälle bewältigen, wenn ein verteilter Clusterknoten ausfällt, können Dienstanforderungen über den Hash-Algorithmus an andere verfügbare Server weitergeleitet werden. Dadurch wird vermieden, dass die Anfrage nicht bearbeitet werden kann.

Die Mängel dieser Methode liegen jedoch auch auf der Hand. Wenn die der Dienstanforderung entsprechenden Daten auf dem Server gespeichert werden, wird bei einer Neuberechnung des Hashwerts der Anforderung eine große Anzahl von Anforderungen umgeleitet Die in der Anfrage zu verwendenden Daten sind ungültig, was in einem verteilten System sehr schlecht ist. Ein gut gestaltetes verteiltes System sollte eine gute Monotonie aufweisen, das heißt, das Hinzufügen und Entfernen von Servern führt nicht zu einer großen Anzahl von Hash-Verschiebungen, und konsistentes Hashing kann dieses Problem genau lösen.

Der konsistente Hash-Algorithmus ordnet den gesamten Hash-Wertraum einem virtuellen Ring zu, und der Wertebereich des gesamten Hash-Raums liegt zwischen 0 und 232-1. Der gesamte Raum ist im Uhrzeigersinn organisiert. Die Richtungen von 0~232-1 fallen im Nullpunkt zusammen. Verwenden Sie als Nächstes den folgenden Algorithmus, um die Dienstanforderung zuzuordnen, verwenden Sie den Hash-Algorithmus, um den entsprechenden Hash-Wert der Dienstanforderung zu berechnen, und suchen Sie dann im Uhrzeigersinn entlang des Kreises entsprechend der Position des Hash-Werts. Der erste gefundene Server ist der entsprechende Bearbeitungsanfrage. Wenn ein neuer Server hinzugefügt wird, sind die betroffenen Daten nur die Daten zwischen dem neu hinzugefügten Server und dem vorherigen Server in seinem Ringraum (d. h. dem ersten Server, der entgegen dem Uhrzeigersinn angetroffen wird). Die anderen Daten sind nicht betroffen. Zusammenfassend lässt sich sagen, dass der konsistente Hashing-Algorithmus nur einen kleinen Teil der Daten im Ringraum verschieben muss, um Knoten zu vergrößern oder zu verkleinern, und eine gute Fehlertoleranz und Skalierbarkeit aufweist.

Eigenschaften:

  • Erweiterbarkeit. Der konsistente Hash-Algorithmus gewährleistet minimale Änderungen in der Datenspeicherung beim Hinzufügen oder Entfernen von Servern und spart so im Vergleich zu herkömmlichen Hash-Algorithmen erheblich den Aufwand für die Datenverschiebung.

  • Passen Sie sich besser an das schnelle Datenwachstum an. Wenn die Daten weiter wachsen, können einige virtuelle Knoten viele Daten enthalten, was zu einer ungleichmäßigen Verteilung der Daten auf die virtuellen Knoten führt Diese Aufteilung kann nur durchgeführt werden. Der ursprüngliche virtuelle Knoten wird in zwei Teile geteilt, und es ist nicht erforderlich, alle Daten erneut zu hashen und zu teilen. Wenn nach der Aufteilung der virtuellen Knoten die Last auf den physischen Servern immer noch unausgeglichen ist, müssen Sie nur die Speicherverteilung einiger virtueller Knoten auf den Servern anpassen. Dadurch kann die Anzahl der physischen Server dynamisch erweitert werden, wenn die Datenmenge wächst, und die Kosten sind viel geringer als bei der Neuverteilung aller Daten mit herkömmlichen Hashing-Algorithmen.

Das obige ist der detaillierte Inhalt vonWas ist konsistentes Hashing?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage