Wie wir 96 gewählte Prüfer hervorgebracht haben

Veröffentlicht

(Indika) (5. September) 2019)

Das letzte Mal, als ich einen Artikel veröffentlichte, war vor fünf Jahren mit dem Titel: Kochen eines Webservers mit Chef . Fünf Jahre sind eine lange Zeit, um nicht zu schreiben. Es ist nicht so, dass ich das Interesse an dem Thema verloren hätte. Stattdessen habe ich leise von den Besten gelernt.

Das Diskussionsthema hat sich jedoch nicht geändert, außer dass es jetzt um eine Größenordnung größer ist. Damals habe ich einen einzelnen Webserver gekocht und jetzt spawne ich 96 Elected Verifiers (EVs).

Warum 96?

Bei Unification ändern wir den zugrunde liegenden Konsensalgorithmus von Äther. Unsere Implementierung von Distributed Stake Governance umfasst vier Gruppen von 24 Elektrofahrzeugen, die sich innerhalb und außerhalb der Blockvalidierung drehen. Die Steuerung dieser Rotationen wird durch einen Abstimmungs- und Absteckungsprozess erleichtert. Das Endergebnis ist ein stärker verteiltes Konsortialnetzwerk.

Das Theoretisieren dieses Themas auf Whitepapers und in Simulationen kann uns nur so weit bringen. Der beste Weg, um voranzukommen, besteht darin, es zu produzieren, damit zu spielen und Mängel zu erfahren.

Kontinuierliche Lieferung

Wir möchten in der Lage sein, unsere Ideen schnell zu bewerten . Testgetriebene Entwicklung muss nicht auf das Schreiben von Komponententests beschränkt sein.

Für einen bestimmten Git SHA möchten wir eine beliebige Version unserer Hauptkette durch Ausführen eines einzelnen Befehls starten, dessen Status auswerten und dann ausführen Verfeinerungen seiner DNA.

Wir möchten diesen Prozess weiter verfeinern, bis wir glauben, dass wir etwas für die Produktion bereit haben. Der Prozess der Softwareentwicklung ist nichts anderes als diese einfache Iteration:

Je komplexer ein System wird, desto schwieriger wird jeder dieser Teile. Das Instanziieren von 96 EVs ist ein nicht triviales Problem und steht im Mittelpunkt dieses Artikels.

Definition

Zunächst definieren wir, was wir bereitstellen möchten. Ein instanziierter Cluster besteht hauptsächlich aus Elektrofahrzeugen, von denen einige RPC aktiviert haben und andere nicht. Der Cluster kann auch einen UND-Wasserhahn, einen Block-Explorer und möglicherweise sogar einen Überwachungsknoten enthalten.

Diese Cluster werden durch JSON-Dateien angegeben, und der Zweck des Bereitstellungsstapels kann dies bewirken.

Jeder Knoten im Cluster benötigt ein eindeutiges Handle und Das folgende Adressierungsschema wird ausgewählt:

x = "{cluster\_name}-{configuration}-{instance\_type}-{index}"

Zum Beispiel:

alpha-basic-ev-1

In der In der obigen Aussage bezieht sich das Wort „grundlegend“ auf eine Konfiguration, in der es vier Elektrofahrzeuge und einen Block-Explorer gibt. Das Wort „Alpha“ ist der Name des Experiments.

Der Stapel

Wir hätten mit Kubernetes gehen können.

Wir möchten jedoch auch in investieren Erstellen von Tools, mit denen unsere Community ihre eigenen Elektrofahrzeuge starten kann. Wir wählen Ansible wegen seiner Einfachheit und die Playbooks, die auf CentOS abzielen, funktionieren auf jeder Architektur oder können leicht angepasst werden.

Auch wenn ich in der Vergangenheit sowohl Chef als auch Puppet evaluiert habe, habe ich Ich habe sie beide wegen der Einfachheit von Ansible über Bord geworfen. Chef und Puppet benötigen Softwarekomponenten auf dem Zielcomputer. Ansible benötigt jedoch nur eine SSH-Verbindung.

In Bezug auf den Stapel gibt es hier keine Quantenphysik. nur notwendige Schritte zum Erfolg. Unser Stack besteht aus:

  • AWS-Benutzern und AWS-API
  • AWS-Startvorlage
  • AWS-Tags
  • Minimalistischer Bash-Start Skript
  • Erstellen eines Bash-Skripts aus Github
  • Konfigurieren von Ansible-Host-Variablen aus Tags
  • Stellen Sie den Host mit Ansible

bereit AWS-API und AWS-Benutzer

AWS bietet über die API und die berechtigten Benutzer eine äußerst detaillierte Kontrolle über die Services. Auf die API kann anständig über die Python boto3-Bibliothek zugegriffen werden. Ein Vorläufer für die Verwendung der API ist das Erstellen des relevanten Benutzers über die IAM-Schnittstelle. Ein Benutzer ist eine typische Benutzerzugriffs-ID und ein geheimes Paar.

Ein Benutzer kann an eine oder mehrere Richtlinien angehängt werden. Eine Richtlinie besteht aus einer Reihe zulässiger oder verweigerter Aktionen für eine Reihe von Ressourcen.

Unser Spawn-Benutzer verfügt über eine Richtlinie mit minimalistischen Aktionen zum Erstellen einer EC2-Instanz und Aktionen zum Lesen des gesamten Ressourcensatzes.

Vorlagen starten

Eine der wichtigsten Funktionen, die AWS uns bietet, sind Startvorlagen.

Mit einer Startvorlage können Sie eine Basis-AMI (die Kennung für das Image der virtuellen Maschine, aus der eine Instanz erstellt werden soll) angeben und vorkonfigurieren Einstellungen, einschließlich zweier wesentlicher Komponenten: Tags und ein Run Script. Darüber hinaus kann angegeben werden, zu welcher Sicherheitsgruppe der Computer gehören soll.

Startvorlagen können versioniert und Instanzen vom AWS-Benutzer gestartet werden.

Tags

Jede EC2-Instanz ist basierend auf den Tags, mit denen sie konfiguriert ist, eindeutig. Die folgenden Informationen werden an den Knoten gesendet:

  • Name (eindeutige Kennung des Knotens)
  • Klasse (Instanztyp)
  • Index ( die Position der Instanz)
  • Konfiguration (die Vielzahl der zu instanziierenden Cluster)
  • SHA (ein Git SHA)
  • RegistrationIP (die IP-Adresse des Registration Tower)

Jedes dieser Tags wird in den Ansible-Host-Variablen festgelegt.

Bootstrapping mit Bash

Das Bash-Bootstrap-Skript bereitet den Host vor zur Bereitstellung. Einige der ausgeführten Jobs sind das Installieren einer grundlegenden Python-Umgebung, das Parsen von AWS-Tags, das Schreiben dieser in die Ansible-Host-Vars-Datei und das Auswählen des entsprechenden Ansible-Playbooks für den Knotentyp.

Ansible

Schließlich wird der Knoten mit Ansible bereitgestellt. Ich werde nicht auf Ansible eingehen, da es im Internet genügend andere Ressourcen gibt. Hier gibt es nichts Besonderes, außer dass normalerweise ein Remote-Server mit Ansible konfiguriert wird. In unserem Fall konfigurieren wir jedoch den lokalen Server.

Registrierungsturm

Wir verwenden einen Registrierungsturm anstelle eines Bootknotens zum Bootstrap des Netzwerks. EVs registrieren ihre IP-Adressen bei der Instanziierung beim Registrierungsknoten, und vor der Dienstaktivierung wird eine Liste der statischen Knoten abgerufen.

Der Vorteil der Verwendung eines solchen Turms besteht darin, dass wir beliebige Daten wie Gesundheitsstatistiken registrieren können, um die Bewertungsschleife zu schließen.

Wenn ein EV instanziiert wird, schreibt er in die Registrierungs-API, den Clusternamen, die IP-Adresse, den Index und den Instanztyp.

Evaluierung

Der Hauptfokus der Evaluierung liegt auf der Bestimmung, wie erfolgreich war das experiment. Was die Erfolgsbedingungen sind, wird in einem anderen Artikel behandelt. Eine sofortige Messgröße, die Sie im Auge behalten sollten, sind jedoch die Kosten.

Der Preis für eine t2-Mikroinstanz beträgt 0,012 / h. Die Kosten für den Betrieb von 96 davon für eine Stunde sollten nur einen Dollar betragen. Dies kann im Kosten-Explorer bestätigt werden.

Weiter

Dieser Stapel funktioniert hervorragend. Ein einzelner Befehl ruft konsistent und fehlerfrei eine vollständig verbundene und blockverbreitende Hauptkette auf. Was ich an diesem Stapel am meisten mag, ist, dass es Feuer und Vergessen ist; Ich kann den Cluster instanziieren, mich vom Internet trennen und jonglieren. Bei meiner Rückkehr steht eine Hauptkette für mich bereit.

Dies ist eine starke Grundlage für unseren nächsten Schritt. Wir können verschiedene Konfigurationen unserer Konsensus-DNA evaluieren. In unserem nächsten Artikel mit dem Titel „Distributed Stake Governance“ werden wir unseren aktuellen einfachen Konsensalgorithmus weiterentwickeln und gegen die brutale Realität bewerten.

Den Quellcode für den EV Provisioning-Stack finden Sie hier: https://github.com/unification-com/ev-provision

Besuchen Sie uns auf Unification Gitter: https://gitter.im/unification-com

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.