Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erklärung der Beanstalkd-Nachrichtenwarteschlange in PHP und der gemeinsamen Nutzung von Klassen

Ausführliche Erklärung der Beanstalkd-Nachrichtenwarteschlange in PHP und der gemeinsamen Nutzung von Klassen

黄舟
黄舟Original
2018-05-19 16:10:592684Durchsuche

In diesem Artikel wird hauptsächlich der Beispielcode der PHP-Beanstalkd-Nachrichtenwarteschlangenklasse für alle geteilt, der einen bestimmten Referenzwert hat.

Übersicht:
Beanstalkd, ein High-Level-A-High-Level. Leistungsstarkes, leichtgewichtiges Warteschlangensystem mit verteiltem Speicher, das ursprünglich entwickelt wurde, um die Seitenzugriffsverzögerung von Webanwendungssystemen mit hohem Volumen durch asynchrone Ausführung zeitaufwändiger Aufgaben im Hintergrund zu reduzieren. Es hat die Facebook Causes-Anwendung mit 9,5 Millionen Benutzern unterstützt. Später wurde es als Open Source bereitgestellt, und heute wird PostRank in großem Umfang bereitgestellt und genutzt und verarbeitet täglich Millionen von Aufgaben. Beanstalkd ist ein typisches Memcached-ähnliches Design. Das Protokoll und die Verwendung sind gleich, sodass Benutzer, die Memcached verwendet haben, das Gefühl haben, dass Beanstalkd vertraut ist.
Kernkonzepte von Beanstalk:
Job: Eine Aufgabe, die eine asynchrone Verarbeitung erfordert, muss in einer Röhre platziert werden.
tube: eine bekannte Aufgabenwarteschlange, in der Jobs eines einheitlichen Typs gespeichert werden
Produzent: der Produzent des Jobs
Verbraucher: der Konsument des Jobs
Kurz gesagt, der Prozess ist nur ein Prozess Satz:
Der Produzent generiert einen Task-Job und schiebt den Job in eine Röhre.
Dann nimmt der Verbraucher den Job aus der Röhre und führt ihn aus (die Voraussetzung für alle diese Vorgänge ist natürlich, dass der Beanstalk-Dienst läuft).

Ein Job hat READY (immer bereit, von einem Verbraucher herausgenommen zu werden), RESERVED (die Aufgabe wird von einem Verbraucher verarbeitet), DELAYED (verzögert die Aufgabe und geht nach der eingestellten Verzögerungszeit in den Bereitschaftszustand über). , BURIED (Während des Ruhezustands muss der Zustand vor dem Betrieb übertragen werden) vier Zustände. Wenn der Produzent einen Auftrag direkt eingibt, befindet sich der Auftrag im Status BEREIT und wartet darauf, dass der Verbraucher ihn verarbeitet. Wenn Sie den Auftrag verzögern, wechselt der Auftrag zunächst in den Status VERZÖGERT und wechselt dann in den Status BEREIT Wartezeit. Nachdem der Verbraucher den aktuellen READY-Job erhalten hat, wird der Status des Jobs auf RESERVED migriert, sodass andere Verbraucher den Job nicht mehr ausführen können. Nachdem der Verbraucher den Job abgeschlossen hat, kann er den Vorgang „Löschen“, „Freigeben“ oder „Vergraben“ wählen. Nach dem Löschen wird der Job vom System gelöscht und kann nicht erneut abgerufen werden Dies ermöglicht es anderen Verbrauchern, den Job weiterhin abzurufen und auszuführen. Das Interessante ist der Bury-Vorgang, der den Job in den Ruhezustand versetzen und ihn dann bei Bedarf wieder in den Status READY versetzen oder löschen kann der Job im BURIED-Zustand. Gerade aufgrund dieser interessanten Operationen und Zustände können viele interessante Anwendungen auf ihrer Grundlage erstellt werden. Wenn Sie beispielsweise eine zirkuläre Warteschlange implementieren möchten, können Sie die Jobs in den RESERVED-Status versetzen und dann die Jobs in den BURIED-Status versetzen zu arbeiten, wenn sich keine Jobs im READY-Status befinden. Der Job wird sofort in den READY-Status zurückversetzt.

Beispielanalyse: Weibo ist ein sehr typisches Beispiel:
1. Posten Sie ein Weibo an seine Fans (wenn es 1 Million Fans gibt, wird dieser Ort für lange Zeit verstopft sein Zeit. Was Benutzer spüren, ist Verzögerung)
Um einen Inhalt auf Weibo zu veröffentlichen, müssen Sie die beiden oben genannten Dinge tun, um vollständig zu sein. Das Posten eines Weibo erfordert nur einen einfachen Datenbankvorgang,
aber die Fans, die darauf drängen es zu ihm Die Datenbank muss 1 Million Mal bedient werden, was dazu führt, dass Benutzer lange warten müssen, bevor sie eine Weibo-Nachricht senden, bevor das Ergebnis erfolgreich zurückgegeben werden kann.
Mit der Warteschlangenmethode sendet der Benutzer eine Weibo-Nachricht und das Ergebnis wird sofort zurückgegeben. Wenn der Versand erfolgreich ist, wird der verbleibende Push zur asynchronen Ausführung in die Warteschlange gestellt besonders zeitnah, und die Verzögerung kann innerhalb weniger Sekunden oder Dutzender Sekunden liegen.

Das Beispiel in diesem Artikel teilt den spezifischen Code der PHP-Beanstalkd-Nachrichtenwarteschlangenklasse als Referenz. Der spezifische Inhalt ist wie folgt

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung der Beanstalkd-Nachrichtenwarteschlange in PHP und der gemeinsamen Nutzung von Klassen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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