5.0 KiB
5.0 KiB
OC-Discovery — Diagrammes d'architecture et de séquence
Tous les fichiers sont au format PlantUML. Rendu possible via VS Code (extension PlantUML), IntelliJ, ou plantuml.com/plantuml.
Diagrammes de séquence (flux internes)
| Fichier | Description |
|---|---|
01_node_init.puml |
Initialisation complète d'un Node (libp2p host, GossipSub, indexers, StreamService, PubSubService, NATS) |
02_node_claim.puml |
Enregistrement du nœud auprès des indexeurs (claimInfo + publishPeerRecord) |
03_indexer_heartbeat.puml |
Protocole heartbeat avec score 5 composants (U/B/D/L/F), UptimeTracker, dynamicMinScore |
04_indexer_publish.puml |
Publication d'un PeerRecord vers l'indexeur → DHT |
05_indexer_get.puml |
Résolution d'un pair via l'indexeur (GetPeerRecord + handleNodeGet + DHT) |
06_native_registration.puml |
Enregistrement d'un indexeur auprès du Native (FillRate, signature, TTL 90s, unsubscribe) |
07_native_get_consensus.puml |
ConnectToNatives : fetch pool + Phase 1 (clientSideConsensus) + Phase 2 (indexerLivenessVote) |
08_nats_create_resource.puml |
Handler NATS CREATE_RESOURCE : connexion/déconnexion d'un partner |
09_nats_propagation.puml |
Handler NATS PROPALGATION_EVENT : delete, considers, planner, search |
10_pubsub_search.puml |
Recherche gossip globale (type "all") via GossipSub |
11_stream_search.puml |
Recherche directe par stream (type "known" ou "partner") |
12_partner_heartbeat.puml |
Heartbeat partner + propagation CRUD vers les partenaires |
13_planner_flow.puml |
Session planner (ouverture, échange, fermeture) |
14_native_offload_gc.puml |
Boucles background du Native Indexer (offload, DHT refresh, GC) |
Diagrammes de topologie et flux de panne
Configurations réseau
| Fichier | Description |
|---|---|
15_archi_config_nominale.puml |
C1 — Topologie nominale : 2 natifs · 2 indexeurs · 2 nœuds, tous flux |
16_archi_config_seed.puml |
C2 — Mode seed sans natif : indexeurs à AdmittedAt=0, risque D20 actif |
Flux de démarrage
| Fichier | Description |
|---|---|
17_startup_consensus_phase1_phase2.puml |
Démarrage nominal : Phase 1 (admission native) + Phase 2 (liveness vote) |
18_startup_seed_discovers_native.puml |
Upgrade seed → nominal : goroutine async découvre un natif via l'indexeur |
Flux de panne
| Fichier | Code | Description |
|---|---|---|
19_failure_indexer_crash.puml |
F1 | Panne 1 indexeur → replenish depuis natif → IC admis |
20_failure_both_indexers_selfdelegate.puml |
F2 | Panne 2 indexeurs → natif IsSelfFallback=true, runOffloadLoop |
21_failure_native_one_down.puml |
F3 | Panne 1 natif → quorum 1/1 suffisant, mode dégradé |
22_failure_both_natives.puml |
F4 | Panne 2 natifs → fallback pool pré-validé, retryLostNative |
23_failure_native_plus_indexer.puml |
F5 | Panne combinée : 1 natif + 1 indexeur → double replenish |
24_failure_retry_lost_native.puml |
F6 | Panne réseau transitoire → retryLostNative (30s ticker) |
25_failure_node_gc.puml |
F7 | Crash nœud → GC indexeur (120s), AfterDelete, fill rate recalculé |
Protocoles libp2p utilisés (référence complète)
| Protocole | Description |
|---|---|
/opencloud/heartbeat/1.0 |
Heartbeat universel : node→indexeur, indexeur→native, native→native (long-lived) |
/opencloud/probe/1.0 |
Sonde de bande passante (echo, mesure latence + débit) |
/opencloud/resource/heartbeat/partner/1.0 |
Heartbeat node ↔ partner (long-lived) |
/opencloud/record/publish/1.0 |
Publication PeerRecord vers indexeur |
/opencloud/record/get/1.0 |
Requête GetPeerRecord vers indexeur |
/opencloud/native/subscribe/1.0 |
Enregistrement indexeur auprès du native (+ FillRate) |
/opencloud/native/unsubscribe/1.0 |
Désenregistrement explicite indexeur → native |
/opencloud/native/indexers/1.0 |
Requête de pool d'indexeurs au native (tri par w(F)=F×(1-F)) |
/opencloud/native/consensus/1.0 |
Phase 1 : validation de pool d'indexeurs (vote majoritaire natifs) |
/opencloud/native/peers/1.0 |
Demande de pairs natifs connus (replenish mesh natif) |
/opencloud/indexer/natives/1.0 |
Demande d'adresses de natifs connus par un indexeur |
/opencloud/indexer/consensus/1.0 |
Phase 2 : liveness vote (LastSeen ≤ 120s && LastScore ≥ 30) |
/opencloud/resource/search/1.0 |
Recherche de ressources entre peers |
/opencloud/resource/create/1.0 |
Propagation création ressource vers partner |
/opencloud/resource/update/1.0 |
Propagation mise à jour ressource vers partner |
/opencloud/resource/delete/1.0 |
Propagation suppression ressource vers partner |
/opencloud/resource/planner/1.0 |
Session planner (booking) |
/opencloud/resource/verify/1.0 |
Vérification signature ressource |
/opencloud/resource/considers/1.0 |
Transmission d'un "considers" d'exécution |