En kort oversikt over Blockchain-testing og benchmarking-verktøy

En kort oversikt over Blockchain-testing og benchmarking-verktøy

I dag er løsninger for testing og benchmarking av blokkjeder skreddersydd til en spesifikk blokkjede eller dens gafler. Men det er også flere mer generelle løsninger som er forskjellige i funksjonalitet: noen av dem er åpen kildekode-prosjekter, andre leveres som SaaS, men de fleste er interne løsninger laget av blockchain-utviklingsteamet. Imidlertid løser de alle lignende problemer. I denne artikkelen prøvde jeg å kort gjennomgå flere produkter designet spesielt for testing av blokkjeder.

Driften av et blokkjedenettverk ligner driften av en distribuert database, så lignende verktøy og metoder kan brukes til testing. For bedre å forstå hvordan distribuerte databaser testes, ta en titt på et godt utvalg av ressurser og artikler derav. For eksempel er latens sortert i biter i denne artikkel, og for å forstå hvordan de ser etter feil i replikeringsalgoritmer, anbefaler jeg å lese dette artikler.

Jeg vil beskrive flere populære løsninger for testing og benchmarking av blokkjeder. Jeg ville være glad hvis du i kommentarene beskriver andre nyttige programvareprodukter for å løse de samme problemene.

En kort oversikt over Blockchain-testing og benchmarking-verktøy

Jeg starter med et verktøy som, selv om det ikke er laget spesielt for blokkjeder, lar deg effektivt teste driften deres, forutsatt at det er et allerede kjørende nettverk du kan eksperimentere på. Den viktigste faktoren for påliteligheten til et distribuert system er muligheten til å fortsette å jobbe ved problemer med servere og nettverk. Dette kan være nettverksforsinkelser, diskfullhet, utilgjengelighet av eksterne tjenester (DNS), maskinvarefeil og hundrevis av andre årsaker. For å sjekke stabiliteten til alle systemer som opererer sammen på et stort antall systemmaskiner, kan du bruke gremlin. Den bruker en ekstremt effektiv tilnærming kalt Chaos Engineering.

Ved å bruke sin egen nettverksagent skaper Gremlin mange forskjellige typer problemer på det nødvendige antallet maskiner: nettverkslag, overbelastning av enhver ressurs (CPU, disk, minne, nettverk), deaktiverer individuelle protokoller, etc. For blokkjeder kan Gremlin brukes på testnett-servere, emulere virkelige problemer og observere oppførselen til nettverket. Med den kan utviklere og administratorer observere i et kontrollert miljø hva som vil skje hvis systemet krasjer eller når koden oppdateres. I dette tilfellet må nettverket konfigureres og distribueres på forhånd, samt konfigureres for å samle inn nødvendige beregninger.

Gremlin er et praktisk verktøy for arkitekter, devops og sikkerhetsspesialister og en universell løsning for å teste alle ferdiglagde og kjørende distribuerte systemer, inkludert blokkjeder.

En kort oversikt over Blockchain-testing og benchmarking-verktøy

Hyperledger Caliper er en mye mer spesialisert løsning Hyperledger Caliper. For øyeblikket støtter Caliper flere blokkjeder samtidig - representanter for Hyperledger-familien (Fabric, Sawtooth, Iroha, Burrow, Besu), samt Ethereum og FISCO BCOS-nettverket.

Ved å bruke Caliper kan du stille inn topologien til blokkjedenettverket og kontrakter for testing, samt beskrive konfigurasjonen av noden. Blockchain-noder heves i docker-containere på én maskin. Deretter kan du velge det nødvendige testkonfigurasjoner og motta en fil med en rapport om testresultatene etter lansering. En fullstendig liste over Caliper-målinger og benchmarking-tilnærming finner du her Hyperledger Blockchain-ytelsesmålinger, dette er en flott artikkel hvis du er interessert i emnet blockchain benchmarking. Du kan også sette opp metrikksamling i en egen Prometheus/Grafana.

Hyperledger Caliper er et verktøy rettet mot utviklere og systemarkitekter, siden det gir testrepeterbarhet og automatisering av testing og benchmarking. Den brukes i utviklingen av kjernen av blokkjeder: konsensusalgoritmer, en virtuell maskin for å behandle smarte kontrakter, et peer-to-peer-lag og andre systemmekanismer.

En kort oversikt over Blockchain-testing og benchmarking-verktøy

MixBytes Tank er et verktøy som dukket opp i prosessen med å utvikle konsensus- og finalitetsalgoritmer for EOS-baserte nettverk og teste parakjeder basert på Parity Substrate (Polkadot). Når det gjelder funksjonalitet, er den nær Hyperledger Caliper, da den lar deg samle inn viktige beregninger fra noder til et hvilket som helst distribuert system og klientmaskiner som testskript kjører på.

MixBytes Tank bruker flere skytjenester (Digital Ocean, Google Cloud Engine, etc.), der den kan starte mange noder, utføre foreløpige konfigurasjonsprosedyrer, kjøre flere benchmarks parallelt på forskjellige maskiner, samle inn nødvendige beregninger og automatisk slå av Nettverk.

MixBytes Tank lar deg spare penger på skyservere ved automatisk å minimere unødvendige ressurser etter en test. Et annet særtrekk er bruken av Molecule-pakken, som lar utvikleren teste utplasseringen av ønsket blokkjede lokalt.

MixBytes Tank lar deg tidlig oppdage flaskehalser og feil i algoritmer som oppstår i ekte nettverk med et stort antall geografisk distribuerte servere og klienter. Tanken vil hjelpe deg å forstå hva som vil skje på nodene hvis klienter sender transaksjoner med en gitt tps under svært repeterbare forhold og med et reelt antall noder spredt over forskjellige kontinenter, om nødvendig.

En kort oversikt over Blockchain-testing og benchmarking-verktøy

Whiteblock Genesis er en testplattform for Ethereum-baserte blokkjeder. Dette verktøyet har ganske bred funksjonalitet: det lar deg starte et nettverk, opprette det nødvendige antallet kontoer i det, øke det nødvendige antallet klienter, konfigurere nettverkstopologien, spesifisere båndbredde og pakketap-parametere og kjøre en test.

Whiteblock Genesis tilbyr sine egne testfasiliteter. Utviklere trenger bare å spesifisere testparametere, kjøre dem ved hjelp av en ferdig API og få resultater ved hjelp av et praktisk dashbord.

Whiteblock Genesis lar deg konfigurere en ganske detaljert test som plattformen automatisk vil utføre for hver vesentlig kodeendringer. Dette vil tillate deg å fange opp feil på et tidlig stadium og umiddelbart vurdere virkningen av endringer på viktige nettverksparametere, for eksempel transaksjonshastighet og ressurser som forbrukes av noder.

Madt

Et annet interessant ungt produkt for testing av distribuerte systemer er madt. Den er skrevet i Python og lar deg lage den nødvendige nettverkstopologien og det nødvendige antallet servere og klienter ved å bruke et enkelt konfigurasjonsskript (eksempel). Etter dette distribuerer tjenesten nettverket i flere Docker-beholdere og åpner et webgrensesnitt der du kan observere meldinger fra servere og klienter i nettverket. Madt kan brukes til å teste blokkkjeder - prosjektlageret har en p2p-nettverkstest basert på Kademlia-protokollen, der forsinkelser i levering av data til noder gradvis økes og statusen til disse dataene sjekkes.

Madt har bare nylig dukket opp, men med sin svært fleksible arkitektur kan den utvikle seg til et funksjonelt produkt.

Andre løsninger

Nesten enhver testing av systemdelen av blokkjeder krever å kjøre foreløpige skript, forberede kontoer og betingelser for testen (dette kan være testing av konsensusfeil som kan generere mange kjedegafler, testing av hardgaffel-scenarier, endring av systemparametere, etc.). Alle disse manipulasjonene utføres forskjellig i ulike blokkkjeder, så det er lettere for team å gradvis tilpasse produkttesting og benchmarking til intern CI/CD og bruke sine egne utviklinger, som gradvis blir mer komplekse etter hvert som funksjonaliteten til blokkjeden utvikler seg.

Likevel kan bruk av ferdige løsninger redusere testtiden for disse teamene kraftig, så jeg tror at denne programvaren vil bli aktivt utviklet i årene som kommer.

Konklusjon

For å avslutte denne korte anmeldelsen, vil jeg liste opp flere viktige egenskaper ved testverktøy for blokkjede:

  • Evnen til automatisk å distribuere et blokkjedenettverk under repeterbare forhold. Denne faktoren er viktig når man utvikler systemdeler av blokkjeder: konsensusalgoritmer, finalitet, systemsmarte kontrakter.
  • Kostnaden ved å eie systemet, ressursene som brukes og bekvemmeligheten for konstant bruk. Denne faktoren gir prosjektet høykvalitetstester for lite penger.
  • Fleksibilitet og enkelhet i testkonfigurasjonen. Denne faktoren øker sjansene for å identifisere systemproblemer - det er mindre sjanse for å gå glipp av noe viktig.
  • Tilpasning for spesifikke typer blokkjeder. Å utvikle en løsning basert på en eksisterende kan i stor grad forbedre kvaliteten og redusere tidskostnadene.
  • Bekvemmelighet og tilgjengelighet for oppnådde resultater og deres type (rapporter, beregninger, grafer, logger, etc.). Dette er helt nødvendig hvis du vil spore historien til et produkts utvikling, eller hvis du trenger dype analyser av oppførselen til blokkjedenettverket.

Lykke til med testingen og måtte blokkjedene dine være raske og feiltolerante!

Kilde: www.habr.com

Legg til en kommentar