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
  • հերթերը աճում են մնացած ընթացքի ընթացքում, երբ փակվում է խախտումների պատուհանը
  • մերժված կամ ժամկետով ավարտված գործարքները չեն բացատրվում ընտրված աշխատանքային բեռնվածությամբ
  • զուգընկերային վերսկսման, պահեստավորման ջնջման կամ փաթեթների կորստի վերականգնման համար անհրաժեշտ է ձեռքով մաքրել:

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