Jak stworzyliśmy 96 wybranych weryfikatorów

(Indika) (5 września, 2019)

Ostatni raz, kiedy opublikowałem artykuł, pięć lat temu i nosił tytuł: Gotowanie serwera WWW z szefem kuchni . Pięć lat to dużo czasu, żeby nie pisać. Nie chodzi o to, że straciłem zainteresowanie tym tematem; zamiast tego po cichu uczyłem się od najlepszych.

Temat dyskusji jednak się nie zmienił, poza tym, że jest teraz o rząd wielkości większy. Wtedy gotowałem jeden serwer WWW, a teraz tworzę 96 Elected Verifiers (EV).

Dlaczego 96?

W Unification zmieniamy podstawowy algorytm konsensusu Ethereum. Nasze wdrożenie Distributed Stake Governance obejmuje cztery grupy po 24 pojazdy EV, które przechodzą do walidacji blokowej i poza nią. Zarządzanie tymi rotacjami jest ułatwione poprzez proces głosowania i obstawiania. Efektem końcowym jest bardziej rozproszona sieć konsorcjów.

Teoretyzowanie tego tematu na podstawie oficjalnych dokumentów i symulacji może nam zająć tylko tyle. Najlepszym sposobem na pójście naprzód jest wyprodukowanie go, zabawa z nim i doświadczanie wszelkich niedociągnięć.

Ciągła dostawa

Chcemy być w stanie szybko ocenić nasze pomysły . Programowanie sterowane testami nie musi ograniczać się do pisania testów jednostkowych.

Dla dowolnego Git SHA chcemy uruchomić dowolną wersję naszego Mainchain, wykonując pojedyncze polecenie, oceniając jego stan, a następnie udoskonalenia jej DNA.

Chcemy udoskonalać ten proces, dopóki nie uwierzymy, że mamy coś gotowego do produkcji. Proces tworzenia oprogramowania to nic innego jak prosta iteracja:

Im bardziej złożony staje się system, tym trudniejsza staje się każda z jego części. Tworzenie instancji 96 EV jest nietrywialnym problemem i jest tematem tego artykułu.

Definicja

Zaczynamy od zdefiniowania tego, co chcemy wdrożyć. Klaster z instancją będzie składał się głównie z pojazdów elektrycznych, przy czym kilka z nich ma włączoną obsługę RPC, a inne nie. Klaster może również zawierać kran UND, eksplorator bloków, a może nawet węzeł monitorujący.

Te klastry są określane przez pliki JSON, a cel stosu aprowizacji może to uczynić.

Każdy węzeł w klastrze potrzebuje unikalnego uchwytu, a wybrany jest następujący schemat adresowania:

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

Na przykład:

alpha-basic-ev-1

W w powyższym stwierdzeniu słowo „podstawowa” odnosi się do konfiguracji, w której znajdują się cztery pojazdy elektryczne i jeden eksplorator bloków. Słowo „alfa” to nazwa eksperymentu.

Stos

Moglibyśmy odejść z Kubernetesem.

Jednak chcemy też zainwestować w tworzenie narzędzi, których nasza społeczność może używać do uruchamiania własnych pojazdów elektrycznych. Wybraliśmy Ansible ze względu na jego prostotę, a podręczniki ukierunkowane na CentOS będą działać na dowolnej architekturze lub można je łatwo dostosować.

Ponadto, podczas gdy w przeszłości oceniałem zarówno Chef, jak i Puppet, ja Porzuciłem ich obu ze względu na prostotę Ansible. Chef i Puppet potrzebują komponentów oprogramowania na maszynie docelowej, jednak Ansible potrzebuje tylko połączenia SSH.

Nie ma tu fizyki kwantowej w odniesieniu do stosu; tylko niezbędne kroki do sukcesu. Nasz stos składa się z:

  • Użytkownicy AWS i AWS API
  • AWS Launch Template
  • AWS Tags
  • Minimalistyczne uruchamianie bash skrypt
  • Zawinięcie skryptu bash z Githuba
  • Konfiguruj zmienne hosta Ansible z tagów
  • Udostępnij hosta za pomocą Ansible

AWS API i AWS Users

AWS oferuje niezwykle szczegółową kontrolę nad usługami IT za pośrednictwem swojego API i uprawnionych użytkowników. Dostęp do API można uzyskać za pośrednictwem biblioteki Python boto3. Prekursorem korzystania z API jest utworzenie odpowiedniego Użytkownika za pomocą interfejsu IAM. Użytkownik to typowy identyfikator dostępu użytkownika i para tajna.

Użytkownik może być dołączony do jednej lub wielu polityk. Polityka składa się z zestawu dozwolonych lub zabronionych działań na zbiorze zasobów.

Nasz użytkownik spawn ma dołączoną politykę z minimalistycznymi akcjami tworzenia instancji EC2 i akcjami odczytu całego zestawu zasobów.

Uruchom szablony

Jedną z kluczowych funkcji, które daje nam AWS, są szablony uruchamiania.

Za pomocą szablonu uruchamiania można określić podstawowy AMI (identyfikator dla obrazu maszyny wirtualnej, z którego będzie budowana instancja) i wstępnie skonfigurować ustawienia, w tym dwa podstawowe składniki: tagi i skrypt uruchamiania. Dodatkowo można określić grupę bezpieczeństwa, do której powinien należeć komputer.

Uruchomienie szablonów może być wersjonowane, a instancje mogą być uruchamiane z poziomu użytkownika AWS.

Tagi

Każda instancja EC2 jest unikalna na podstawie tagów, z którymi jest skonfigurowana. Do węzła wysyłane są następujące informacje:

  • Nazwa (unikalny identyfikator węzła)
  • Klasa (typ instancji)
  • Indeks ( pozycja instancji)
  • Konfiguracja (różnorodność klastra, który ma zostać utworzony)
  • SHA (a Git SHA)
  • RegistrationIP (adres IP Registration Tower)

Każdy z tych tagów jest ustawiony w zmiennych hostów Ansible.

Bootstrapping with Bash

Skrypt startowy Bash przygotowuje hosta do obsługi administracyjnej. Niektóre z wykonywanych zadań to instalowanie podstawowego środowiska Pythona, analizowanie tagów AWS, zapisywanie ich w pliku vars hosta Ansible i wybieranie odpowiedniego playbooka Ansible dla typu węzła.

Ansible

Wreszcie, węzeł jest zaopatrzony w Ansible. Nie będę dygresować do Ansible, ponieważ w Internecie jest wystarczająco dużo innych zasobów. Nie ma tu nic specjalnego, poza tym, że zazwyczaj konfiguruje się zdalny serwer z Ansible, ale w naszym przypadku konfigurujemy serwer lokalny.

Registration Tower

Używamy Registration Tower zamiast Bootnode do załadowania sieci. EV rejestrują swoje adresy IP po utworzeniu instancji w węźle rejestracyjnym, a lista statycznych węzłów jest uzyskiwana przed aktywacją usługi.

Zaletą korzystania z takiej wieży jest to, że możemy zacząć rejestrować dowolne dane, takie jak statystyki zdrowia, pomagając zamknąć pętlę oceny.

Podczas tworzenia instancji EV zapisuje do API Registration nazwę klastra, adres IP, indeks i typ instancji.

Ocena

Głównym celem oceny jest określenie, w jaki sposób udany eksperyment był. Warunki sukcesu zostaną omówione w innym artykule. Jednak natychmiastową miarą, którą należy uważnie obserwować, jest koszt.

Cena instancji t2-micro wynosi 0,012 / godz. Koszt uruchomienia 96 z nich przez godzinę powinien wynosić tylko dolara. Można to potwierdzić w Eksploratorze kosztów.

Dalej

Ten stos działa pięknie. Jedno polecenie konsekwentnie i bezbłędnie wywołuje w pełni połączony i propagujący blok Mainchain. Najbardziej podoba mi się w tym stosie to, że jest to ogień i zapomnij; Mogę utworzyć instancję klastra, odłączyć się od Internetu i żonglować. Kiedy wrócę, będzie gotowy dla mnie Mainchain.

To stanowi mocną podstawę dla naszego następnego kroku. Możemy zacząć oceniać różne konfiguracje naszego zgodnego DNA. Będziemy dojrzewać nasz obecny prosty algorytm konsensusu i oceniać go pod kątem brutalnej rzeczywistości, w następnym artykule zatytułowanym „Distributed Stake Governance”.

Kod źródłowy stosu zaopatrzenia EV można znaleźć tutaj: https://github.com/unification-com/ev-provision

Dołącz do nas na Unification Gitter: https://gitter.im/unification-com

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *