
Die heutigen Lösungen für das Testen und Benchmarking von Blockchains sind auf bestimmte Blockchains oder deren Forks zugeschnitten. Es gibt jedoch auch einige allgemeinere Lösungen, die sich im Funktionsumfang unterscheiden: Einige davon sind Open-Source-Projekte, andere werden als SaaS angeboten, aber der größte Teil sind interne Lösungen, die von dem Entwicklungsteam der Blockchain erstellt werden. Dennoch lösen sie alle ähnliche Aufgaben. In diesem Artikel habe ich versucht, einige Produkte zu betrachten, die speziell für das Testen von Blockchains gedacht sind.
Die Funktionsweise eines Blockchain-Netzwerks ähnelt der einer verteilten Datenbank, daher können beim Testen ähnliche Werkzeuge und Methoden angewendet werden. Um besser zu verstehen, wie verteilte Datenbanken getestet werden, werfen Sie einen Blick auf eine gute Auswahl an Ressourcen und Artikeln. Zum Beispiel wird die Latenz in diesem Artikel ausführlich behandelt. Um zu verstehen, wie Fehler in den Replikationsalgorithmen gefunden werden, empfehle ich, sich mit diesem Artikel vertraut zu machen. .
Ich werde einige beliebte Lösungen für das Testen und Benchmarking von Blockchains beschreiben. Ich freue mich, wenn Sie in den Kommentaren andere nützliche Softwareprodukte zur Lösung derselben Aufgaben erwähnen.

Ich beginne mit einem Werkzeug, das zwar nicht speziell für Blockchains entwickelt wurde, aber es ermöglicht, deren Betrieb effektiv zu testen, sofern bereits ein Netzwerk vorhanden ist, an dem man experimentieren kann. Ein entscheidender Faktor für die Zuverlässigkeit eines verteilten Systems ist die Fähigkeit, im Falle von Problemen mit Servern und Netzwerken weiter zu arbeiten. Dazu können Netzwerkverzögerungen, Festplattenspeicherüberläufe, die Unzugänglichkeit externer Dienste (DNS), Hardwarefehler und Hunderte anderer Gründe gehören. Um die Robustheit aller Systeme zu überprüfen, die synchron auf einer großen Anzahl von Maschinen arbeiten, kann man folgende Methoden verwenden. Es wird ein äußerst effektiver Ansatz namens Chaos Engineering verwendet.
Mit dem eigenen Netzwerkagenten ermöglicht Gremlin die Erzeugung einer Vielzahl von unterschiedlichen Problemen auf der erforderlichen Anzahl von Maschinen: Netzwerkverzögerungen, Überlastung jeglicher Ressourcen (CPU, Festplatte, Arbeitsspeicher, Netzwerk), das Deaktivieren bestimmter Protokolle usw. Für Blockchains kann Gremlin auf Servern des Testnetzwerks eingesetzt werden, um reale Probleme zu emulieren und das Verhalten des Netzwerks zu beobachten. Dadurch können Entwickler und Administratoren in einer kontrollierten Umgebung beobachten, was im Falle von Ausfällen oder bei einem Code-Update in dem System passieren wird. Das Netzwerk muss im Voraus konfiguriert und bereitgestellt sowie die notwendigen Metriken eingerichtet werden.
Gremlin ist ein praktisches Tool für Architekten, DevOps und Sicherheitsfachleute und eine universelle Lösung zur Testung beliebiger einsatzbereiter und aktiver verteilter Systeme, einschließlich Blockchains.

Hyperledger Caliper ist eine viel spezialisiertere Lösung . Derzeit unterstützt Caliper mehrere Blockchains, darunter die Mitglieder der Hyperledger-Familie (Fabric, Sawtooth, Iroha, Burrow, Besu), sowie Ethereum und das FISCO BCOS-Netzwerk.
Mit Caliper kann die Topologie des Blockchain-Netzwerks und die Verträge für die Tests festgelegt sowie die Konfiguration des Knotens beschrieben werden. Die Blockchain-Knoten werden in Docker-Containern auf einer Maschine gestartet. Danach können Sie die notwendigen auswählen und eine Datei mit dem Testbericht nach dem Start erhalten. Die vollständige Liste der Metriken von Caliper und den Ansatz zur Leistungsbewertung finden Sie hier , das ist ein hervorragender Artikel, wenn Sie sich für das Thema Blockchain-Benchmarking interessieren. Außerdem können Sie die Erfassung von Metriken für ein separates Prometheus/Grafana einrichten.
Hyperledger Caliper ist ein Tool, das auf Entwickler und Systemarchitekten ausgerichtet ist, da es Wiederholbarkeit von Tests und Automatisierung von Tests und Benchmarks gewährleistet. Es wird bei der Entwicklung des Kernbereichs von Blockchains verwendet: Konsensalgorithmen, eine virtuelle Maschine für die Verarbeitung von Smart Contracts, Peer-to-Peer-Schichten und andere Systemmechanismen.

— ein Werkzeug, das im Zuge der Entwicklung von Konsens- und Finalitätsalgorithmen für auf EOS basierende Netzwerke und Tests von Parachains auf Basis von Parity Substrate (Polkadot) entstanden ist. Funktional ähnelt es Hyperledger Caliper, da es wichtige Metriken von Knoten beliebiger verteilter Systeme und von den Client-Maschinen, auf denen Testskripte laufen, sammeln kann.
MixBytes Tank nutzt mehrere Cloud-Dienste (Digital Ocean, Google Cloud Engine usw.), in denen es eine Vielzahl von Knoten starten, vorab Konfigurationsverfahren durchführen, mehrere Benchmarks parallel auf verschiedenen Maschinen ausführen, die erforderlichen Metriken sammeln und das Netzwerk automatisch herunterfahren kann.
MixBytes Tank ermöglicht eine kosteneffiziente Nutzung von Cloud-Servern, indem es unnötige Ressourcen nach dem Test automatisch herunterfährt. Ein weiteres Unterscheidungsmerkmal ist die Verwendung des Pakets Molecule, das es Entwicklern ermöglicht, den gewünschten Blockchain in einer lokalen Umgebung zu testen.
MixBytes Tank ermöglicht es, bereits in frühen Phasen Engpässe und Fehler in Algorithmen zu erkennen, die in realen Netzwerken mit einer großen Anzahl geografisch verteilter Server und Clients auftreten. Der Tank hilft Ihnen zu verstehen, was an den Knoten passieren wird, wenn Clients Transaktionen mit einer bestimmten TPS unter hochwiederholbaren Bedingungen und mit einer realen Anzahl von Knoten, die auf verschiedene Kontinente verteilt sind, senden, wenn dies erforderlich ist.

Whiteblock Genesis ist eine Plattform zum Testen von Blockchains auf Basis von Ethereum. Dieses Werkzeug bietet eine recht umfassende Funktionalität: Es ermöglicht das Starten eines Netzwerks, das Erstellen der erforderlichen Anzahl von Konten, das Hochfahren der benötigten Anzahl von Clients, die Konfiguration der Netzwerk-Topologie, das Festlegen von Parametern wie Bandbreite und Paketverlust und das Starten des Tests.
Whiteblock Genesis stellt eigene Ressourcen für Tests bereit. Entwicklern genügt es, die Testparameter anzugeben, diese über eine vorhandene API zu starten und die Ergebnisse mithilfe eines benutzerfreundlichen Dashboards zu erhalten.
Whiteblock Genesis ermöglicht die Konfiguration eines ausreichend detaillierten Tests, den die Plattform automatisch bei jeder signifikanten Änderung des Codes durchführt. Dadurch können Fehler frühzeitig erkannt und die Auswirkungen von Änderungen auf wichtige Netzwerkparameter wie Transaktionsgeschwindigkeit und Ressourcenverbrauch der Knoten sofort bewertet werden.
Madt
Ein weiteres interessantes junges Produkt zum Testen verteilter Systeme — . Es ist in Python geschrieben und ermöglicht die Erstellung der erforderlichen Netzwerktopologie sowie der notwendigen Anzahl von Servern und Clients durch ein einfaches Konfigurationsskript (). Danach wird das Netzwerk in mehreren Docker-Containern bereitgestellt und eine Weboberfläche hochgefahren, auf der Nachrichten von den Servern und Clients des Netzwerks beobachtet werden können. Madt kann für das Testen von Blockchains verwendet werden — im Repository des Projekts gibt es einen Test für ein p2p-Netzwerk basierend auf dem Kademlia-Protokoll, bei dem die Latenzen bei der Datenübertragung zu den Knoten schrittweise erhöht werden und der Status dieser Daten überprüft wird.
Madt ist erst vor Kurzem erschienen, aber angesichts der sehr flexiblen Architektur könnte es sich zu einem funktionalen Produkt entwickeln.
Andere Lösungen
Praktisch jede Testung der Systemkomponenten von Blockchains erfordert das Ausführen vorbereitender Szenarien, das Einrichten von Konten und Bedingungen für den Test (das kann das Testen von Konsensfehlern umfassen, die zahlreiche Kettenforscher erzeugen können, das Durchspielen von Hardfork-Szenarien, das Ändern von Systemparametern usw.). All diese Manipulationen werden in verschiedenen Blockchains unterschiedlich durchgeführt, daher ist es für Teams einfacher, die Testung und das Benchmarking des Produkts schrittweise an die interne CI/CD anzupassen und eigene Entwicklungen zu nutzen, die sich mit der Entwicklung der Blockchain-Funktionalität allmählich komplexer gestalten.
Dennoch kann die Verwendung fertiger Lösungen den Teams erheblich Zeit beim Testen sparen, weshalb ich denke, dass diese Software in den kommenden Jahren aktiv weiterentwickelt wird.
Fazit
Abschließend möchte ich einige wichtige Merkmale von Werkzeugen für das Testen von Blockchains aufführen:
- Die Möglichkeit zum automatischen Bereitstellen eines Blockchain-Netzwerks unter wiederholbaren Bedingungen. Dieser Faktor ist wichtig bei der Entwicklung der Systemkomponenten von Blockchains: Konsensalgorithmen, Endgültigkeit, System-Smart-Contracts.
- Die Kosten für den Betrieb des Systems, die erforderlichen Ressourcen und die Benutzerfreundlichkeit für den dauerhaften Einsatz. Dieser Faktor sorgt dafür, dass das Projekt hochwertige Tests zu geringen Kosten ermöglicht.
- Flexibilität und Einfachheit der Testkonfiguration. Dieser Faktor erhöht die Chancen zur Identifizierung von Systemproblemen — es ist weniger wahrscheinlich, dass etwas Wichtiges übersehen wird.
- Anpassung für bestimmte Blockchain-Typen. Die Entwicklung einer Lösung auf Basis bestehender Technologien kann die Qualität erheblich verbessern und den Zeitaufwand reduzieren.
- Bequemlichkeit und Zugänglichkeit der erhaltenen Ergebnisse sowie deren Typ (Berichte, Metriken, Grafiken, Protokolle usw.). Dies ist unbedingt erforderlich, wenn Sie die Entwicklungsgeschichte des Produkts verfolgen oder eine tiefgehende Analyse des Verhaltens des Blockchain-Netzwerks benötigen.
Viel Erfolg bei den Tests, und mögen Ihre Blockchains schnell und ausfallsicher sein!
Quelle: habr.com
