Heim  >  Artikel  >  Java  >  Was sind die grundlegenden Wissenspunkte der Java MQ-Nachrichtenwarteschlange?

Was sind die grundlegenden Wissenspunkte der Java MQ-Nachrichtenwarteschlange?

王林
王林nach vorne
2023-04-21 23:16:071134Durchsuche

Caching-Lawine

Werfen wir zunächst einen Blick darauf, wie dieser normale Caching-Prozess aussieht? Wie in der folgenden Abbildung gezeigt:

java mq消息队列的知识点有哪些

Sie können sehen, dass zuerst der Benutzer auf dieses Etwas zugreift und dann jemand auf dieses Redis zugreift. Wenn Redis über die Zugriffsdaten verfügt, werden die aus dem Cache erhaltenen Daten direkt zurückgegeben Wenn der Redis-Cache die Daten nicht findet, fragt er die MySql-Datenbank ab. Wenn ein Ergebnis vorliegt, werden die von MySql abgerufenen Daten mit dem Redis-Cache synchronisiert und das Ergebnis der Abfrage zurückgegeben.

Dies ist ein einfacher und normaler Caching-Vorgang. Schauen wir uns also an, was Cache Avalanche auf diesem normalen Caching-Prozess basiert.

Lassen Sie mich zunächst ein Beispiel geben: Wenn Sie etwas in Dongdong kaufen, betreten Sie die Homepage von Double Eleven Daten auf der Homepage werden in Redis zwischengespeichert.

Angenommen, die Homepage-Daten werden in 100 Schlüsseln in Redis gespeichert und die Cache-Ablaufzeit ist auf zwei Stunden eingestellt. Während Double Eleven läuft nach mehr als zwei Stunden Einkauf der gesamte Redis-Cache der Homepage-Daten ab Dies führt dazu, dass alle Anfragen an die MySql-Datenbank gesendet werden, was dazu führt, dass die MySql-Datenbank nicht mehr rechtzeitig antwortet und die Dong-Homepage nicht mehr bereitgestellt werden kann Dann war Dong Ge I sehr unzufrieden und schickte den zuständigen Techniker nach Afrika.

Schauen wir uns anhand dieses Beispiels das Bild unten an:

java mq消息队列的知识点有哪些

Das heißt, wenn ein Benutzer auf etwas zugreift, ist eine große Anzahl von Schlüsseln in Redis ungültig, was dazu führt, dass dieses Objekt direkt auf die Datenbank zugreift und erstellt Bei einer großen Anzahl von Anfragen handelt es sich bei diesem Phänomen um eine „Cache-Lawine“. Vereinfacht ausgedrückt wird eine große Anzahl von Redis-Caches gleichzeitig ungültig gemacht, genau wie diese Lawine kommt. Was sind also die Lösungen, um Lawinen einzudämmen? Lassen Sie uns unten darüber sprechen:

  • Legen Sie die Ablaufzeit dieses Caches fest, um zu verhindern, dass eine große Anzahl von Schlüsseln gleichzeitig ungültig wird. Das heißt, wenn Sie diesen Cache festlegen, können Sie die Ablaufzeit der Schlüssel verteilen .

  • Wir stellen Redis normalerweise in einem Cluster bereit. Wir können die Schlüssel dieser Hotspots auf verschiedenen Knoten platzieren, sodass die Schlüssel dieser Hotspots gleichmäßig auf verschiedene Redis-Knoten verteilt werden.
  • Es gibt auch eine gewalttätigere Methode, die darin besteht, die Cache-Ablaufzeit nicht festzulegen, sodass der Schlüssel niemals abläuft
  • .
  • Cache-Penetration

  • Als nächstes stellen wir vor, was Cache-Penetration ist.

Lassen Sie uns ein Beispiel nennen: Ein gewisser alter Mann entwickelte zum Beispiel eine Website, und dann wurde die Website plötzlich von Hackern angegriffen, die auf dem Prinzip der Cache-Penetration basierte.

Jeder weiß, dass der Primärschlüssel der Datenbank normalerweise von 0 ansteigt und es keine negativen Zahlen gibt. Dieser Hacker hat dies ausgenutzt und weiterhin Anfragen mit Parametern mit einer ID kleiner als Null gesendet. Dieser Typ hat zuerst alle Daten der Website in den Redis-Cache gelegt, aber der Hacker hat eine Nummer mit einer ID kleiner als Null verwendet, um sie anzufordern. Der Redis-Cache hatte diese Daten mit einer ID kleiner als Null nicht, also konnte Redis nicht Wenn Redis das Ergebnis nicht finden kann, wird es in der Datenbank überprüft. Anschließend werden alle Anforderungen an die Datenbank weitergeleitet, und zwar immer an die Datenbank, da die Redis-Cache-Schicht solche Daten nicht abfangen kann überhaupt.

Der Redis-Cache wird direkt von diesen Daten durchdrungen und dringt direkt in die Datenbank ein. Schauen wir uns in ähnlicher Weise das Bild unten an:

Zuerst greift der böswillige Benutzer auf etwas zu und fordert die Daten mit der ID = -1 an. Dann werden die Daten mit der ID = -1 nicht im Redis-Cache gefunden, also geht es los Bei der Abfrage innerhalb der Datenbank wurden die Daten nicht gefunden, sodass leere Daten nur an das Frontend zurückgegeben werden konnten.

java mq消息队列的知识点有哪些Dieser böswillige Benutzer (Hacker) verwendet ein Skript, um diese Daten kontinuierlich auf Anfrage zu senden, dringt direkt in Redis ein und trifft auf diese Datenbank. Dies ist die sogenannte

Cache-Penetration

. Vereinfacht ausgedrückt bedeutet Cache-Penetration, dass sich keine derartigen Daten im Cache oder in der Datenbank befinden. Normalerweise wird in dieser Situation nicht auf sie zugegriffen.

Dann lauten die Lösungen für die Cache-Penetration wie folgt:

Wenn die Anforderung in Redis eindringt und direkt an die Datenbank geht, wird das Ergebnis unabhängig davon, welches in der Datenbank gefunden wird, in den Redis-Cache zurückgeschrieben dass es beim nächsten Mal verwendet werden kann Wenn eine Anfrage mit demselben Parameter gesendet wird, wird sie direkt vom Redis-Cache abgefangen und nicht an die Datenbank zurückgesendet
    .
  • Überprüfen Sie die Gültigkeit der angeforderten Parameter
  • .
  • Eine direktere, einfachere und grobere Methode besteht darin, diese IP zu blockieren.

  • Verwenden Sie abschließend einen Blütenfilter, was eine sehr gute Möglichkeit ist.

Cache-Fehler

Lassen Sie uns über das letzte Problem sprechen, nämlich den Cache-Fehler.

Nehmen wir Double Eleven als Beispiel: Während Double Eleven kündigte Bruder Dong an, dass er eine große Veranstaltung veranstalten wollte und sagte, dass er den Computer, den er vor 20 Jahren benutzte, versteigern wollte. Dann interessierten sich viele Leute für diesen Computer Interessiert, also beschloss Dong Ge, diesen Computer um 9 Uhr auf Double Eleven zu versteigern. Dann legte Dongs Entwicklungsprogrammierer die Computerdaten in den Redis-Cache, was einem Schlüssel im Redis-Cache entspricht.

Während der Auktion waren alle sehr begeistert. Die Auktion dauerte fast drei Stunden. Die Online-Auktion ist noch nicht beendet, aber die Ablaufzeit des Redis-Cache-Schlüssels für diesen Computer beträgt dreieinhalb Stunden. Als alle dreieinhalb Stunden lang versteigerten, wurde der Cache-Schlüssel dieses Computers plötzlich ungültig. Dies führte dazu, dass die große Anzahl von Auktionsanfragen die Daten in Redis nicht finden konnte Zu diesem Zeitpunkt wird der Datenbankdruck erhöht, was dazu führt, dass das System nicht rechtzeitig reagiert und aufhängt.
Zu diesem Zeitpunkt war Bruder Dong etwas wütend, als er sah, dass sein Computer noch nicht versteigert worden war, also schickte er den Programmierer nach Afrika.

Sehen wir uns in ähnlicher Weise das folgende Bild an:

java mq消息队列的知识点有哪些

Der Benutzer besucht eine bestimmte Website und ruft dann Redis auf, um ein Auktions-Flash-Sale-Produkt anzufordern. Wenn der Cache nicht ungültig ist, kann Redis das Ergebnis zurückgeben Der Cache-Schlüssel wird abgefragt, aber wenn der zwischengespeicherte Schlüssel abläuft, dringt die Anforderung in die Redis ein und trifft direkt auf die Datenbank.

Was hier jeder beachten sollte, ist, dass dies der Schlüssel eines bestimmten Hotspots ist. Eine große Anzahl von Benutzeranfragen greift weiterhin auf den Schlüssel dieses Hotspots zu. Wenn der Schlüssel dieses Hotspots plötzlich ausfällt, werden alle Anfragen gesendet Dieser Vorgang wird als „Cache-Aufschlüsselung“ bezeichnet. Denken Sie daran, dass es der Schlüssel zum Eindringen in einen sehr heißen Punkt ist. Dann lautet die Lösung für diese Cache-Störung:

    Diesen Hotspot-Schlüssel nicht ablaufen lassen, d. h. keine Ablaufzeit festlegen (nicht empfohlen)
  • .

  • Verwenden Sie verteilte Sperren. Wenn es sich um eine einzelne Anwendung handelt, verwenden Sie Mutex-Sperren (verteilte Sperren werden in den folgenden Artikeln besprochen)
  • .

Das obige ist der detaillierte Inhalt vonWas sind die grundlegenden Wissenspunkte der Java MQ-Nachrichtenwarteschlange?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen