Peer-to-peer beschrijft hoe pakketten van toepassingen reizen, en niets meer. De peers moesten elkaar nog steeds vinden, bewijzen wie ze zijn en soms terugvallen op een relay wanneer er geen direct pad kon worden opgebouwd. Dat zijn drie afzonderlijke diensten, en een implementatie kan peer-to-peer zijn voor data terwijl ze voor al het andere volledig gecentraliseerd is. Ontwerpen vergelijken betekent die taken vergelijken, niet de pijl op het diagram.

Een diagram zonder centrale doorstuurpijl kan een inschrijvingsautoriteit, een discoverydienst en een relay verbergen, die allemaal operationele afhankelijkheden zijn.

Direct pad, gedeeld besturingsvlak

Twee machines die pakketten rechtstreeks uitwisselen, kunnen nog steeds afhankelijk zijn van een gedeelde autoriteit die hun certificaten heeft uitgegeven en van een dienst die elk vertelde waar de ander zit. Geen van beide rollen stuurt verkeer van toepassingen door, daarom laat de topologietekening ze weg. Als die autoriteit of dienst uitvalt, kunnen bestaande sessies doorlopen terwijl een nieuwe peer niet kan toetreden. Het verschil tussen een sessie beginnen en een sessie voortzetten is de eerste vraag die je bij elk ontwerp moet stellen.

Teken elke taak apart, zelfs wanneer één host ze allemaal uitvoert. Anders toont de tekening een gedecentraliseerd dataplane en verbergt ze de operationele werkelijkheid dat elke nieuwe peer dezelfde twee diensten nodig heeft.

Discovery, vertrouwen en relay zijn drie taken

Het ontwerp van Nebula is een bruikbaar voorbeeld omdat de documentatie deze taken gescheiden houdt. Hosts dragen certificaten voor identiteit, vuurtorens beantwoorden de waar-is-vraag en helpen bij NAT-traversal, en relays sturen verkeer door wanneer er geen direct pad kan worden opgezet. De relayrol is bewust losgekoppeld van de vuurtorenrol, dus een bereikbare vuurtoren belooft niet dat een bepaald paar met elkaar kan praten. Andere producten trekken de grenzen elders, daarom is dit een voorbeeld en geen sjabloon.

Schrijf voor een voorgestelde implementatie de ondersteunde terugval op voor een paar dat niet rechtstreeks kan verbinden. Een mislukte hole-punch is één datapunt over één netwerk, geen bewijs dat twee NAT-peers elkaar nooit kunnen ontmoeten; de tegenovergestelde bewering, dat directe verbinding onder willekeurig beleid werkt, is evenzeer ongefundeerd.

Waar elke afhankelijkheid op faalt

Evalueer vier gevallen apart terwijl de geteste afhankelijkheid niet beschikbaar is: bestaand peerverkeer, een gloednieuwe peerverbinding, een peer waarvan het eindpunt is veranderd, en toegang die zojuist is ingetrokken. Elk leunt op andere diensten en faalt anders. Bestaande sessies kunnen een storing in discovery overleven terwijl een ingetrokken sleutel nog steeds wordt geweigerd, en een nieuwe peer kan falen om redenen die niets met doorsturen te maken hebben. Test ze afzonderlijk in plaats van uit één geval te concluderen.

Een verbinding die één storing overleeft, vestigt geen onbeperkte onafhankelijkheid. Ze vestigt dat de storing die jij veroorzaakte niet de storing was die dat pad breekt, wat nog steeds nuttige informatie is mits je hebt opgeschreven wat je veroorzaakte.

Vraag welke storing je kunt overleven

Eisen die hetzelfde klinken leiden tot verschillende ontwerpen. Één doorstuurknelpunt vermijden is niet hetzelfde als een door een leverancier gehost besturingsvlak vermijden, en geen van beide komt overeen met blijven werken terwijl een coördinator uitvalt. Benoem welke van die drie de implementatie moet halen en controleer dan de toewijzing. Een ontwerp dat de eerste haalt en de tweede mist, komt vaak voor en is niet oneerlijk, zolang niemand het volledig gedecentraliseerd noemt.

Leg vast wie discovery, vertrouwen en relays beheert en hoe elk wordt vervangen. Dat verslag stelt de volgende persoon in staat een echte vraag te beantwoorden: welke storingen overleeft dit netwerk, en wie onderhoudt de status die gedeeld blijft?

Het woord gedecentraliseerd verdient zijn plek wanneer het die storingen benoemt. Zonder die lijst beschrijft het een diagram in plaats van een systeem.

Gerelateerde artikelen