Heim > Artikel > WeChat-Applet > Vermutung über das Implementierungsprinzip der roten Umschläge von WeChat
Der folgende Inhalt stammt aus dem Hintergrund der Chat-Aufzeichnungen einer Gruppe für Hochverfügbarkeitsarchitektur bei QCon: Ein Freund hat sich über die Architektur der roten WeChat-Umschläge beraten, und der folgende Diskussionsinhalt wurde aus den Erklärungen und Diskussionen von offiziellen oder abgeleitet In dieser Zeit gab es viele inoffizielle Klassenkameraden, die einen roten Umschlag erhielten, um den Algorithmus im aktuellen Netzwerk zu testen.
Der Prozess, sich rote Umschläge zu schnappen
Wenn jemand einen roten Umschlag an N Personen in der Gruppe mit einem Gesamtbetrag von M Yuan schickt, was passiert im Hintergrund? ist wie folgt:
1. Hintergrundvorgang zum Senden roter Umschläge:
Fügen Sie einen Datensatz für rote Umschläge in der Datenbank hinzu, speichern Sie ihn in CKV und legen Sie die Ablaufzeit fest >Im Cache (wahrscheinlich die interne KV-Datenbank von Tencent, basierend auf dem Speicher. Es wurde ein Kernel-Status-Netzwerkverarbeitungsmodul implementiert, um Dienste in Form eines Kernelmoduls bereitzustellen.) Fügen Sie einen Datensatz hinzu, um die Anzahl der Personen zu speichern, die greifen rote Umschläge N
2. Backstage-Vorgänge zum Erfassen roter Umschläge:
Erfassen roter Umschläge Es ist in Erfassen und Abreißen unterteilt. Der Ergreifungsvorgang wird auf der Cache-Ebene abgeschlossen wird durch eine atomare Subtraktionsoperation dekrementiert, bis es 0 erreicht. Dies bedeutet, dass sie alle ausgeraubt werden. Durch die Trennung der Vorgänge werden ungültige Anforderungen direkt außerhalb der Cache-Ebene blockiert. Die atomare Subtraktionsoperation ist hier keine atomare Subtraktionsoperation im eigentlichen Sinne, sondern Der von der Cache-Ebene bereitgestellte CAS versucht weiterhin, die Versionsnummern zu vergleichen. Es besteht ein gewisser Grad an Konflikten. Der in Konflikt stehende Benutzer wird freigegeben und kann mit dem nächsten Schritt der Demontage fortfahren. Die Situation, wenn die Entwicklung abgeschlossen ist.
Das Öffnen der roten Umschläge wird in der Datenbank abgeschlossen. Die Anzahl und der erhaltene Betrag werden durch den Transaktionsvorgang der Datenbank akkumuliert und eine Forderung wird eingefügt. Fließendes Wasser und Aufzeichnung sind asynchrone Vorgänge, was auch erklärt, warum rote Umschläge nach Erhalt während des Frühlingsfestes nicht in der Waage zu sehen sind. Der Betrag wird bei der Aufteilung in Echtzeit berechnet. Der Betrag ist eine Zufallszahl zwischen 1 Punkt und dem 2-fachen des verbleibenden Durchschnittsbetrags Ein roter Umschlag im Wert von M Yuan, der größte rote Umschlag ist M * 2 /N (und wird M nicht überschreiten), wenn der rote Umschlag geöffnet wird, werden der verbleibende Betrag und die verbleibende Anzahl aktualisiert. Tenpay bereitet sich auf 200.000 Transaktionen pro Sekunde vor, die tatsächliche Menge beträgt jedoch nur 80.000 pro Sekunde.
FAQDa beim Greifen Atome reduziert werden, sollte es dann nicht eine Situation geben, in der sie nach dem Greifen nicht zerlegt werden?
Die atomare Subtraktion ist hier keine atomare Operation im eigentlichen Sinne, sondern der von der Cache-Schicht bereitgestellte CAS, der ständig durch Vergleichen der Versionsnummern versucht wird.
Was soll ich tun, wenn der Cache und die Datenbank ausgefallen sind?
Gibt es einen roten Umschlag, der weg ist, aber der Restbetrag ist noch da?
Warum Grabung und Abriss trennen?
Die allgemeine Idee besteht darin, mehrschichtige Filter einzurichten, diese Schicht für Schicht zu filtern und Durchfluss und Druck Schicht für Schicht zu reduzieren. Dieses Design war ursprünglich darauf zurückzuführen, dass der Greifvorgang die Geschäftsschicht und der Aufteilungsvorgang der Abrechnungsvorgang ist. Ein Vorgang ist zu schwer und die Unterbrechungsrate ist hoch.
Auf der Schnittstellenebene ist die erste Schnittstelle eine reine Cache-Operation und verfügt über starke Komprimierungsfunktionen. Ein einfacher Abfrage-Cache blockiert die meisten Benutzer und führt die erste Filterung durch, sodass die meisten Benutzer die Meldung sehen, dass der Inhalt ausverkauft ist.
Nachdem Sie sich den roten Umschlag geschnappt haben, verschicken Sie ihn oder heben Sie Bargeld ab. Gibt es hier eine Strategie?
Strategie zur vorrangigen Einzahlung großer Beträge
Gibt es Daten, die belegen, ob die Wahrscheinlichkeit jedes roten Umschlags gleich ist?
Gibt es mit dem Head-Patting-Algorithmus zwei beste?
Wird das Geld der Person, die den roten Umschlag gibt, eingefroren?
Was sind die Gründe für die Berechnung des Betrags in Echtzeit?
Test 2: Experiment des Zhihu-Benutzers „Ma Jingchen“:
Hier finden Sie Beispieldaten für eine Umfrage mit 100 Stichproben. Geben Sie Ihre eigene Vermutung ab.
1. Das Wallet-Geld erfüllt die zensierte normale Zufallszahlenverteilung. Grob gesagt werden Zufallszahlen aus einer zensierten Normalverteilung entnommen und die summierte Zahl durch den Gesamtwert dividiert, um den Korrekturfaktor zu erhalten. Anschließend wird der Korrekturfaktor mit allen Zufallszahlen multipliziert, um den Wert der roten Hüllkurve zu erhalten.
Diese Verteilung bedeutet: Es gibt mehr rote Umschläge unter dem Durchschnitt, aber nicht weit vom Durchschnitt entfernt. Es gibt wenige rote Umschläge über dem Durchschnitt, aber es gibt mehr rote Umschläge, die viel größer als der Durchschnitt sind.
Abbildung 1. Wallet-Wert und sein Häufigkeitsverteilungshistogramm und seine Normalanpassung
Ein Blick auf das Verteilungshistogramm lässt jedoch nicht darauf schließen, dass es dem Normalwert entspricht Verteilung, aber angesichts der Einfachheit des Programms und der Rationalität der Zufallszahlen ist dies die vernünftigste Annahme.
2. Die späteren Wallets sind im Allgemeinen wertvoller
Abbildung 2. Die Beziehungskurve zwischen der Wallet-Seriennummer und ihrem Wert
Anhand der linearen roten Linie in Abbildung 2 können wir erkennen, dass der allgemeine Änderungstrend des Wallet-Werts langsam zunimmt und sein Änderungsbereich ungefähr einem „Kanal“ entspricht, der durch die Ober- und Untergrenze der grün gepunkteten Linie abgegrenzt wird . (Die Kurve kann in einen solchen regelmäßigen „Kanal“ eingeschlossen werden, was auch die Rationalität von Regel 1 von der Seite widerspiegelt und verdeutlicht, dass Zufallszahlen nicht gleichmäßig verteilt sind)
Aus einem anderen Durchschnitt lässt sich dieses Muster ebenfalls erkennen in der Abbildung.
Abbildung 3. Die Änderungskurve der durchschnittlichen Zahl mit der laufenden Nummer
Im Beispiel eine Brieftasche im Wert von 1000 wurde in 100 Teile geteilt, der Mittelwert beträgt 10. In Abbildung 3 können wir jedoch sehen, dass der Durchschnitt vor der letzten Wallet unter 10 lag, was zeigt, dass der Wert der Wallet zu Beginn niedrig war und später durch den Wert der Wallet nach oben gezogen wurde Zeitraum. Der Wert ist höher.
3. Natürlich kann die Durchschnittsgrafik auch eine andere Regel offenbaren, nämlich dass die letzte Person oft das Glück hat, mehr zu zeichnen. Da die letzte Person alles bekommt, was noch in ihrem Portemonnaie ist, und der Durchschnitt aller davor weniger als 10 beträgt, ist es zumindest garantiert, dass die letzte Person höher als der Durchschnitt sein wird. In diesem Beispiel zog die Wallet Nummer 98 35, während die letzte Wallet 46 zog.
Um es zusammenzufassen, basierend auf der Beispielschätzung:
Meistens ist das abgehobene Geld so gering wie bei anderen, aber einmal ist mehr, es wird viel einfacher.
2. Je weiter man das Portemonnaie auf der Rückseite herauszieht, desto einfacher ist es, Geld zu verdienen.
3. Der Letzte hat oft Glück.