Files
oc-discovery/docs/DECENTRALIZED_SYSTEMS_COMPARISON.txt

1031 lines
55 KiB
Plaintext
Raw Normal View History

2026-03-09 14:57:41 +01:00
================================================================================
OC-DISCOVERY : CORRÉLATION AVEC LES SYSTÈMES DÉCENTRALISÉS EXISTANTS
Patterns, similitudes, divergences et comparaison
================================================================================
Rédigé à partir de l'analyse de l'architecture oc-discovery.
Références académiques et systèmes industriels cités en §9.
================================================================================
1. INTRODUCTION ET PÉRIMÈTRE
================================================================================
oc-discovery est un service de découverte P2P hiérarchique à trois niveaux
(node → indexer → native indexer) construit sur libp2p, une DHT Kademlia à
espace de noms privé, GossipSub, et un mécanisme de scoring de confiance
multidimensionnel. Le réseau est isolé par une clé pré-partagée (PSK).
Ce document met en regard la conception de oc-discovery avec :
(A) Les systèmes de découverte P2P historiques et académiques
(B) Les systèmes décentralisés industriels contemporains
(C) Les patterns architecturaux identifiables dans la littérature
(D) Une analyse comparative synthétique
================================================================================
2. SYSTÈMES COMPARÉS
================================================================================
2.1 Kademlia DHT [Maymounkov & Mazières, 2002]
-----------------------------------------------
Description : Table de hachage distribuée à espace à k-buckets. Chaque nœud
maintient un routage O(log n). Toute requête GET/PUT se résout en O(log n) sauts.
La distance est la métrique XOR sur les PeerIDs (160 bits).
Utilisation dans oc-discovery : oc-discovery embarque une instance Kademlia
(go-libp2p-kad-dht) avec le préfixe "oc" — namespace privé qui isole la DHT
du réseau IPFS public. Quatre espaces de noms (/node, /indexer, /name, /pid)
y sont écrits avec des validateurs cryptographiques customisés.
Similitudes :
- Résolution en O(log n) sans serveur central.
- Réplication Kademlia standard (k-buckets) pour la tolérance aux pannes.
- Chaque entrée est auto-signée (Ed25519).
Divergences :
- Kademlia pur est flat : tout nœud est pair. oc-discovery superpose une
hiérarchie fonctionnelle (native > indexer > node) sur la DHT.
- Kademlia n'a pas de TTL applicatif par nature : oc-discovery impose des
TTL stricts (90 s pour /indexer, 2 min pour /node) avec retry borné.
- Kademlia pur n'a pas de mécanisme d'admission : tout nœud peut écrire.
oc-discovery ajoute une validation cryptographique (Sign+Verify) avant
tout PutValue dans l'espace /indexer.
- La DHT de oc-discovery est un stockage secondaire (cache mémoire des natifs
en primaire), non le plan de découverte principal — rôle tenu par le mesh
natif + heartbeat long-lived.
Source : Maymounkov, P. & Mazières, D. (2002). "Kademlia: A Peer-to-Peer
Information System Based on the XOR Metric." IPTPS 2002, Springer LNCS 2429.
----
2.2 Chord [Stoica et al., 2001]
--------------------------------
Description : DHT en anneau. Chaque nœud a un successeur et une finger table
de O(log n) entrées. Résolution en O(log n). Gestion des jonctions/départs via
le protocole de stabilisation.
Similitudes :
- Résolution décentralisée sans serveur central.
- Tolérance aux pannes par réplication de successeurs.
Divergences :
- Chord suppose un réseau ouvert et homogène. oc-discovery est fermé (PSK)
et hétérogène (3 rôles différents).
- Chord n'a pas de couche de scoring ni de consensus applicatif.
- La stabilisation Chord (jointures fréquentes) génère du trafic O(log² n).
oc-discovery évite cela par un pool statique d'indexeurs (StaticIndexers)
avec replenish seulement en cas de panne.
- Chord est mathématiquement élégant mais pratiquement fragile face aux
partitions (l'anneau peut se "casser"). oc-discovery tolère les partitions
via fallback + pool pré-validé.
Source : Stoica, I., Morris, R., Karger, D., Kaashoek, M. F., & Balakrishnan, H.
(2001). "Chord: A Scalable Peer-to-Peer Lookup Service for Internet Applications."
ACM SIGCOMM 2001.
----
2.3 Gnutella 2 / FastTrack — Supernœuds [Ritter, 2001]
--------------------------------------------------------
Description : FastTrack (réseau de Kazaa, iMesh) introduit les "supernœuds" :
des pairs capables de gérer des listes d'indexation pour les pairs ordinaires.
Les supernœuds forment un mesh entre eux, les pairs ordinaires se connectent
à un ou plusieurs supernœuds. Gnutella 2 adopte une architecture similaire
avec "hubs" et "leaves".
Similitudes — c'est le point de corrélation le plus fort :
- La tripartition native/indexer/node de oc-discovery est structurellement
identique à la partition supernode/ultrapeers/leaves de FastTrack/Gnutella2.
- Les natifs forment un mesh entre eux (heartbeat bidirectionnel + gossip),
exactement comme les hubs Gnutella2 s'interconnectent.
- Les indexeurs s'enregistrent auprès des natifs exactement comme les leaves
se connectent à un hub Gnutella2.
- L'auto-sélection des supernœuds (selon la bande passante, uptime) préfigure
le scoring multidimensionnel de oc-discovery.
Divergences :
- FastTrack/Gnutella2 sont ouverts : tout pair peut devenir supernœud si les
critères ressources sont satisfaits. oc-discovery est fermé : le rôle de
natif est configuré statiquement (NativeIndexerAddresses). Ce choix délibéré
améliore la sécurité (admission explicite) mais réduit l'élasticité.
- FastTrack n'a aucun mécanisme cryptographique de validation des entrées.
oc-discovery signe chaque IndexerRegistration et valide en DHT.
- FastTrack n'a pas de consensus : les supernœuds sont des autorités locales
non coordonnées. oc-discovery introduit clientSideConsensus (Phase 1) et
indexerLivenessVote (Phase 2) — inexistants dans Gnutella2.
- Le scoring de oc-discovery (5 composants, gap-aware uptime) est bien plus
sophistiqué que la simple métrique de bande passante de FastTrack.
Source : Ritter, J. (2001). "Why Gnutella Can't Scale. No, Really."
Clip2 Distributed Search Solutions Technical Report.
CNN (2003). "KaZaA's Secret : Supernodes."
----
2.4 IPFS / libp2p [Benet, 2014 ; libp2p, 2019]
------------------------------------------------
Description : IPFS (InterPlanetary File System) est un protocole de stockage
P2P adressé par contenu. Il utilise libp2p comme couche réseau, Kademlia DHT
(go-libp2p-kad-dht), GossipSub pour le pub/sub, et yamux pour le multiplexage.
Similitudes — très fortes (stack identique) :
- oc-discovery utilise exactement la même pile : libp2p + yamux + Kademlia +
GossipSub. Les protocoles de transport, de mux, et de DHT sont les mêmes.
- La notion de PeerID Ed25519 auto-certifié est commune.
- Le mécanisme de PSK (private network) est une fonctionnalité libp2p standard
utilisée dans les déploiements IPFS privés.
- GossipSub avec TopicValidator (validation des messages avant acceptation)
est utilisé dans les deux systèmes.
Divergences :
- IPFS est orienté adressage par contenu (CID, Merkle DAG). oc-discovery est
orienté découverte de pairs (PeerRecord, présence).
- IPFS utilise la DHT Kademlia comme plan de découverte principal (findProviders,
findPeers). oc-discovery relègue la DHT à un rôle de persistance secondaire :
le plan principal est le mesh natif + heartbeat long-lived (latence < 1 ms
vs 50200 ms DHT).
- IPFS n'a pas de scoring d'admission. Tout pair libp2p peut publier du contenu.
- IPFS n'a pas de concept d'indexeur ou de natif. La hiérarchie fonctionnelle
de oc-discovery est absente — IPFS est architecturalement flat.
- IPFS ne maintient pas de présence continue (heartbeat). La présence est
inférée par la disponibilité DHT (providers). oc-discovery maintient une
présence explicite avec TTL court (2 min) et GC.
- L'espace de noms DHT de oc-discovery est privé (préfixe "oc") : il ne se
mélange pas au réseau DHT IPFS public.
Source : Benet, J. (2014). "IPFS - Content Addressed, Versioned, P2P File System."
arXiv:1407.3561.
libp2p (2019). libp2p specifications. https://github.com/libp2p/specs
----
2.5 Ethereum devp2p / DiscV5 [Ethereum Foundation, 20142021]
--------------------------------------------------------------
Description : Le protocole de découverte Ethereum (devp2p) utilise une DHT
Kademlia modifiée (initialement discv4, puis discv5). Les nœuds s'annoncent
via des ENR (Ethereum Node Records) signés. discv5 introduit des topics (TOPICQUERY)
pour la découverte par type de service.
Similitudes :
- ENR (Ethereum Node Records) signés sont analogues aux IndexerRegistration
signés de oc-discovery : preuve cryptographique que l'annonceur contrôle
l'adresse déclarée (Sign(PeerID|Addr|Nonce)).
- La notion de "bootstrap nodes" fixes (Ethereum Foundation opère des nodes
DNS/statiques) est analogue aux NativeIndexerAddresses configurés statiquement.
- discv5 TOPICQUERY permet de filtrer les pairs par capability, analogue au
GetIndexersRequest{Count: n} de oc-discovery.
Divergences :
- Ethereum vise un réseau ouvert et mondial (des milliers de nœuds). oc-discovery
est un réseau privé fermé (PSK), pensé pour des déploiements organisationnels.
- discv5 est purement flat : aucune hiérarchie native/indexer/node.
- Ethereum n'a pas de scoring de confiance d'admission. La sélection est
purement Kademlia (proximité XOR des PeerIDs).
- Ethereum n'a pas de mécanisme de liveness vote comparable à Phase 2 de
oc-discovery. La vivacité est inférée par les échecs de connexion, non
par un vote explicite.
- Le consensus applicatif Ethereum (PoW/PoS) est au niveau de la chaîne,
pas au niveau de la découverte. oc-discovery intègre un consensus directement
dans la couche de découverte (clientSideConsensus).
Source : Ethereum Foundation (2021). "Node Discovery Protocol v5."
https://github.com/ethereum/devp2p/blob/master/discv5/discv5.md
----
2.6 Bitcoin P2P / DNS Seeds [Nakamoto, 2008 ; Bitcoin Core]
------------------------------------------------------------
Description : Bitcoin utilise un réseau P2P flat avec un protocole de gossip
ad hoc (ADDR messages). Au démarrage, un nœud se connecte à des "DNS seeds"
(noms DNS opérés par des développeurs réputés) qui retournent une liste de pairs
actifs. Le pair se connecte ensuite à N pairs au hasard.
Similitudes :
- Les DNS seeds de Bitcoin sont fonctionnellement analogues aux IndexerAddresses
(seeds) de oc-discovery : liste de points d'entrée configurés statiquement
pour bootstrapper la découverte.
- Le mode seed de oc-discovery (IndexerAddresses sans natif, AdmittedAt=0)
est structurellement analogue au mode bootstrap-DNS de Bitcoin : confiance
explicite hors-bande, pas de validation cryptographique.
Divergences :
- Bitcoin est entièrement flat. Aucune hiérarchie, aucun rôle privilégié.
- Bitcoin n'a pas de scoring ni de consensus de découverte. Le choix des pairs
est pseudo-aléatoire (évitement du clustering).
- Les DNS seeds Bitcoin sont des points de centralisation opérationnelle
(opérés par quelques individus connus). Le mode natif de oc-discovery
distribue cette autorité entre plusieurs natifs avec consensus.
- Bitcoin tolère les Sybil attacks par PoW. oc-discovery tolère les Sybil
par PSK + signature cryptographique + quorum natif.
- oc-discovery détecte explicitement la panne d'un pair via heartbeat (20 s).
Bitcoin détecte via timeout de connexion (2 h par défaut).
Source : Nakamoto, S. (2008). "Bitcoin: A Peer-to-Peer Electronic Cash System."
Lopp, J. (2016). "Bitcoin Node Network." Statoshi.info.
----
2.7 Consul (HashiCorp) — Service Discovery [HashiCorp, 2014]
-------------------------------------------------------------
Description : Consul est un service de découverte et de configuration distribué.
Il utilise le consensus Raft au sein d'un cluster de serveurs (3 ou 5 nœuds),
et le protocole Serf (gossip SWIM) pour la détection de défaillances entre
agents. Les services s'enregistrent auprès des agents locaux qui répliquent
vers les serveurs Raft.
Similitudes :
- La couche de health checking de Consul (SWIM : heartbeats périodiques +
indirect probing) est fonctionnellement analogue au heartbeat long-lived de
oc-discovery pour détecter les défaillances.
- L'enregistrement de service avec TTL (service registration + TTL check) est
analogue à IndexerRegistration + IndexerTTL (90 s).
- Le concept de "critical service" qui expire si l'agent ne renouvelle pas
le check TTL est analogue à la logique de GC de oc-discovery (now.After(Expiry)).
Divergences :
- Consul repose sur Raft pour la cohérence forte (CP dans le théorème CAP).
oc-discovery fait un choix AP : disponibilité et cohérence à terme, tolérant
les lectures potentiellement stales (cache mémoire natif vs DHT désynchronisée).
- Consul requiert un quorum Raft de serveurs (minimum 3) pour fonctionner.
oc-discovery fonctionne avec un seul natif (mode dégradé accepté).
- Consul est un service centralisé (cluster de serveurs). oc-discovery est
vraiment décentralisé : les natifs sont des pairs égaux sans leader élu.
- Consul s'intègre typiquement dans un data center (LAN). oc-discovery est
conçu pour un réseau WAN avec NAT traversal, PSK, et des RTT élevés.
- Consul n'a pas de scoring de confiance des services : tout service enregistré
par un agent authentifié est valide. oc-discovery ajoute 5 composantes de score.
Source : HashiCorp (2014). "Consul: Service Mesh Solution."
https://developer.hashicorp.com/consul/docs/architecture
Maciej Dobrzański (2015). "Consul: HashiCorp's Service Discovery Tool." InfoQ.
----
2.8 ZooKeeper [Hunt et al., 2010]
----------------------------------
Description : ZooKeeper est un service de coordination distribué utilisant un
consensus ZAB (ZooKeeper Atomic Broadcast, dérivé de Paxos). Il maintient un
espace de noms hiérarchique (znodes) avec watches. Utilisé pour la découverte
de services (enregistrement d'éphémères), leader election, configuration.
Similitudes :
- Les znodes éphémères de ZooKeeper (supprimés quand le client se déconnecte)
sont fonctionnellement analogues aux entrées liveIndexers avec TTL : dans
les deux cas, la présence est inférée par la connexion active.
- La notion de watch (notification de changement) est analogue au nudge channel
de oc-discovery (indexerHeartbeatNudge, nativeHeartbeatNudge).
Divergences :
- ZooKeeper est fondamentalement centralisé : il requiert un ensemble de serveurs
(ensemble) avec élection de leader via ZAB. C'est un service CP fort.
oc-discovery n'a pas de leader, pas d'élection, pas de log répliqué.
- ZooKeeper offre des garanties de linéarisabilité pour les écritures. oc-discovery
n'offre qu'une cohérence à terme (liveIndexers vs DHT peuvent diverger jusqu'à
~30 s).
- ZooKeeper est conçu pour des réseaux fiables (LAN intra-datacenter). oc-discovery
tolère des partitions WAN longues via fallback pool + retryLostNative.
- ZooKeeper n'a aucun mécanisme de scoring ou de confiance : toute session
authentifiée peut écrire des znodes dans son espace.
Source : Hunt, P., Konar, M., Junqueira, F. P., & Reed, B. (2010). "ZooKeeper:
Wait-free Coordination for Internet-scale Systems." USENIX ATC 2010.
----
2.9 Gossip / SWIM (Scalable Weakly-consistent Infection-style Membership)
[Das et al., 2002]
---------------------------------------------------------------------------
Description : SWIM est un protocole d'appartenance (membership) à base de gossip
utilisé dans Consul/Serf, Cassandra, etcd (memberlist). Chaque nœud envoie des
pings directs et des pings indirects (via tiers) pour détecter les défaillances.
L'information se propage par infection (gossip) en O(log n) rounds.
Utilisation dans oc-discovery : Le gossip GossipSub (oc-indexer-registry) de
oc-discovery disséminate les IndexerRegistration signées entre natifs lorsqu'un
indexeur s'enregistre. Ce sous-protocole joue un rôle SWIM partiel.
Similitudes :
- Dissémination par gossip (GossipSub avec random fanout) est formellement
équivalente à l'infection-style de SWIM : chaque message atteint tous les
nœuds en O(log n) rounds avec haute probabilité.
- La détection de défaillance par timeout de heartbeat (2 min dans oc-discovery)
est analogue au timeout de SWIM avant de déclarer un membre "suspect".
- Le TopicValidator de oc-discovery (validation de l'émetteur + signature)
est analogue au message authentication dans les implémentations sécurisées de SWIM.
Divergences :
- SWIM implémente un "indirect probing" (demander à un tiers de pinger le
suspect avant de le déclarer mort) pour réduire les faux positifs. oc-discovery
n'a pas d'indirect probing : la défaillance est déclarée dès que le heartbeat
échoue directement (false positives possibles sous partition partielle).
- SWIM gère l'appartenance de manière symétrique (tout nœud peut diagnostiquer
tout autre). oc-discovery est asymétrique : seuls les natifs valident les
indexeurs ; les nœuds ne se valident pas mutuellement.
- Le gossip oc-discovery ne porte que les enregistrements d'indexeurs (plan
de contrôle). SWIM gossipe l'état de tout le membership.
Source : Das, A., Gupta, I., & Motivala, A. (2002). "SWIM: Scalable Weakly-
consistent Infection-style Process Group Membership Protocol." DSN 2002.
----
2.10 Tor — Onion Routing [Dingledine et al., 2004]
----------------------------------------------------
Description : Tor est un réseau d'anonymisation par routage en oignon. Un
répertoire d'autorités (directory authorities) — 9 nœuds fixes connus de tous —
publie un "consensus" signé des relais disponibles (adresse, bande passante,
flags). Les clients téléchargent ce consensus et choisissent un circuit de 3 relais.
Similitudes :
- Les directory authorities de Tor sont structurellement analogues aux native
indexers de oc-discovery : nœuds privilégiés, fixes, formant un mesh
autoritaire qui publie un état de santé du réseau.
- Le consensus signé de Tor (vote majority parmi les authorities) est le
mécanisme le plus proche de clientSideConsensus de oc-discovery : les
authorities votent sur quels relais sont valides, oc-discovery vote sur
quels indexeurs sont valides.
- Les flags Tor (Guard, Exit, HSDir, Stable, Fast) jouent un rôle analogue au
scoring de confiance de oc-discovery : ils qualifient les nœuds selon leurs
performances (bande passante, uptime, stabilité).
- La bande passante comme critère de sélection des relais Tor est analogue au
composant B (bpms) du score de oc-discovery.
- L'uptime comme critère de stabilité Tor ("Stable" flag : médiane des temps
de session) est analogue au composant U (UptimeRatio gap-aware) de oc-discovery.
Divergences :
- Les directory authorities Tor sont en nombre fixe (9) et leurs clés sont
hardcodées dans le client Tor. oc-discovery permet un nombre variable de
natifs, configuré par l'opérateur — plus flexible mais moins résistant à une
reconfiguration malveillante.
- Tor vise l'anonymat : il évite que les relais connaissent la source ET la
destination. oc-discovery n'a aucun objectif d'anonymat : les indexeurs
connaissent l'identité de tous les nœuds qui les heartbeatent.
- Le consensus Tor est calculé toutes les heures (document voté entre authorities).
oc-discovery recalcule la confiance à chaque heartbeat (20 s) — beaucoup plus
réactif.
- Tor est open : tout pair peut devenir un relais (il suffit de déclarer son
adresse). oc-discovery est fermé (PSK + rôle de natif configuré statiquement).
Source : Dingledine, R., Mathewson, N., & Syverson, P. (2004). "Tor: The Second-
Generation Onion Router." USENIX Security 2004.
----
2.11 Hyperledger Fabric — Gossip Service [Androulaki et al., 2018]
------------------------------------------------------------------
Description : Hyperledger Fabric est un blockchain permissionné. Son protocole
gossip propage les blocs et les données d'appartenance entre pairs d'une
organisation. Des "anchor peers" jouent le rôle d'intermédiaires entre organisations.
Similitudes :
- Les anchor peers de Fabric sont analogues aux native indexers de oc-discovery :
points de contact fixes et stables qui relaient les informations entre
participants d'organisations différentes.
- Le gossip permissionné (membership service provider + certificats) est analogue
au PSK + signatures de oc-discovery : seuls les pairs authentifiés participent.
- La notion de "private data collection" (données partagées qu'avec un sous-ensemble)
est analogue au scope privé de oc-discovery (PSK isole le réseau).
Divergences :
- Fabric est orienté transaction et consensus d'ordre (orderer service, Raft).
oc-discovery est orienté présence et découverte sans log ordonné.
- Fabric utilise TLS avec certificats X.509 (PKI gérée). oc-discovery utilise
des clés Ed25519 auto-certifiées (pas de PKI, pas d'autorité de certification
tierce).
- Fabric distingue "endorse → order → commit" avec finalité forte. oc-discovery
accepte la cohérence à terme pour favoriser la disponibilité.
Source : Androulaki, E., et al. (2018). "Hyperledger Fabric: A Distributed
Operating System for Permissioned Blockchains." EuroSys 2018.
----
2.12 Cassandra / Dynamo — Gossip + Ring [DeCandia et al., 2007]
----------------------------------------------------------------
Description : Amazon Dynamo et Apache Cassandra utilisent un anneau de hachage
cohérent (consistent hashing) pour distribuer les données, avec gossip pour
l'appartenance au cluster (chaque nœud connaît l'état de santé de tous les autres).
Cassandra utilise SWIM-like pour la détection de défaillances.
Similitudes :
- Le hachage cohérent de Cassandra (distribution des données sans point central)
est analogue à la DHT Kademlia de oc-discovery pour la distribution des
enregistrements /node.
- Le gossip d'appartenance de Cassandra (Endpoint State → état de santé de
chaque nœud diffusé à tous) est analogue au GossipSub de oc-discovery pour
la diffusion des IndexerRegistration signées.
- La réplication configurable de Cassandra (replication factor) est analogue
à la réplication Kademlia (k-buckets) pour la tolérance aux pannes.
Divergences :
- Cassandra vise la disponibilité et la tolérance aux pannes pour des données
persistantes (AP dans le théorème CAP). Ses écritures sont durables.
oc-discovery ne persiste que des données de présence éphémères (TTL court).
- Cassandra n'a aucun mécanisme d'admission ou de scoring des pairs. Tout nœud
connaissant le token ring peut rejoindre le cluster.
- La hiérarchie de oc-discovery (3 niveaux) est absente dans Cassandra (flat).
Source : DeCandia, G., et al. (2007). "Dynamo: Amazon's Highly Available Key-value
Store." ACM SIGOPS SOSP 2007.
----
2.13 Pastry / Tapestry / Bamboo [Rowstron & Druschel, 2001]
------------------------------------------------------------
Description : Famille de DHT de 2e génération avec routage par préfixe. Pastry
ajoute le concept de "leaf set" (voisins proches dans l'espace de noms) et de
"neighborhood set" (voisins géographiques). Tapestry (Yale) ajoute un routage
multi-hop avec racines locales pour la localité.
Similitudes :
- Le "leaf set" de Pastry (nœuds proches maintenus de façon persistante) est
analogue au pool StaticIndexers de oc-discovery : un ensemble stable de pairs
"proches" fonctionnellement.
- La notion de "neighborhood set" (localité géographique) est analogue au
composant D (diversité /24 de oc-discovery) qui mesure la diversité topologique.
Divergences :
- Pastry/Tapestry sont conçus pour des réseaux à grande échelle (millions de
nœuds). oc-discovery est conçu pour des déploiements organisationnels (centaines
à quelques milliers de nœuds).
- Pastry n'a aucun mécanisme de scoring ni de consensus de confiance.
- La hiérarchie de oc-discovery est fonctionnelle (les rôles sont configurés),
non émergente comme dans Pastry (le "leaf set" est purement géométrique).
Source : Rowstron, A. & Druschel, P. (2001). "Pastry: Scalable, decentralized
object location and routing for large-scale peer-to-peer systems."
Middleware 2001, Springer LNCS 2218.
----
2.14 Wireguard / Tailscale — PSK + PKI [Donenfeld, 2017]
---------------------------------------------------------
Description : Wireguard est un protocole VPN léger basé sur des clés statiques
Curve25519 et un handshake Noise. Tailscale construit un overlay P2P sur Wireguard
avec un plan de contrôle centralisé (coordination server) pour l'échange de clés
et la découverte de pairs.
Similitudes :
- L'isolation par PSK de oc-discovery est conceptuellement analogue à l'isolation
par clé partagée de Wireguard : seuls les pairs possédant la clé peuvent
établir une connexion.
- La clé Ed25519 auto-certifiée de libp2p est analogue à la clé statique
Curve25519 de Wireguard : identité = clé, aucune PKI tierce nécessaire.
Divergences :
- Wireguard est un tunnel L3 (plan de données). oc-discovery est un protocole
applicatif (plan de contrôle / découverte). Ils opèrent à des couches différentes.
- Tailscale centralise la découverte (coordination server). oc-discovery distribue
cette fonction sur le mesh natif.
- oc-discovery n'implémente pas de confidentialité des flux applicatifs (les
messages JSON circulent en clair sur le transport libp2p TCP, protégé uniquement
par la PSK réseau, pas par un chiffrement de bout en bout des payloads).
Source : Donenfeld, J. A. (2017). "WireGuard: Next Generation Kernel Network
Tunnel." NDSS 2017.
----
2.15 Polkadot — Parachain Discovery [Wood, 2016]
-------------------------------------------------
Description : Polkadot utilise libp2p pour son transport, avec une couche de
découverte basée sur Kademlia pour trouver les pairs de chaque parachain.
La chaîne relais (Relay Chain) joue un rôle de coordination autoritaire entre
les parachains (validation, finalité).
Similitudes très fortes (stack identique) :
- Polkadot utilise exactement la même pile : libp2p, yamux, Kademlia, GossipSub.
- La Relay Chain de Polkadot est structurellement analogue aux native indexers
de oc-discovery : autorité de coordination entre participants.
- Les validateurs Polkadot (nœuds stables et bien capitalisés) sont analogues
aux native indexers (nœuds stables et bien connectés).
- Le protocole GRANDPA (finalité par vote de validateurs) partage avec
clientSideConsensus le principe de vote majoritaire sur un état proposé.
Divergences :
- Polkadot est un protocole de blockchain : son consensus (BABE + GRANDPA) vise
la finalité économique (transactions). oc-discovery vise la découverte de
pairs — aucune finalité économique, aucune donnée persistante à long terme.
- Polkadot intègre un mécanisme de staking économique (preuve d'enjeu) pour
punir les validateurs malveillants. oc-discovery utilise uniquement des
mécanismes cryptographiques (signature + quorum).
Source : Wood, G. (2016). "Polkadot: Vision for a Heterogeneous Multi-chain
Framework." Whitepaper v1.
================================================================================
3. PATTERNS ARCHITECTURAUX RECONNUS
================================================================================
3.1 Supernode / Tiered P2P (FastTrack, Gnutella2, Skype)
---------------------------------------------------------
Pattern : Séparation des participants en tiers selon leurs capacités.
Les supers-nœuds forment un mesh stable et gèrent les listes d'appartenance
des nœuds ordinaires.
oc-discovery : ✅ Correspond exactement. Native = supernode, Indexer = intermédiaire,
Node = feuille. La hiérarchie est fonctionnelle (non pyramidale) : un natif peut
devenir indexeur, un indexeur peut agir comme nœud.
Divergence clé : dans les systèmes classiques (FastTrack, Skype), les supernœuds
émergent de la topologie (auto-sélection selon la bande passante). Dans oc-discovery,
les natifs sont configurés statiquement — choix délibéré pour la sécurité et la
prévisibilité, au détriment de l'élasticité.
----
3.2 Gossip Membership (SWIM, Cassandra, Consul/Serf)
-----------------------------------------------------
Pattern : Dissémination par infection épidémique. Chaque nœud sélectionne
aléatoirement k voisins à chaque round et leur envoie son état local. L'information
atteint tous les nœuds en O(log n) rounds avec haute probabilité.
oc-discovery : ✅ Partiellement. GossipSub (oc-indexer-registry) implémente ce
pattern entre natifs pour disséminer les IndexerRegistration. GossipSub est une
implémentation optimisée avec un graphe de gossip stable (mesh overlay) + graft/prune.
Divergence : le gossip de oc-discovery ne porte que les événements d'enregistrement
d'indexeurs (plan de contrôle). Il ne porte pas l'état de santé global du réseau
(membership complet) comme SWIM. La vivacité des indexeurs est déterminée
par le heartbeat direct, pas par gossip.
----
3.3 DHT Kademlia avec namespacing (IPFS, Ethereum, Polkadot)
-------------------------------------------------------------
Pattern : Table de hachage distribuée à résolution en O(log n), avec espaces de
noms séparés pour différents types de données. Validateurs customisés par namespace.
oc-discovery : ✅ Implémenté. 4 espaces : /node, /indexer, /name, /pid. Chaque
espace a son propre validateur (PeerRecordValidator, IndexerRecordValidator,
DefaultValidator). La DHT est en mode Server (tous les indexeurs/natifs participent
au routage).
Divergence notable : la DHT est secondaire dans oc-discovery (lecture lente de
secours), contrairement à IPFS où elle est le plan principal. Ce choix favorise
la latence de découverte (cache mémoire natif < 1 ms vs DHT 50200 ms) mais
introduit une désynchronisation potentielle (split-brain DHT/cache jusqu'à 30 s).
----
3.4 Consensus par vote majoritaire (Tor, Raft, PBFT, Tendermint)
-----------------------------------------------------------------
Pattern : Un ensemble de participants vote sur un état proposé. Un état est accepté
si plus de q × |voters| participants l'approuvent (q > 0.5 pour tolérance byzantine,
q > 0.5 pour crash-fault).
oc-discovery : ✅ Implémenté en deux phases :
Phase 1 (clientSideConsensus) : vote des natifs sur les candidats-indexeurs.
Phase 2 (indexerLivenessVote) : vote des indexeurs stables sur la vivacité.
Divergence majeure vs Raft/PBFT : le consensus de oc-discovery est stateless
et one-shot — chaque appel à ConnectToNatives/replenishIndexersFromNative lance
un round de vote indépendant. Il n'y a pas de log répliqué, pas de leader élu,
pas de finalité forte. C'est un consensus light (discovery-grade) adapté à la
découverte de pairs, pas à l'accord sur des transactions.
----
3.5 Self-healing / Auto-recovery (Erlang OTP, Kubernetes, etcd)
----------------------------------------------------------------
Pattern : Le système détecte ses propres défaillances et se répare sans intervention
externe. Acteurs superviseurs (Erlang), liveliness/readiness probes (k8s), leader
re-election (etcd).
oc-discovery : ✅ Implémenté. Quatre mécanismes de self-healing :
(a) replenishIndexersFromNative : panne indexeur → remplacement automatique.
(b) replenishNativesFromPeers : panne natif → recherche de remplaçant.
(c) retryLostNative : ticker 30 s pour réessayer un natif inaccessible.
(d) IsSelfFallback : natif sans indexeur → s'auto-désigne + runOffloadLoop.
Divergence : Erlang/k8s ont un superviseur externe au composant défaillant
(out-of-process). oc-discovery est self-supervising : chaque goroutine gère
ses propres défaillances (doTick → err → delete + replenish). Cela simplifie
l'architecture mais rend les défaillances en cascade plus difficiles à isoler.
----
3.6 Trust Scoring / Reputation (BitTorrent, Web of Trust PGP, EigenTrust)
--------------------------------------------------------------------------
Pattern : Attribution d'un score de réputation aux pairs selon des métriques
observables (comportement passé, connectivité, uptime). Les pairs à faible score
sont exclus ou dé-priorisés.
oc-discovery : ✅ Implémenté. Score 5 composants avec seuil dynamique :
S = (0.20×U + 0.20×B + 0.20×D + 0.15×L + 0.25×F) × 100
minScore(age) = 20 + 60×min(age/24h, 1)
Similitude avec EigenTrust [Kamvar et al., 2003] : les deux systèmes normalisent
les scores entre 0 et 1, utilisent l'uptime comme signal de fiabilité, et intègrent
un historique temporel.
Divergence majeure : EigenTrust est itératif (convergence en plusieurs rounds de
gossip). oc-discovery calcule le score localement à chaque heartbeat sans
propagation globale. C'est un score observable local (l'indexeur mesure ses propres
pairs), non un score global agrégé par le réseau.
Divergence vs BitTorrent : BitTorrent utilise un score d'échange ("tit-for-tat")
basé sur les octets reçus. oc-discovery mesure la qualité de connexion (latence,
bande passante, uptime, diversité topologique) — des métriques de qualité de
service, pas de réciprocité de comportement.
Source : Kamvar, S. D., Schlosser, M. T., & Garcia-Molina, H. (2003).
"The EigenTrust Algorithm for Reputation Management in P2P Networks."
WWW 2003.
----
3.7 Long-lived Bidirectional Streams (gRPC server-side streaming, WebSocket)
-----------------------------------------------------------------------------
Pattern : Réutilisation d'une connexion persistante pour des échanges multiples,
évitant le coût de connexion (TCP SYN+ACK + TLS 1-RTT) à chaque message.
oc-discovery : ✅ Implémenté. /opencloud/heartbeat/1.0 maintient un stream yamux
persistant pour la durée de vie du pair. Économie estimée : 3 RTT par tick vs
une connexion fresh.
Convergence avec gRPC server-side streaming : même concept — un client ouvre un
stream et le serveur pushed des messages periódicamente. La différence : gRPC est
orienté RPC (request-response unique dans la direction inverse). oc-discovery est
purement unidirectionnel (node → indexer, pas de réponse applicative sur le stream
heartbeat).
================================================================================
4. TABLEAU COMPARATIF SYNTHÉTIQUE
================================================================================
Légende :
✅ présent / similaire ⚠️ partiel / approximatif ❌ absent
┌─────────────────────────────────┬────────┬──────────┬────────┬───────┬────────┬────────┬────────┬──────────┐
│ Critère │oc-disc │Kademlia │FastTrk │Consul │ IPFS │Tor │Ethereum│ZooKeeper │
├─────────────────────────────────┼────────┼──────────┼────────┼───────┼────────┼────────┼────────┼──────────┤
│ Réseau privé / fermé (PSK) │ ✅ │ ❌ │ ❌ │ ⚠️ │ ⚠️ │ ❌ │ ❌ │ ⚠️ │
│ Hiérarchie fonctionnelle 3 niv. │ ✅ │ ❌ │ ✅ │ ⚠️ │ ❌ │ ✅ │ ❌ │ ❌ │
│ DHT Kademlia │ ✅ │ ✅ │ ❌ │ ❌ │ ✅ │ ❌ │ ✅ │ ❌ │
│ Gossip dissémination │ ✅ │ ❌ │ ✅ │ ✅ │ ✅ │ ⚠️ │ ✅ │ ❌ │
│ Heartbeat long-lived (stream) │ ✅ │ ❌ │ ❌ │ ⚠️ │ ❌ │ ❌ │ ❌ │ ✅ │
│ Scoring de confiance multi-dim. │ ✅ │ ❌ │ ⚠️ │ ❌ │ ❌ │ ⚠️ │ ❌ │ ❌ │
│ Consensus de découverte (vote) │ ✅ │ ❌ │ ❌ │ ✅ │ ❌ │ ✅ │ ❌ │ ✅ │
│ Liveness vote 2 phases │ ✅ │ ❌ │ ❌ │ ❌ │ ❌ │ ❌ │ ❌ │ ❌ │
│ Signature cryptographique entrée│ ✅ │ ❌ │ ❌ │ ⚠️ │ ✅ │ ✅ │ ✅ │ ❌ │
│ TTL + GC des entrées │ ✅ │ ⚠️ │ ❌ │ ✅ │ ⚠️ │ ✅ │ ❌ │ ✅ │
│ Self-healing automatique │ ✅ │ ❌ │ ❌ │ ✅ │ ⚠️ │ ❌ │ ⚠️ │ ✅ │
│ Self-fallback (native→indexer) │ ✅ │ ❌ │ ❌ │ ❌ │ ❌ │ ❌ │ ❌ │ ❌ │
│ Consensus fort (Raft/PBFT) │ ❌ │ ❌ │ ❌ │ ✅ │ ❌ │ ⚠️ │ ✅ │ ✅ │
│ Seuil d'admission dynamique │ ✅ │ ❌ │ ❌ │ ❌ │ ❌ │ ❌ │ ❌ │ ❌ │
│ UptimeTracker gap-aware │ ✅ │ ❌ │ ❌ │ ❌ │ ❌ │ ⚠️ │ ❌ │ ❌ │
│ Fill rate routing (bell curve) │ ✅ │ ❌ │ ❌ │ ⚠️ │ ❌ │ ❌ │ ❌ │ ❌ │
│ Pas de PKI tierce │ ✅ │ ✅ │ ✅ │ ❌ │ ✅ │ ❌ │ ✅ │ ❌ │
│ Découverte bootstrapable > 0 │ ✅ │ ⚠️ │ ✅ │ ⚠️ │ ✅ │ ✅ │ ✅ │ ⚠️ │
│ Résistance à la partition WAN │ ✅ │ ⚠️ │ ⚠️ │ ❌ │ ✅ │ ✅ │ ⚠️ │ ❌ │
│ Scalabilité > 10K nœuds │ ⚠️ │ ✅ │ ✅ │ ⚠️ │ ✅ │ ✅ │ ✅ │ ⚠️ │
│ Anonymat / confidentialité pairs│ ❌ │ ❌ │ ❌ │ ❌ │ ⚠️ │ ✅ │ ❌ │ ❌ │
└─────────────────────────────────┴────────┴──────────┴────────┴───────┴────────┴────────┴────────┴──────────┘
================================================================================
5. ANALYSE DES DIVERGENCES STRUCTURELLES FONDAMENTALES
================================================================================
5.1 La hiérarchie sans autorité centrale — originalité principale
------------------------------------------------------------------
oc-discovery réussit un équilibre que peu de systèmes atteignent : une hiérarchie
fonctionnelle à 3 niveaux sans point de centralisation du contrôle. Tor s'en
approche le plus avec ses 9 directory authorities — mais leurs clés sont hardcodées
(décision centralisée). FastTrack et Gnutella2 ont une hiérarchie émergente mais
sans mécanisme de consensus.
La combinaison (hiérarchie statiquement configurée) + (consensus dynamique entre
pairs de même niveau) + (fallback autonome sans coordinateur) est, à notre
connaissance, sans équivalent direct dans les systèmes existants pour la couche
de découverte de services.
5.2 Le score de confiance comme filtre d'admission — contraste avec DHT pures
------------------------------------------------------------------------------
Les DHT pures (Kademlia, Chord, Pastry) n'ont aucun mécanisme d'admission :
tout pair qui connaît le bootstrap peut joindre le réseau. BitTorrent ajoute
le "tit-for-tat" mais c'est un mécanisme de réciprocité, pas de qualité.
EigenTrust est global (agrégation par gossip), non local.
oc-discovery est rare dans sa catégorie : il applique un score de qualité
multi-composant (5 métriques) calculé localement par l'indexeur receveur,
avec un seuil dynamique qui s'adapte à la maturité du pair. Cela ressemble
davantage à une logique de SLA d'entreprise qu'à un protocole P2P académique.
5.3 Le consensus en deux phases — séparation admission/vivacité
---------------------------------------------------------------
Aucun système de découverte P2P parmi ceux étudiés ne sépare explicitement
l'admission (validation d'identité par un tier de confiance) et la vivacité
(validation de présence par les pairs actuels). Cette séparation (principe D19)
est une contribution architecturale originale.
Tor s'en approche le plus : les directory authorities valident l'identité des
relais (admission), et le consensus horaire inclut des métriques de disponibilité
récente (vivacité), mais les deux étapes sont fondues dans un seul vote horaire
des mêmes acteurs, sans séparation structurelle des responsabilités.
5.4 La contrainte PSK — réseau organisationnel, non universel
-------------------------------------------------------------
Le PSK rend oc-discovery fondamentalement différent de tous les systèmes P2P
"ouverts" (IPFS, Ethereum, Bitcoin). C'est un réseau de confiance délimitée,
plus proche des VPN d'entreprise ou des blockchains permissionnées (Hyperledger)
que des réseaux P2P académiques. Cette contrainte simplifie considérablement la
gestion des Sybil attacks (impossibles sans PSK) mais impose une gestion hors-bande
de la distribution de la clé.
5.5 Limites par rapport aux systèmes comparés
----------------------------------------------
(a) Scalabilité : oc-discovery n'a pas été évalué au-delà de quelques centaines
de nœuds. Kademlia, IPFS, et Ethereum sont validés à des millions de nœuds.
Le mesh natif (topologie complète O(n²) entre natifs) ne passera pas à l'échelle
de centaines de natifs.
(b) Indirect probing absent : contrairement à SWIM/Consul, la détection de
défaillance de oc-discovery est directe (heartbeat failure = dead). Un
intermédiaire réseau défaillant peut créer de faux positifs.
(c) Cohérence à terme seulement : contrairement à Consul (Raft CP) ou ZooKeeper
(ZAB CP), oc-discovery offre uniquement une cohérence à terme. Pour des
applications nécessitant une garantie forte de cohérence (config critique,
PKI), un système CP est préférable.
(d) Anonymat absent : Tor garantit l'anonymat des clients. oc-discovery expose
l'identité de tous les pairs à tous les indexeurs (intentionnel : registre
d'identités, pas d'anonymisation).
================================================================================
6. POSITIONNEMENT DANS L'ESPACE DES DESIGNS
================================================================================
Axe 1 : Ouvert ←——————————————————→ Fermé (PSK)
Kademlia, IPFS, Ethereum oc-discovery, Hyperledger Fabric
Axe 2 : Flat ←————————————————————→ Hiérarchique
Kademlia, Bitcoin, Cassandra oc-discovery, Tor, FastTrack
Axe 3 : AP (disponibilité) ←———————→ CP (cohérence forte)
oc-discovery, IPFS, Dynamo Consul, ZooKeeper, etcd
Axe 4 : Score de confiance absent ←→ Présent
Kademlia, Bitcoin, Chord oc-discovery, Tor (flags), EigenTrust
Axe 5 : Court TTL / éphémère ←—————→ Long TTL / persistant
oc-discovery (2min90s) Cassandra, DHT IPFS (jusqu'à 24h)
oc-discovery occupe une position distinctive :
- Fermé (PSK) comme Hyperledger, mais sans PKI centralisée.
- Hiérarchique comme Tor et FastTrack, mais avec consensus entre les hubs.
- AP comme IPFS et Dynamo, mais avec des TTL très courts pour les données
de présence (2 min vs heures/jours).
- Scoring comme Tor et EigenTrust, mais calculé localement (non global).
- Self-healing complet comme Consul et k8s, mais sans orchestrateur externe.
================================================================================
7. RÉSUMÉ
================================================================================
oc-discovery est un système hybride qui emprunte à plusieurs familles de systèmes
décentralisés sans s'identifier pleinement à aucun :
- À FastTrack/Gnutella2 : la hiérarchie supernode/leaf.
- À IPFS/Ethereum : la pile libp2p + Kademlia + GossipSub.
- À Tor : le consensus entre autorités pour valider les participants,
et l'utilisation de l'uptime/bande passante comme critères de qualité.
- À Consul/SWIM : les heartbeats de détection de défaillance et le GC par TTL.
- À EigenTrust : le scoring multi-composant de confiance des pairs.
- À ZooKeeper/Raft : l'idée d'un quorum de vote pour valider un état proposé.
Les principales contributions originales de oc-discovery par rapport à l'état
de l'art sont :
1. La séparation structurelle admission (native) / vivacité (indexer) — D19.
2. Le score dynamique gap-aware avec seuil adaptatif à la maturité du pair.
3. Le routage fill rate par courbe en cloche (w(F) = F×(1-F)).
4. Le mode IsSelfFallback + runOffloadLoop pour la continuité sans indexeur.
5. La combinaison PSK + signatures auto-certifiées sans PKI tierce.
================================================================================
8. NOTE MÉTHODOLOGIQUE
================================================================================
Cette analyse est basée sur une lecture directe des spécifications et publications
académiques référencées. Les comparaisons portent sur les propriétés architecturales
et les mécanismes de protocole, non sur les performances mesurées (oc-discovery
n'ayant pas fait l'objet d'un benchmark à large échelle à la date de rédaction).
Les appréciations ✅/⚠️/❌ dans le tableau comparatif reflètent une analyse
qualitative et peuvent nécessiter une révision en fonction des évolutions
respectives des systèmes comparés.
================================================================================
9. TRAJECTOIRE D'ÉVOLUTION : VERS UN ANNUAIRE NATIF DYNAMIQUE
================================================================================
9.1 Limite actuelle : le pool de natives est statique
------------------------------------------------------
Dans la version actuelle d'oc-discovery, les native indexers sont connus au
démarrage via configuration (StaticNatives). Ce pool évolue partiellement au
runtime (replenishNativesFromPeers) mais reste ancré à une liste d'entrée fixe.
Cette contrainte implique que :
- Chaque native connaît potentiellement tous les indexers → état O(N indexers)
- Le consensus inter-natives est O(natives²) en communication
- Les natives sont des hubs structurellement privilegiés → SPOFs relatifs
- L'ajout d'une nouvelle native requiert une reconfiguration manuelle
À mesure que le réseau grossit, les natives deviennent un goulot d'étranglement
analogue aux super-nodes Gnutella 2 ou aux directory servers de BitTorrent.
9.2 L'analogie avec les indexeurs : un modèle déjà résolu
----------------------------------------------------------
Le problème a déjà été résolu pour les indexers : un nœud démarre avec un pool
de bootstrap (StaticIndexers), puis l'enrichit dynamiquement via les natives
(GetIndexersResponse, scoring, fill rate). Le pool d'indexers est vivant.
La même logique devrait s'appliquer aux natives :
ÉTAT ACTUEL : StaticNatives (boot) → léger enrichissement runtime
CIBLE : StaticNatives (boot seulement) → pool natif vivant et ouvert
Les natives ne seraient plus une liste exhaustive connue de tous, mais un
annuaire distribué auto-organisé, rejoint par bootstrap puis par propagation.
Un nœud démarre avec 1-3 natives connues, et en découvre d'autres par gossip
ou par requête, exactement comme un indexer découvre ses pairs.
9.3 Séparation des rôles : toile vs annuaire
--------------------------------------------
Cette évolution amène à clarifier deux fonctions que l'architecture actuelle
fait porter simultanément aux natives :
INDEXERS — La Toile de Routage
┌─────────────────────────────────────────────────────────────────────────┐
│ Rôle : Acheminer le trafic, servir les requêtes GET/Publish des nodes │
│ Modèle : Pool sélectif, scoring qualité, fill rate, rotation dynamique │
│ Taille : Quelques dizaines par node (pool optimisé, pas exhaustif) │
│ Analogie : CDN edge nodes, Tor relays │
└─────────────────────────────────────────────────────────────────────────┘
NATIVES — L'Annuaire Distribué
┌─────────────────────────────────────────────────────────────────────────┐
│ Rôle : Connaître et diffuser l'existence des indexers disponibles │
│ Modèle : Plus exhaustif que moins, propagation par gossip ou routage │
│ Taille : Peut croître sans limite si le routage est O(log N) │
│ Analogie : DNS racine distribué, Kademlia bootstrap nodes │
└─────────────────────────────────────────────────────────────────────────┘
En séparant ces deux préoccupations, le trafic opérationnel (node ↔ indexer)
est découplé du trafic d'annuaire (indexer ↔ native). Les natives n'absorbent
plus les heartbeats fonctionnels, elles ne font que maintenir un annuaire.
9.4 Inspiration Tapestry : routage O(log N) pour le plan d'annuaire
--------------------------------------------------------------------
Tapestry [Zhao et al., 2004] démontre que des réseaux de millions de nœuds
sont atteignables avec un routage Plaxton digit-by-digit :
log₁₆(1 000 000) ≈ 5 sauts
Table de routage ≈ 5 × 16 = ~80 entrées par nœud
État par nœud = O(log N) — constant en pratique
Appliqué aux natives d'oc-discovery, cela donnerait :
- Les natives forment entre elles un overlay DHT (Kademlia ou Plaxton)
- Chaque native ne connaît que O(log N) autres natives, pas toutes
- Une requête "trouver des indexers de type X" traverse O(log N) natives
- L'ajout d'une nouvelle native = jointure DHT, aucune reconfig centralisée
Les indexers actuels deviendraient des feuilles de cet overlay, enregistrées
auprès de leur native de référence (la plus proche dans l'espace de nommage).
9.5 Résumé de la trajectoire
-----------------------------
Phase 1 (actuel) : Natives statiques, pool d'indexers dynamique
Phase 2 (proche) : Pool de natives dynamique par bootstrap + gossip,
même mécanique que le pool d'indexers (déjà résolu)
Phase 3 (long terme): Natives organisées en overlay DHT O(log N),
annuaire décentralisé sans hub autoritaire fixe,
trafic opérationnel (indexers) découplé du plan
d'annuaire (natives)
Ce chemin n'est pas une rupture architecturale : les primitives libp2p
(Kademlia DHT, GossipSub) sont déjà présentes dans oc-discovery. L'évolution
consiste à étendre leur usage au niveau du plan de contrôle des natives,
plutôt qu'au seul plan de données des records.
================================================================================
10. RÉFÉRENCES
================================================================================
[1] Maymounkov, P. & Mazières, D. (2002). "Kademlia: A Peer-to-Peer Information
System Based on the XOR Metric." IPTPS 2002. Springer LNCS 2429, pp. 53-65.
[2] Stoica, I., Morris, R., Karger, D., Kaashoek, M. F., & Balakrishnan, H.
(2001). "Chord: A Scalable Peer-to-Peer Lookup Service for Internet
Applications." ACM SIGCOMM 2001. doi:10.1145/383059.383071.
[3] Rowstron, A. & Druschel, P. (2001). "Pastry: Scalable, Decentralized Object
Location and Routing for Large-Scale Peer-to-Peer Systems." Middleware 2001.
Springer LNCS 2218.
[4] Benet, J. (2014). "IPFS - Content Addressed, Versioned, P2P File System."
arXiv:1407.3561. https://arxiv.org/abs/1407.3561
[5] libp2p (2019). libp2p Specifications. Protocol Labs.
https://github.com/libp2p/specs
[6] Dingledine, R., Mathewson, N., & Syverson, P. (2004). "Tor: The Second-
Generation Onion Router." USENIX Security Symposium 2004, pp. 303-320.
[7] Das, A., Gupta, I., & Motivala, A. (2002). "SWIM: Scalable Weakly-consistent
Infection-style Process Group Membership Protocol." DSN 2002, pp. 303-312.
[8] DeCandia, G., et al. (2007). "Dynamo: Amazon's Highly Available Key-value
Store." ACM SOSP 2007. doi:10.1145/1294261.1294281.
[9] Hunt, P., Konar, M., Junqueira, F. P., & Reed, B. (2010). "ZooKeeper:
Wait-free Coordination for Internet-scale Systems." USENIX ATC 2010.
[10] Kamvar, S. D., Schlosser, M. T., & Garcia-Molina, H. (2003). "The EigenTrust
Algorithm for Reputation Management in P2P Networks." WWW 2003.
doi:10.1145/775152.775242.
[11] Androulaki, E., et al. (2018). "Hyperledger Fabric: A Distributed Operating
System for Permissioned Blockchains." EuroSys 2018. doi:10.1145/3190508.3190538.
[12] Nakamoto, S. (2008). "Bitcoin: A Peer-to-Peer Electronic Cash System."
https://bitcoin.org/bitcoin.pdf
[13] Ethereum Foundation (2021). "Node Discovery Protocol v5."
https://github.com/ethereum/devp2p/blob/master/discv5/discv5.md
[14] Wood, G. (2016). "Polkadot: Vision for a Heterogeneous Multi-chain Framework."
https://polkadot.network/PolkaDotPaper.pdf
[15] Donenfeld, J. A. (2017). "WireGuard: Next Generation Kernel Network Tunnel."
NDSS 2017. doi:10.14722/ndss.2017.23160.
[16] Demers, A., et al. (1987). "Epidemic Algorithms for Replicated Database
Maintenance." ACM PODC 1987. doi:10.1145/41840.41841.
[17] Kermarrec, A.-M. & van Steen, M. (2007). "Gossiping in Distributed Systems."
ACM SIGOPS Operating Systems Review 41(5), pp. 2-7.
[18] Mazieres, D., Kaminsky, M., Kaashoek, M. F., & Witchel, E. (2000). "Separating
Key Management from File System Security." ACM SOSP 1999. (référencé dans
l'introduction du ARCHITECTURE_PAPER.txt d'oc-discovery)
[19] HashiCorp (2014). Consul Architecture Documentation.
https://developer.hashicorp.com/consul/docs/architecture
[20] Ritter, J. (2001). "Why Gnutella Can't Scale. No, Really."
Clip2 Distributed Search Solutions.
http://clip2.com/GnutellaProtocol04.pdf
================================================================================