Ett distribuerat konsensusmeddelandeprotokoll (DCMP) i ett peer-to-peer (P2P) -nätverk måste uppfylla flera funktionella krav för att säkerställa tillförlitlig och konsekvent meddelanden trots den decentraliserade och potentiellt opålitliga karaktären i nätverket. Dessa krav kan i stort sett kategoriseras enligt följande:
1. Meddelandebeställning och leverans:
* Pålitlig leverans: DCMP måste garantera att meddelanden levereras till alla deltagande noder, även inför nodfel eller nätverkspartitioner. Detta involverar vanligtvis mekanismer som erkännanden, överföringar och potentiellt en form av meddelandets uthållighet.
* Total beställning: För många applikationer är en total beställning av meddelanden över alla noder avgörande. Detta innebär att alla noder är överens om samma sekvens av meddelanden, oavsett den ordning de mottogs. Detta är ofta den mest utmanande aspekten av DCMP -implementeringen.
* Kausalitetskonservering: Protokollet bör bevara meddelandets kausala ordning. Om meddelandet A orsakar meddelande B (t.ex. A triggers B), bör B levereras efter A på alla noder.
* feltolerans: Protokollet måste fortsätta att fungera korrekt även om vissa noder misslyckas eller lämnar nätverket. Detta kan involvera mekanismer för att upptäcka och hantera nodfel och eventuellt välja nya ledare eller samordnare.
2. Konsensus och avtal:
* Avtal: Alla ärliga noder måste så småningom komma överens om samma uppsättning levererade meddelanden. Detta är det grundläggande målet med ett konsensusprotokoll.
* Konsistens: Den överenskomna meddelandens sekvens måste vara förenlig med kausalordern och de totala beställningskraven.
* Uppsägning: Konsensusprocessen måste så småningom avslutas, även om vissa noder är felaktiga.
3. Medlemskapsledning:
* nodupptäckt: Protokollet behöver en mekanism för noder för att upptäcka och ansluta till andra noder i nätverket. Detta kan involvera tekniker som skvaller eller distribuerade hashtabeller (DHTS).
* dynamiskt medlemskap: Protokollet bör hantera tillägg och borttagning av noder dynamiskt utan att störa konsensusprocessen. Detta kan involvera mekanismer för att upptäcka nodförfogningar och löv och uppdatera nätverkstopologin i enlighet därmed.
4. Säkerhet:
* autentisering: Protokollet bör verifiera äktheten för meddelanden för att förhindra obehörig meddelandesinjektion eller modifiering. Digitala signaturer eller andra kryptografiska tekniker används vanligtvis.
* Integritet: Protokollet måste säkerställa integriteten hos meddelanden och förhindra att de ändras under överföringen. Kontrollsummor eller meddelandesautentiseringskoder (MAC) kan användas.
* Konfidentialitet (valfritt): Beroende på applikationen kan protokollet behöva ge konfidentialitet för att skydda innehållet i meddelanden från obehörig åtkomst. Kryptering kan användas för att uppnå detta.
5. Effektivitet:
* låg latens: Protokollet bör leverera meddelanden med låg latens för att minimera förseningar i applikationen.
* Låg bandbreddförbrukning: Protokollet bör minimera mängden nätverksbandbredd som konsumeras.
* skalbarhet: Protokollet bör kunna skala till ett stort antal noder utan betydande prestanda nedbrytning.
Dessa är de viktigaste funktionella kraven. De specifika implementeringsdetaljerna kommer att bero på den valda konsensusalgoritmen (t.ex. Paxos, RAFT, PBFT) och andra designval. Valet av algoritm kommer att påverka avvägningarna mellan de olika kraven, särskilt skalbarhet och feltolerans. Till exempel är PBFT mycket feltolerant men skalas inte bra, medan Raft och Paxos erbjuder bättre skalbarhet men med något mindre feltolerans i vissa scenarier.