Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

Runtimy propojené jen přes relay konvergují k jednomu digestu stavu, každá událost je držena jednou, bez smyčky replikace

A je propojeno s B a B s C; A a C spolu nikdy nemluví. Nárok učiněný na A drží C, nárok

deklarovaný stavdeklarovaný stav: zaručeno Deklarováno jako deterministické a blokující, implementováno a s uvedeným behaviorálním testem, který to má dokázat. Zda to zaznamenaný běh podporuje, říká verdikt důkazů zobrazený vedle.

zaznamenané důkazyzaznamenané důkazy: nespuštěno Deklarováno jako zaručené, ale nepodložené zaznamenaným během: test je pojmenován, ale žádný úspěšný běh nad současnými vstupy zaznamenán není. jak se zaznamenávají důkazy

Tři serverové procesy v řadě se shodnou na digestu, drží stejný počet událostí a po konvergenci nenesou další události; podpisy původu přežijí přenos. Doručení je at-least-once s idempotentní aplikací, ne exactly-once.

Co to znamená

A je propojeno s B a B s C; A a C spolu nikdy nemluví. Claim vytvořený na A je držen na C, claim vytvořený na C odmítne překrývající se claim na A a všechny tři runtimy hlásí stejný digest stavu. Každá událost je uložena jednou na každém runtime — počty jsou shodné — a jakmile se stav sblížil, další heartbeaty nenesou žádné události: replikace se zastaví místo toho, aby se odrážela A → B → A.

Princip

Replikace porovnává high-water marks: kolo synchronizace pošle peeru přesně ty události, které podle jeho značek chybí, po jednotlivých proudech, takže událost dorazí ke každému runtime jednou na spoj a nemá kam dál. Události si zachovávají podpis svého původce přes každé předání, takže C ověřuje klíč A, ne slovo B, a předávající uzel nemůže to, co přeposílá, ani padělat, ani změnit. Duplicitní doručení — možné, když má runtime dvě cesty — rozpozná (stream, seq) a nic nezmění. Skládání nezávisí na pořadí, takže digest závisí jen na množině událostí a verdiktech o živosti (apps/majordomus-cli/src/mesh/journal.rs, apps/majordomus-cli/src/mesh/state.rs).

Jak to vidět

curl http://127.0.0.1:8741/api/v1/mesh/state | jq '.summary.digest'   # on each runtime
curl 'http://127.0.0.1:8741/api/v1/mesh/events?limit=1000' | jq '.count'
cargo test --manifest-path apps/majordomus-cli/Cargo.toml --test mesh_cooperation three_runtimes

three_runtimes_in_a_line_converge_through_the_middle_without_loops spouští tři serverové procesy v řadě; a_relay_carries_events_it_cannot_forge a any_permutation_with_duplicates_converges jsou důkazy jednotkové a vlastnostní; test/mesh-lab/run (scénář three_node_convergence) to opakuje napříč třemi uzly Linuxu.

Co nepokrývá

Doručení je nejméně jednou s idempotentním uplatněním, ne přesně jednou. Konvergence je eventuální: během rozdělení sítě každá strana konverguje k tomu, čeho dosáhne.

Proč existuje

Mesh ověřený se dvěma uzly ověřený není: relé, duplikáty a smyčky se objeví až se třetím.

Detail vykreslený z docs/claims/mesh-three-runtime-convergence.md.

Od tvrzení k důkazu

  1. 1 · veřejné tvrzení

    Runtimy propojené jen přes relay konvergují k jednomu digestu stavu, každá událost je držena jednou, bez smyčky replikace

    Vytvořeno na Mesh.

  2. 2 · kanonické tvrzení

    mesh-three-runtime-convergencedeklarovaný stav: zaručeno v docs/CLAIMS.yaml

    Definováno v přečtěte si to na tomto webu · docs/MESH.md

  3. 3 · implementace

    apps/majordomus-cli/src/mesh/journal.rs

  4. 4 · test a scénáře

    Test: apps/majordomus-cli/tests/mesh_cooperation.rs

  5. 5 · zaznamenané běhy

    zaznamenané důkazy: nespuštěno jak se zaznamenávají důkazy

Ověřte si to sami

Test běží v jednorázovém dočasném repozitáři a ověřuje chování, ne řetězec ve zdrojovém kódu.

z klonu repozitáře
bash test/run.sh apps/majordomus-cli/tests/mesh_cooperation.rs

Související tvrzení stejná implementace

Prohledává názvy a popisy všech stránek, které tento web publikuje.