Jak jsme vytvořili 96 zvolených ověřovatelů

(Indika) (5. září, 2019)

Naposledy jsem publikoval článek, před pěti lety a měl název: Vaření webového serveru s kuchařem . Pět let je dlouhá doba, než psát. Není to tak, že bych o předmět ztratil zájem; místo toho jsem se tiše učil od nejlepších.

Předmět diskuse se však nezměnil, až na to, že je nyní o řád větší. V té době jsem vařil jediný webový server a nyní vytvářím 96 volených ověřovatelů (EV).

Proč 96?

Ve Sjednocení měníme základní konsenzuální algoritmus Ethereum. Naše implementace Distributed Stake Governance zahrnuje čtyři skupiny 24 EV, které se otáčejí dovnitř a ven z ověření bloku. Řízení těchto rotací usnadňuje proces hlasování a sázení. Konečným výsledkem je více distribuovaná síť konsorcia.

Teorie tohoto tématu na dokumentech white paper a v simulacích nás může dostat pouze doposud. Nejlepším způsobem, jak se posunout vpřed, je vyrobit ho, hrát si s ním a zažít jakékoli nedostatky.

Průběžné doručování

Chceme být schopni rychle vyhodnotit naše nápady. . Vývoj řízený testem se nemusí omezovat na psaní testů jednotek.

U libovolného daného Git SHA chceme roztočit jakoukoli verzi našeho Mainchainu provedením jediného příkazu, vyhodnotit jeho stav a poté provést zdokonalení jeho DNA.

Chceme tento proces neustále zdokonalovat, dokud nebudeme věřit, že máme něco připraveno k výrobě. Proces vývoje softwaru není nic jiného než tato jednoduchá iterace:

Čím složitější je systém, tím těžší je každá z těchto částí. Vytvoření instance 96 EV je netriviální problém a je předmětem tohoto článku.

Definice

Začneme definováním toho, co chceme nasadit. Instalovaný klastr se bude většinou skládat z EV, kde několik z nich má povoleno RPC a jiné ne. Klastr může také zahrnovat faucet UND, průzkumníka bloků a možná i monitorovací uzel.

Tyto klastry jsou specifikovány soubory JSON a může je zajišťovat účel zajišťovacího zásobníku.

Každý uzel v klastru potřebuje jedinečný popisovač a je zvoleno následující schéma adresování:

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

Například:

alpha-basic-ev-1

V výše uvedené slovo „základní“ označuje konfiguraci, ve které jsou čtyři EV a jeden průzkumník bloků. Slovo „alfa“ je název experimentu.

Zásobník

Mohli jsme jít s Kubernetes.

Chceme však také investovat do vytváření nástrojů, které může naše komunita použít ke spuštění vlastních EV. Vybrali jsme si Ansible kvůli jeho jednoduchosti a příručky, které se zaměřují na CentOS, budou fungovat na jakékoli architektuře nebo se dají snadno přizpůsobit.

Také, zatímco v minulosti jsem hodnotil jak kuchaře, tak loutku, Oba jsme se zbavili kvůli jednoduchosti Ansible. Šéfkuchař a Puppet potřebují softwarové komponenty na cílovém počítači, Ansible však potřebuje pouze připojení SSH.

Neexistuje zde žádná kvantová fyzika s ohledem na zásobník; jen nezbytné kroky k úspěchu. Náš zásobník se skládá z:

  • AWS Users and AWS API
  • AWS Launch Template
  • AWS Tags
  • Minimalistic bash startup skript
  • Zvlnění bash skriptu z Github
  • Konfigurace možných hostitelů vars ze značek
  • Poskytnutí hostitele pomocí Ansible

Uživatelé AWS API a AWS

AWS nabízí extrémně podrobnou kontrolu nad svými službami prostřednictvím svého API a oprávněných uživatelů. K API lze slušně přistupovat prostřednictvím knihovny Python boto3. Předchůdcem používání API je vytváření příslušného uživatele prostřednictvím rozhraní IAM. Uživatel je typický přístupový identifikátor uživatele a tajný pár.

Uživatel může být připojen k jedné z více zásad. Zásada se skládá ze sady povolených nebo zamítnutých akcí na sadě zdrojů.

Náš uživatel má připojenou zásadu s minimalistickými akcemi k vytvoření instance EC2 a akcemi ke čtení celé sady prostředků.

Spouštěcí šablony

Jednou z klíčových funkcí, které nám AWS poskytuje, je Launch Templates.

S Launch Template můžete určit základní AMI (identifikátor obrazu virtuálního stroje, ze kterého se má instance vytvořit) a předkonfigurovat nastavení, včetně dvou základních komponent: Značky a Run Script. Kromě toho lze určit skupinu zabezpečení, do které by měl počítač patřit.

Spouštěcí šablony lze upravovat podle verzí a instance lze spouštět od uživatele AWS.

Značky

Každá instance EC2 je jedinečná na základě značek, se kterými je nakonfigurována. Do uzlu jsou odeslány následující informace:

  • Název (jedinečný identifikátor uzlu)
  • Třída (typ instance)
  • Index ( pozice instance)
  • Konfigurace (různorodost clusteru, která má být vytvořena)
  • SHA (a Git SHA)
  • RegistrationIP (IP adresa Registrační věž)

Každá z těchto značek je nastavena ve variantách hostitele Ansible.

Bootstrapping s Bash

Boashstrap skript Bash připravuje hostitele pro zajišťování. Některé z prováděných úloh spočívají v instalaci základního prostředí Pythonu, analýze značek AWS, jejich zápisu do souboru Vars hostitele Ansible a výběru vhodného scénáře Ansible pro typ uzlu.

Možné

Nakonec je uzel zřízen pomocí Ansible. Nebudu se zabývat Ansible, protože na internetu je dostatek dalších zdrojů. Není zde nic zvláštního, kromě toho, že obvykle jeden konfiguruje vzdálený server pomocí Ansible, ale v našem případě konfigurujeme místní server.

Registrační věž

Používáme registrační věž namísto Bootnode k zavedení sítě. EV zaregistrují své IP adresy po vytvoření instance s registračním uzlem a před aktivací služby se získá seznam statických uzlů.

Výhodou použití takové věže je, že můžeme začít registrovat libovolná data, jako jsou zdravotní statistiky, což nám pomůže uzavřít smyčku vyhodnocení.

Když je instance vytvořena, zapíše se do registračního rozhraní API, je to název klastru, adresa IP, index a typ instance.

Hodnocení

Hlavním zaměřením hodnocení je určit, jak experiment byl úspěšný. Jakým podmínkám úspěchu se bude věnovat další článek. Okamžitou metrikou, kterou je třeba pečlivě sledovat, jsou však náklady.

Cena instance t2-micro je 0,012 / h. Náklady na provoz 96 z nich po dobu jedné hodiny by měly být pouze dolar. To lze potvrdit v Průzkumníku nákladů.

Dále

Tento zásobník funguje skvěle. Jediný příkaz důsledně a bezchybně přináší plně propojený a block-propagující Mainchain. Na tomto stacku se mi nejvíc líbí, že je oheň a zapomeň; Dokážu vytvořit instanci klastru, odpojit se od internetu a žonglovat. Až se vrátím, bude pro mě připraven mainchain.

To slouží jako silný základ pro náš další krok. Můžeme začít hodnotit různé konfigurace naší konsensuální DNA. Náš současný jednoduchý konsensuální algoritmus a vyhodnocení proti brutální realitě budeme matovat v našem dalším článku nazvaném „Distributed Stake Governance“.

Zdrojový kód zásobníku EV Provisioning najdete zde: https://github.com/unification-com/ev-provision

Připojte se k nám na Unification Gitter: https://gitter.im/unification-com

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *