Skip to content

Զիզանամիի հետ քաոսային փորձարկում

Izanami- ը քաոսային ցանցի նվագախմբողն է վերածառային Iroha աշխատանքային տարածքում: Այն սկսում է մեկ անգամ օգտագործվող տեղական Iroha կլաստերը, ներկայացնում է կազմաձեւելի աշխատանքային բեռնվածք եւ սխալներ ներարկում ընտրված զուգընկերներին, որպեսզի օպերատորները կարողանան ստուգել, թե արդյոք ցանցը շարունակում է առաջընթաց կատարել վերահսկվող ձախողության դեպքում.

Օգտագործեք Izanami- ն նախապատրաստական դիմացկունության ստուգումների, ռեգրեսիոն վերարտադրման եւ կոնսենսուսային կարգավորման համար: Մի ուղղեք այն արտադրական ցանցի վրա. գործիքն նախագծված է պատկանելու այն զուգընկերներին, որոնք այն սկսում է, ներառյալ զուգընտրական վերսկսումը, պահեստային զամբյուղները, արհեստական փաթեթների կորուստը եւ տեղական CPU կամ սկավառակային ճնշումը:

Նախադրյալներ

Գործարկել Izanami- ն Iroha աղբյուրային պահեստից , այլ ոչ թե այս փաստաթղթերի պահեստից.

bash
git clone https://github.com/hyperledger-iroha/iroha.git
cd iroha
cargo build -p izanami

Բինարային համակարգը պետք է բացարձակապես թույլատրվի ստեղծել եւ մանիպուլյացիոն ցանցային զուգընկերներ: Անցրեք --allow-net յուրաքանչյուր ոչ-TUI գործարկման համար, կամ կարողացրեք allow_net ՝ TUI

bash
cargo run -p izanami -- --allow-net --peers 4 --faulty 1 --duration 120s

Ինտերակտիվ գործարկման կոնֆիգուրացիայի համար.

bash
cargo run -p izanami -- --tui --allow-net

Izanami- ն մնում է TUI եւ CLI կարգավորումները օգտագործողի կազմաձեւման ցուցակի ներքո, այնպես որ վերանայեք ցուցադրված կարգավորումները նախորդ պրոֆիլը կրկին օգտագործելուց առաջ.

Հիմնական գիծը

Սկսեք մեկ վերարտադրելի ելակետից, նախքան ծանր սխալների ավելացումը.

bash
cargo run -p izanami -- \
  --allow-net \
  --peers 4 \
  --faulty 1 \
  --duration 5m \
  --target-blocks 100 \
  --progress-interval 15s \
  --progress-timeout 120s \
  --latency-p95-threshold 2s \
  --tps 15 \
  --max-inflight 32 \
  --submitters 1 \
  --seed 42

Այս ընթացքը հաջողվում է միայն այն դեպքում, եթե կլաստերը հասնում են պահանջված բլոկի նպատակին, շարունակում են առաջընթաց կատարել ժամանակահատվածում եւ մնում են p95 ընտրական բլոկային միջակայքի շեմից ցածր:

Գրանցեք հրամանը, սերմը, Iroha պարտավորությունը, զուգընկերների քանակը, սխալ զուգընկերի քանակը, աշխատանքային բեռի պրոֆիլը, թիրախը TPS եւ լատենցիայի շեմը օրագրերի հետ: Առանց այդ արժեքների մեկ այլ օպերատոր չի կարող կրկնել նույն ձախողման ձեւակերպումը.

Աշխատանքային բեռնվածության պրոֆիլներ

Izanami- ն ունի երկու աշխատանքային բեռի պրոֆիլներ.

ՊրոֆիլՕգտագործեք այնՆշումներ
stableԵրկար ցրտային երթեւեկություն եւ կրկնվող կատարողականի ստուգումներԱնդրադառնում է կատարման անվտանգ բաղադրատոմսերին:
chaosՉափազանցության ուղու ապահովումՆերառում է միտումնավոր անվավեր բաղադրատոմսեր

Նախ օգտագործեք կայուն պրոֆիլը.

bash
cargo run -p izanami -- --allow-net --workload-profile stable --seed 42

Փոխեք քաոսային պրոֆիլին, երբ արդեն հասկացված է հիմնական գիծը.

bash
cargo run -p izanami -- --allow-net --workload-profile chaos --seed 42

Պայմանագրային տեղակայման բաղադրատոմսերը անջատվում են կայուն երթեւեկություններում, եթե բացարձակապես թույլատրված չէ.

bash
cargo run -p izanami -- \
  --allow-net \
  --workload-profile stable \
  --allow-contract-deploy-in-stable

Օգտագործել --nexus, երբ գործարկումը պետք է օգտագործի ներկառուցված SORA Nexus նախապայմանները վերածնային աշխատանքային տարածքից:

Սխալների վերահսկողություն

Երբ --faulty-ը մեծ է զրոյից, պետք է ակտիվացվի առնվազն մեկ սխալ սցենար: Սխալը փոխանցում է նախընտրականին եւ կարող է անջատել բուլյան դրոշները ՝ օգտագործելով =false.

ՀանցանքCLI դրոշԻնչ է այն անում
Կործանում եւ վերագործարկում--fault-enable-crash-restartՊարբերական գործընթացի կորուստ եւ վերականգնում
Սրբեք պահեստը եւ վերսկսեք--fault-enable-wipe-storageԳործազրկված տեղական պետությունից վերականգնումը
Թույլատրելի գործարքի սփամ--fault-enable-spam-invalid-transactionsընդունման եւ մերժման ուղիները
Համացանցի ուշացում--fault-enable-network-latencyդանդաղ կատակերգություն եւ հետաձգված համաձայնության ուղերձներ
Համացանցի բաժանում--fault-enable-network-partitionԺամանակավոր վստահելի զուգընկերների մեկուսացում
P2P փաթեթների կորուստ--fault-enable-network-packet-lossՀավելվածների շրջանակի երթեւեկությունը նվազեց
CPU սթրես--fault-enable-cpu-stressՏեղական վավերացման եւ ժամանակացույցի ճնշման
Դիսքի լեցունությունը--fault-enable-disk-saturationՏեղային պահեստավորման ճնշում

Միայն փաթեթների կորուստի համար:

bash
cargo run -p izanami -- \
  --allow-net \
  --peers 20 \
  --faulty 5 \
  --duration 800s \
  --fault-window-start 133s \
  --fault-window-end 266s \
  --tps 200 \
  --submitters 20 \
  --max-inflight 512 \
  --fault-enable-crash-restart=false \
  --fault-enable-wipe-storage=false \
  --fault-enable-spam-invalid-transactions=false \
  --fault-enable-network-latency=false \
  --fault-enable-network-partition=false \
  --fault-enable-network-packet-loss=true \
  --fault-enable-cpu-stress=false \
  --fault-enable-disk-saturation=false \
  --fault-network-packet-loss-percent 75 \
  --seed 42

Օգտագործեք --fault-window-start եւ --fault-window-end ՝ նախքան եւ հետո ներարկված անջատման վերահսկվող կայուն վիճակի ժամանակահատվածը պահպանելու համար: Սա հեշտացնում է մեկնարկային աղմուկը տարբերել սխալի ազդեցությունից:

Սցենարի ձեւեր

Upstream Izanami կատալոգը քարտեզավորում է բլոկչեյնային հաղորդակցության ձախողման սովորական ձեւերը CLI պրոֆիլների: Կարող եք դրանք մոդելավորել նույն դրոշներով.

ՍցենարՏիպիկ ձեւ
Նպատակված բեռը--faulty 0, բարձր --tps, մեկ ներկայացուցիչ, մեծ --max-inflight
Պահանջական ձախողումԱջակցել կործանում / վերագործարկում միայն սահմանված խափանման պատուհանի մեջ
Փաթեթների կորուստՀնարավորացնել միայն փաթեթների կորուստը, սովորաբար կանխատեսված 75%-ի կորստի մակարդակով
Դադարեցնել եւ վերականգնելՕգտագործեք խոշոր պրոֆեսիոնալ փաթեթներ, որոնք կործանում են / վերսկսվում են
Առաջնորդների մեկուսացումՕգտագործեք ճշգրիտ մեկ սխալ զուգընկեր, միայն ցանցի բաժանումների կամ փաթեթների կորստի սխալներով: Izanami- ն հետեւում է Sumeragi առաջատար հեռաչափին

Պահպանեք մեկ փոփոխականը միանգամից: Եթե դուք փոխում եք զուգընկերների քանակը, աշխատանքային բեռնվածության պրոֆիլը, սխալ պատուհանը եւ TPS նույն ընթացքի ընթացքում, արդյունքը դժվար է մեկնաբանել.

Ինչ պետք է դիտել

Գնացքի ընթացքում հետեւեք նույն ազդանշաններին, որոնք օգտագործվում են կատարման հավաստիացման համար.

  • բլոկի բարձրության առաջընթացը յուրաքանչյուր վազող զուգահեռի վրա
  • ներկայացված, ընդունված, մերժված եւ ժամկետով ավարտված գործարքները
  • ականջի խորությունը, ականջների հագեցածությունը եւ վերջնական կետերի հետագա ճնշումը
  • տեսանյութի փոփոխությունները, վերականգնման ուղիները, բացակայող բլոկները եւ կորած քվորումային վկայականները
  • RBC հետապնդում, սպասվող նստաշրջաններ եւ նվազեցված կամ հետաձգված համաձայնության երթեւեկություն
  • CPU, հիշողություն, սկավառակ եւ ցանցի լցվածությունը հյուրընկալողի վրա, որը գործարկում է զուգահեռները

Վավերացման հետաձգման վերլուծության համար կարողացրեք հիմնական փուլերի ապարդյունների արձանագրություն.

bash
RUST_LOG=iroha_core::sumeragi::main_loop=debug \
  cargo run -p izanami -- --allow-net --seed 42

Յուրաքանչյուր բլոկ պետք է արտանետի block validation timings ՝ stateless_ms, execution_ms եւ total_ms: Համեմատեք այդ ժամանակավորումները p95 բլոկային միջակայքների հետ, տեսքի փոփոխության հաշվիչների եւ հերթի ճնշման հետ, նախքան փոխելը կոնսենսուսային ժամանակավորները:

Արդյունքները մեկնաբանելու համար

Բարեւեք վազումը որպես առողջ, երբ բոլոր ընտրված զուգընկերները շարունակում են բլոկներ կատարել, հետապնդումները չեն աճում առանց սահմանի, եւ սխալները դադարեցնում են վերականգնման նոր գործունեություն առաջացնելը կազմավորված պատուհանի ավարտից հետո:

Բարեկամել վազումը որպես ձախողում, եթե

  • բլոկի առաջընթացի պահերը, որոնք ավելի երկար են, քան --progress-timeout
  • զուգընկերների բարձրությունը տարբերվում է եւ չի վերագնահատվում
  • p95 ուշացում գերազանցում է --latency-p95-threshold
  • հերթերը աճում են մնացած ընթացքի ընթացքում, երբ փակվում է խախտումների պատուհանը
  • մերժված կամ ժամկետով ավարտված գործարքները չեն բացատրվում ընտրված աշխատանքային բեռնվածությամբ
  • զուգընկերային վերսկսման, պահեստավորման ջնջման կամ փաթեթների կորստի վերականգնման համար անհրաժեշտ է ձեռքով մաքրել:

Սխալվելուց հետո կրկնեք նույն սերմնաբուծությունը եւ մեկ պակաս պակասի տիպը: Դա պահում է աշխատանքային բեռնվածությունն ու ժամանակավորությունը կրկնվող, մինչդեռ նեղացնում է սխալների մակերեւույթը.