Cum am generat 96 de verificatori aleși

(Indika) (5 sept., 2019)

Ultima dată când am publicat un articol, a fost acum cinci ani și era intitulat: Gătirea unui server web cu Chef . Cinci ani este mult timp pentru a nu scrie. Nu că mi-am pierdut interesul pentru subiect; în schimb, învățam în liniște de la cei mai buni.

Totuși, subiectul discuției nu s-a schimbat, cu excepția faptului că acum este un ordin de mărime mai mare. Pe atunci pregăteam un singur server web, iar acum am generat 96 de verificatori aleși (EV).

De ce 96?

La Unification, schimbăm algoritmul de bază al consensului de Ethereum. Implementarea noastră de guvernare a mizei distribuite implică patru grupuri de 24 de vehicule electrice, care se rotesc în interiorul și în afara validării blocurilor. Guvernarea acestor rotații este facilitată printr-un proces de vot și miză. Rezultatul final este o rețea de consorțiu mai distribuită.

Teorizarea acestui subiect pe hârtie albă și în simulări ne poate duce până acum. Cel mai bun mod de a merge mai departe este să-l producem, să ne jucăm cu el și să experimentăm orice deficiențe.

Livrare continuă

Vrem să fim în măsură să ne evaluăm ideile rapid. . Dezvoltarea bazată pe test nu trebuie să se limiteze la scrierea testelor unitare.

Pentru orice Git SHA dat, dorim să difuzăm orice versiune a Mainchain-ului nostru executând o singură comandă, evaluăm starea acestuia și apoi realizăm rafinări ale ADN-ului său.

Vrem să continuăm rafinarea acestui proces, până când credem că avem ceva pregătit pentru producție. Procesul de dezvoltare software nu este altceva decât această simplă iterație:

Cu cât un sistem devine mai complex, cu atât devine mai greu fiecare dintre aceste părți. Instanțierea a 96 de vehicule electrice este o problemă non-banală și este punctul central al acestui articol.

Definiție

Începem prin a defini ceea ce vrem să implementăm. Un cluster instantaneu va consta în cea mai mare parte din vehicule electrice, în care câteva dintre ele au RPC activat, iar altele nu. Clusterul poate include, de asemenea, un robinet UND, un explorator de blocuri și poate chiar un nod de monitorizare.

Aceste clustere sunt specificate de fișiere JSON, iar scopul stivei de aprovizionare le poate face astfel.

Fiecare nod din cluster are nevoie de un handle unic și se alege următoarea schemă de adresare:

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

De exemplu:

alpha-basic-ev-1

În afirmația de mai sus, cuvântul „de bază” se referă la o configurație, în care există patru EV-uri și un explorator de blocuri. Cuvântul „alfa” este numele experimentului.

Stiva

Am fi putut merge cu Kubernetes.

Cu toate acestea, dorim să investim și în crearea de instrumente pe care comunitatea noastră le poate folosi pentru a lansa propriile vehicule electrice. Alegem Ansible datorită simplității sale, iar cărțile de joc care vizează CentOS vor funcționa pe orice arhitectură sau pot fi ușor adaptate.

De asemenea, în timp ce am evaluat atât Chef, cât și Puppet în trecut, Le-am abandonat pe amândouă pentru simplitatea lui Ansible. Chef și Puppet au nevoie de componente software pe mașina țintă, cu toate acestea, Ansible are nevoie doar de o conexiune SSH.

Nu există nicio fizică cuantică în ceea ce privește stiva; doar pașii necesari spre succes. Stiva noastră este compusă din:

  • Utilizatori AWS și API AWS
  • Șablon de lansare AWS
  • Etichete AWS
  • Start minimalist bash script
  • Curling un script bash de la Github
  • Configurați variabile de gazdă Ansible din etichete
  • Furnizați gazda utilizând Ansible

AWS API și AWS Users

AWS oferă un control extrem de granular asupra serviciilor sale prin intermediul API-ului său și al utilizatorilor autorizați. API-ul poate fi accesat decent prin biblioteca Python boto3. Un precursor al utilizării API-ului este crearea utilizatorului relevant prin interfața IAM. Un utilizator este un ID tipic de acces al utilizatorului și o pereche secretă.

Un utilizator poate fi atașat la una sau mai multe politici. O politică constă dintr-un set de acțiuni permise sau refuzate asupra unui set de resurse.

Utilizatorul nostru spawn are atașată o politică cu acțiuni minimaliste pentru crearea instanței EC2 și acțiuni pentru citirea întregului set de resurse.

Șabloane de lansare

Una dintre caracteristicile cheie pe care ni le oferă AWS este Șabloanele de lansare.

Cu un șablon de lansare, puteți specifica un AMI de bază (identificatorul pentru imaginea mașinii virtuale pentru a construi o instanță din) și pre-configurați setări, inclusiv două componente esențiale: Tag-uri și un script Run. În plus, se poate specifica grupul de securitate din care ar trebui să aparțină aparatul.

Șabloanele de lansare pot fi versionate și instanțele pot fi lansate de la utilizatorul AWS.

Tags

Fiecare instanță EC2 este unică pe baza etichetelor cu care este configurat. Următoarele informații sunt trimise la nod:

  • Nume (identificator unic al nodului)
  • Clasă (tipul instanței)
  • Index ( poziția instanței)
  • Configurare (varietatea clusterului care poate fi instanțiat)
  • SHA (un Git SHA)
  • RegistrationIP (adresa IP a Tower de înregistrare)

Fiecare dintre aceste etichete este setată în ansamblurile Ansible hosts.

Bootstrapping with Bash

Scriptul bootstrap Bash pregătește gazda pentru aprovizionare. Unele dintre lucrările efectuate sunt instalarea unui mediu Python de bază, analizarea etichetelor AWS, scrierea acestora în fișierul Ansars gazdă Ansible și selectarea cărții de joc Ansible corespunzătoare pentru tipul de nod.

Ansible

În cele din urmă, nodul este aprovizionat cu Ansible. Nu voi divaga în Ansible, deoarece există suficiente alte resurse pe Internet. Nu este nimic special aici, cu excepția faptului că de obicei unul configurează un server la distanță cu Ansible, dar în cazul nostru, configurăm serverul local.

Turnul de înregistrare

Folosim un turn de înregistrare în locul unui Bootnode pentru a porni rețeaua. EV-urile își înregistrează adresele IP la instanțierea cu nodul de înregistrare, iar o listă de noduri statice este obținută înainte de activarea serviciului.

Avantajul utilizării unui astfel de Tower este că putem începe înregistrarea datelor arbitrare, cum ar fi statisticile de sănătate, ajutând la închiderea buclei de evaluare.

Când un EV este instanțiat, acesta scrie în API-ul de înregistrare, numele clusterului, adresa IP, indexul și tipul instanței.

Evaluare

Obiectivul principal al evaluării este determinarea modului în care experimentul a avut succes. Care sunt condițiile de succes vor fi abordate într-un alt articol. Cu toate acestea, o valoare imediată pentru a urmări cu atenție costul este.

Prețul pentru o instanță t2-micro este de 0,012 / oră. Costul efectuării a 96 dintre acestea timp de o oră ar trebui să fie doar de un dolar. Acest lucru poate fi confirmat în Cost Explorer.

Mai departe

Această stivă funcționează frumos. O singură comandă aduce în mod constant și fără cusur un Mainchain complet conectat și care propagă blocuri. Ceea ce îmi place cel mai mult la această stivă este că este foc și uită; Pot să instanțiez clusterul, să mă deconectez de la Internet și să fac jonglerii. Va fi un Mainchain pregătit pentru mine când mă voi întoarce.

Acest lucru servește drept o bază solidă pentru următorul nostru pas. Putem începe evaluarea diferitelor configurații ale ADN-ului nostru consens. Vom matura algoritmul nostru de consens simplu actual și vom evalua în raport cu realitatea brutală, în următorul nostru articol intitulat „Guvernare distribuită a mizei”.

Codul sursă pentru stiva Provisioning EV poate fi găsit aici: https://github.com/unification-com/ev-provision

Vino cu noi pe Unification Gitter: https://gitter.im/unification-com

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *