Nelietojiet saņemt forked: labākā prakse, kā rīkoties ar Konstantinopoli un Ethereum klientu jauninājumiem

Programmatūras atjauninājumi neatkarīgi no tā, vai novērst drošības kļūdas, novērst kļūdas vai pievienot jaunas funkcijas, parasti ir laba lieta lietojumprogrammām, kuras mēs izmantojam ikdienā, un mēs divreiz nedomājam par to piemērošanu. Bet pamatinfrastruktūras atjauninājumi var būt arī biedējoši, ja tie ievieš izmaiņas vai neparedzētu uzvedību atkarīgās lietojumprogrammās vai citos gadījumos, ja savlaicīga atjaunināšana var izraisīt pārrāvumus. Šī problēma ietekmē mazas un lielas vienības, un blokķēde nav izņēmums.

Uzņēmumā Alchemy mēs klientiem piedāvājam uzticamus, mērogojamus un ātrus Ethereum infrastruktūras pakalpojumus, lai viņiem nebūtu jācīnās par mezglu uzturēšanu un viņi var koncentrēties uz savu lietojumprogrammu izveidi. Darba laikā mēs esam iemācījušies daudzas mācības (dažreiz smago ceļu!) Par to, kā vislabāk rīkoties ar tīkla dakšām un klientu atjauninājumiem. Ar gaidāmo Konstantinopoles cieto dakšiņu mēs domājām, ka šī būs lieliska iespēja dalīties ar mūsu labāko praksi.

Šis ir pirmais no daudziem emuāra ierakstiem, ko mēs rakstīsim par Ethereum infrastruktūras darbību uzticamā, izpildāmā un mērogojamā veidā.

Konstantinopole

Konstantinopols ir nākamais Ethereum jauninājums visā sistēmā, un tas ieviesīs piecus EIP, kas faktiski ir daļa no lielāka ceļazīmes uz Ethereum 2.0. Tur ir daudz ziņu, kurās tiek apspriestas konkrētās izmaiņas, taču galvenais ir atzīmēt, ka tā kā šī nav strīdīga cietā dakša, kopiena pieņems jauno dakšiņu, padarot žetonus un citus stāvokļus neatjauninātos mezglos bezvērtīgus.

Kā tas ietekmē jūs?

Dapp izstrādātājiem galvenais atņemšanas process ir tāds, ka jums būs jāatjaunina savs mezgls uz saderīgu ar Konstantinopoles versiju, vai arī tas būs nesaderīgs ar pārējo tīkla iepriekšējo bloku 7 080 000. Ethereum klienti, visticamāk, būs informēti par ķēdes cietajām dakšām un laida stabilu, savietojamu klienta versiju krietni pirms paredzamā dakšas datuma, piem. geth un paritāte. Ja jūs pārvaldāt savu Ethereum klienta mezglu, jums vajadzētu atjaunināt ethereum klientu uz versiju, kas ir saderīga ar cieto dakšiņu; paritāte būtu 2.1.10 stabila vai augstāka, un geth būtu 1.8.20 vai augstāka.

Cietās dakšas atjauninājumiem vajadzētu būt maziem un tālu, taču Ethereum klienta atjauninājumi var būt daudz biežāki. Ja jūs izmantojat pakalpojumu, kas atkarīgs no ķēdes, klienta atjaunināšana var būt noderīga, lai novērstu drošības nepilnības vai piesaistītu jaunu funkcionalitāti. Tomēr jums jābūt uzmanīgam, lai savā pieteikumā neieviestu neparedzētas problēmas.

Labākā pieredze

Ja izmantojat pakalpojumu, kas prasa regulāru mijiedarbību ar Ethereum blokķēdi, pāris galvenās paraugprakses ietaupīs jūs no iespējamām katastrofiskām kļūdām, kad atjaunināsit mezglus. Mēs apskatīsim dažus reālās dzīves scenārijus, kad atjauninājumi ir kļuvuši slikti, kas bija šī emuāra ziņojuma stimuls.

Vairāku mezglu vadīšana

Mēs ļoti iesakām darbināt vairākus mezglus kā vispārēju labāko praksi iekšējās Ethereum infrastruktūras uzturēšanai daudzo priekšrocību, tostarp paaugstinātas uzticamības un mērogojamības dēļ. Tomēr tas jūsu sistēmā var ieviest konsekvences un idempotences problēmas, kuras mēs apskatīsim nākamajā emuāra ierakstā.

Runājot par atjauninājumiem, vairāku mezglu darbināšana nodrošina dažas papildu priekšrocības:

  1. Papildu mezgli kalpo kā dublējumi gadījumā, ja atjauninājums noiet greizi un padara mezglu neatjaunojamu
  2. Augsta pieejamība un bez dīkstāves mezglu atjaunināšanas laikā
  3. Ļauj veikt regresijas pārbaudi, kas salīdzina atjauninātos mezglus ar sākotnējiem mezgliem, lai nodrošinātu paredzamo uzvedību

Neatjaunojama mezgla scenārijā jauna pilna arhīva mezgla pilnīga sinhronizēšana var aizņemt līdz divām nedēļām. Bez rezerves kopijas tas ir nepieņemami daudz dīkstāves.

1. piemērs: Buggy DB migrācija

Viena problēma, kuru mēs redzējām, pārveidojot paritāti no 1.X.X uz 2.X.X, bija korupcija datu bāzē. Atjauninājumā tika iekļauta iekšēja DB migrācija, kas nepareizi pārveidoja bloku numurus bloom filtrā, kā rezultātā vēsturisko bloku getLog pieprasījumu rezultāti bija tukši. Datu zaudēšana bija neatgriezeniska, tāpēc mezglu nevarēja glābt. Mums bija paveicies to panākt, veicot iekšēju testēšanu kanāriju mezglā, rezerves mūsu neatjauninātajiem mezgliem, lai uzturētu mūsu sistēmas, un gaidām, kamēr paritātes komanda 2.2.3-beta versijā atrisinās šo problēmu.

Stingra regresijas pārbaude

Jebkurām jūsu sistēmas izmaiņām vienmēr ir stingri ieteicama stingra pārbaude. Šajā sakarā, atjauninot mezglus, jūs vēlēsities pārbaudīt, lai pārliecinātos, ka jūsu lietojumprogramma un infrastruktūra turpina darboties, kā paredzēts. Pretējā gadījumā jūsu lietotāji un sistēmas var tikt pakļauti pārtraukumiem. Ja darbojas vairāki mezgli, labākais veids, kā to garantēt, ir iepriekšējo stabilo mezglu pārbaude pret atjauninātu kanārijmezglu. Ja tiek atklātas pārrāvuma izmaiņas, pirms pārējā klastera atjaunināšanas pārliecinieties, vai jūsu sistēmas var ar tām droši rīkoties.

Attiecībā uz regresijas testiem mēs ejam tieši pie avota, atkārtojot ražošanas pieprasījumus pret saviem mezgliem. To var izdarīt manuāli, veicot vienreizējas pārbaudes, taču, tā kā mēs atbalstām tik daudz projektu, mēs esam izveidojuši plašu automatizētu testēšanas sistēmu, kurā tiek atlasīti nesenie tiešraides pieprasījumi, atkārtoti tie dažādās klientu versijās un salīdzināti rezultāti. Tas ļauj mums pārbaudīt, vai mūsu kods var droši mijiedarboties ar atjauninātajiem mezgliem pirms nosūtīšanas uz ražošanu. Šo sistēmu var izmantot arī regresijas testiem, veicot iekšējā koda izmaiņas.

2. piemērs: reakcijas izvades formāta maiņa

Šī bija interesanta problēma, ar kuru mēs saskārāmies, jo tikko atjauninātais klients sniedza atšķirīgu atbildi par EVM izpildes kļūdu. Paritātes 1.11.1-beta versija sniedza atbildi, kas izskatījās šādi:

{“Jsonrpc”: “2.0”, “kļūda”: {“kods”: - 32015, “ziņojums”: “VM izpildes kļūda.”, “Dati”: “Atgriezts 0x”}, “id”: 1}

Tā vietā, lai saņemtu atbildes no iepriekšējām versijām, kas izskatījās šādi:

{“Jsonrpc”: “2.0”, “id”: 1, “rezultāts”: “0x”}

Atbildes formāta maiņa patiesībā ir izdevīga, jo izsaucējam izsauc sīkāku izpildes informāciju, nevis klusējot neizdodas, bet var izraisīt problēmas, ja kods nav iestatīts tā apstrādei. Šajā scenārijā atbilžu rezultātu salīdzināšana piemeklēja izmaiņas, un mēs vienkārši atjauninājām savas sistēmas un brīdinājām klientus, lai viņus neuztrauc jaunā reakcija un viņi varētu atjaunināt savus pakalpojumus, lai būtu saderīgi.

Veidojiet tālāk!

Mēs ceram, ka tas bija noderīgi un ka šī paraugprakse nākotnē mezglu atjauninājumus padarīs jums nesāpīgus. Viņi mums ir palīdzējuši nodrošināt, ka atjauninājumi vienmēr notiek vienmērīgi gan mūsu pašu sistēmām, gan klientiem, kas paļaujas uz mums. Mēs zinām, cik sarežģītas var būt mezglu uzturēšanas un mērogošanas sarežģītības, un mēs vēlamies izplatīt gadu gaitā gūto pieredzi.

Ja strādājat pie Ethereum projekta un nevēlaties tikt galā ar mezglu uzturēšanas pieskaitāmām izmaksām, aprunājieties ar mums! Alķīmija nodrošina ātrāko, mērogojamāko un visuzticamāko Ethereum infrastruktūru kā pakalpojumu, lai jūs varētu koncentrēties uz sava produkta veidošanu. Zem motora pārsega Alchemy ir izveidojusi revolucionāri jaunu infrastruktūru, kas jau darbojas tādos top blockchain projektos kā Augur, top blockchain uzņēmumos, piemēram, CryptoKitties, un augstākajos riska ieguldījumu fondos (pārvaldot vairāk nekā USD 3 miljardus). Uzziniet vairāk vietnē alchemyapi.io.