Jak postavit svou vlastní Infuru na AWS pomocí frameworku bez serveru

V jednom z předchozích článků jsme demonstrovali, jak na AWS spustit jediný paritní uzel mainnetu. V mnoha případech bude stačit jeden paritní uzel, jistě překoná potřebu spoléhat se na externí veřejnou infrastrukturu, jako je Infura.

Nevýhody, které mají pouze jeden uzel

V mnoha situacích však jeden uzel prostě nestačí. Dokážu vymyslet několik důvodů, proč budete potřebovat více než jeden uzel.

  1. Prostoje. Pokud z nějakého důvodu musí být uzel odstraněn kvůli údržbě, nezůstane žádný uzel. Pokud například bude třeba upgradovat verzi Parity, dojde k prostojům.
  2. Padající synchronizace. Parita je skvělá, ale ne bezchybná. To může občas vypadnout ze synchronizace z různých důvodů. S více uzly nám umožňuje dočasně přesměrovat provoz z uzlů, které zaostaly, a dotazovacích uzlů, které jsou synchronizovány.
  3. Rozložení zátěže. Na json-rpc existuje pouze určitá úroveň požadavků / sekundu, kterou může udržet jediný paritní uzel. Rozhraní Json-rpc se na této úrovni stává pomalým a paritní uzel vypadává ze synchronizace. To je obzvláště důležité, pokud jsou uzly používány z rozhraní a čísla webového rozhraní DAPP a můžete pozorovat denní špičky v zapojení uživatelů.

Infrastruktura jsonrpc-proxy

Velký obrázek toho, co proxy dělá, je následující:

  1. V URL DynamoDB by měl být veden seznam URL out paritního uzlu. K dispozici je také speciální adresa URL nazvaná leader, která ukazuje na Infuru.
  2. eth_getBlockNumber by měl být spuštěn na každém uzlu ze seznamu každých 60 sekund. Výsledek je porovnán s vůdcem. Aby byl uzel považován za zdravý, musí reagovat a nesmí být více než 10 bloků za Infurou. Zdravotní stav každého uzlu je uložen do DynamoDB.
  3. Změna zdravotního stavu jakéhokoli uzlu spustí regeneraci proxy konfigurace. Konfigurace proxy je jednoduše soubor .conf nginx, který konfiguruje službu proti proudu, která vyrovnává zatížení mezi našimi uzly. Pokud není žádný z našich uzlů zdravý, vygenerovaná konfigurace prohlásí všechny požadavky na záložku Infura asa. Konfigurační soubor se nahraje do kbelíku S3.
  4. Nahrání konfiguračního souboru do kbelíku S3 spustí aktualizaci služby ECS, která spouští kontejner nginx s generovanou konfigurací.

Monitorovací uzly

Výhodou používání služeb AWS je to, že přicházejí s výchozími metrikami již po vybalení

Požadavky za sekundu

Pomocí vestavěných metrik ELB vidíme brakedown žádostí přicházejících na proxy za kódy stavu odpovědi.

Latness to Infura

Zásobník jsonrpc-proxy také tlačí vlastní metriky, které ukazují rozdíl mezi číslem každého uzlového bloku a infurou.

Počet zdravých uzlů

Další vlastní metrika ukazuje počet zdravých uzlů.

Tato metrika je velmi užitečná pro nastavení alarmu CloudWatch.

Nasazení vlastního jsonrpc-proxy

Kód našeho řešení najdete v repozitáři git.

Sestavte ECR kontejner s nginx

Naše služba provozuje kontejner nginx v klastru ECS, který stahuje svou konfiguraci z kbelíku S3. Obrázek této služby musí být na některém účtu AWS k dispozici jako jsonrpc-proxy. Můžete vytvořit a nahrát obrázek pomocí následujících příkazů:

$ cd docker
$ AWS_DEFAULT_PROFILE = yourProfileName bash -x build_and_upload.sh

Tím vytvoříte úložiště ECR, vytvoříte obrázek a zatlačíte jej. Ve výsledku uvidíte ARN vytvořeného úložiště ECR, které musíte vložit do konfiguračního souboru v dalším kroku.

Výše uvedené předpokládá, že pro přístup z příkazového řádku používáte pojmenované profily. Pokud používáte tokeny relace, přeskočte část profilu.

Vytvořte konfigurační soubor

Zásobník se provádí tak, že znovu používá externí zdroje, které musí být předány jako parametr v konfiguračním souboru. Můžete začít vytvořením vlastního konfiguračního souboru z poskytnuté šablony:

$ cd služby
$ cp config.yml.sample config.dev.yml # toto předpokládá `dev` jako jméno fáze, které bude použito později

Upravte soubor a určete uvnitř:

  • VPC, na kterém běžíte a podsítě ID soukromých podsítí
  • Seznam skupin zabezpečení umožňujících přístup do všech paritních uzlů
  • ECS Cluster a Application Load Balancer. Zásobník nevytváří ani vlastní klastr ani vyrovnávač zátěže, protože obvykle nebudete chtít platit za vyhrazené prostředky, jen aby se uvnitř spustil nginx. Vezměte prosím na vědomí: je nutné, aby byl do skupin zabezpečení přidán cluster ECS, který mu umožní přístup k paritním uzlům
  • ERC Image ARN vytvořeno v předchozím kroku

Nasazení zásobníku

Budete muset mít na svém počítači nainstalován server bez serveru.

npm install -g serverless

Než budete muset nainstalovat závislosti na zásobníku:

služby CD
Npm instalace

Jakmile to provedete, můžete implementovat zásobník do svého účtu AWS:

$ AWS_DEFAULT_PROFILE = yourProfileName sls nasadit -s dev

Nakonec je třeba nakonfigurovat DNS tak, aby název používaný zásobníkem směřoval do aplikace Load Load Balancer.

Přidejte uzly ke sledování

Dalším krokem je vlastně říct proxy, které uzly mají sledovat:

Pokud vše funguje dobře za minutu, měli byste mít možnost vidět, že monitorování začíná a že uzly jsou nyní zdravé: