Wie ist die Skalierbarkeit von WalletNotify des Full Node Wallets

Ich denke darüber nach, wie große Börsen mit Kundeneinlagen umgehen, es scheint, dass es zwei verfügbare Lösungen gibt, eine besteht darin, externe Benachrichtigungs-APIs zu verwenden, wie die Benachrichtigungs-API von blockchain.info, eine andere besteht darin, einen vollständigen Knoten auszuführen und die Funktion walletnotify zu verwenden. Da der erste Ansatz eine Abhängigkeit von einem Drittanbieterdienst mit sich bringt, unterstützt er auch keine Testnet-Benachrichtigung, die wir während der Entwicklung verwenden, also versuche ich, einen vollständigen Knoten auszuführen. Meine Frage ist, wie skalierbar ist es? Angenommen, es gibt 10.000 Benutzer, und die Plattform muss das Hinzufügen weiterer Adressen für einen Benutzer unterstützen, sagen wir, dass jeder Benutzer im Durchschnitt 10 Adressen generiert, das sind 100.000 zu beobachtende Adressen. Wenn ich diese 100.000-Adresse nur als Uhr zum vollständigen Knoten hinzufüge und walletnotify aktiviere, ist das eine gute Möglichkeit, damit umzugehen? Wird es technische Probleme geben?

Antworten (3)

Die Verwendung walletnotifyhat sich bewährt und wird heute von vielen skalierbaren Apps verwendet. Ganz darauf verlassen würde ich mich aber nicht. walletnotifyDie Aufgabe von ist es, jedes Mal, wenn es eine Wallet-Transaktion empfängt, einen Shell-Befehl auszuführen. Das bedeutet, dass Daten zwischen den Prozessen fließen, was mich als Entwickler nicht ganz glücklich macht. Schließlich braucht es nur einen Fehler, damit jemand sein Geld verpasst.

Ich würde empfehlen, nicht nur zu verwenden walletnotify, sondern auch X Blöcke nach Y Minuten zu überprüfen. Sie können die übergebenen Blöcke nachverfolgen, und wenn Transaktionen von nicht verarbeitet wurden walletnotify, wird Ihr Cronjob zum Überprüfen der Transaktionen die Transaktion wiederherstellen. Sie können den RPC-Befehl verwenden listsinceblockund die Blockhöhe jedes Mal verfolgen, wenn Sie Transaktionen überprüfen. Sie könnten die verarbeiteten Transaktionen irgendwo in einer DB speichern.

Schließlich handelt es sich um eine Finanzanwendung, daher halte ich eine Sicherungsprüfung für unerlässlich.

Wahrscheinlich gibt es keine technischen Probleme und es hängt stark von Ihrem Server ab.

Wenn Ihr Server keine Probleme hat, brauchen Sie sich keine Sorgen zu machen.

Ich habe versucht, 1000 Anfragen gleichzeitig mit einem Basisserver an den Bitcoin-Core-Server zu senden, und alles hat großartig funktioniert.

Sie können auch mehr als einen Bitcoin-Core-Server erhalten und die Anfragen an diese Server weiterleiten.

Ich denke, die Brieftaschenbenachrichtigung ist anders als das Senden von RPC-Anfragen, auch 1000 hat einen anderen Skalierungsfaktor als 100.000, aber wenn Sie wirklich eine Bitcoin-Plattform wie eine E-Commerce-Site handhaben, z. B. eine Amazon-ähnliche Site oder eine Kryptowährungsbörse, würde ich Ihrer Antwort vertrauen.
Nein, es ist nicht anders, RPC bedeutet Remote_procedure_call, also leitet es nur die Anfrage an Ihre App weiter. Das Senden von Befehlen über RPC ist also dasselbe. Sie könnten es mit einer Adresse wie 2000 versuchen und sehen, was passiert.

Da die Zeit, die für die Verarbeitung einer bestimmten Anfrage benötigt wird, größer als null Millisekunden ist, wird es einen Punkt geben, an dem genügend Anfragen dazu führen, dass die CPU eine Auslastung von 100 % erreicht, oder Sie könnten zuerst E/A- oder Netzwerkgrenzen erreichen, aber in jedem Fall Wenn Sie einen Engpass finden, müssen Sie die Arbeitslast mithilfe eines Lastausgleichsschemas auf mehrere Computer aufteilen.