Frame-Struktur
Die längen-präfixierte binäre Rahmung, die Raft-RPCs trägt. Anders als bei den \n-terminierten Frames des Client-Protokolls wird zuerst die Länge gesendet und dann genau diese Anzahl an Bytes gelesen. Anfrage-Antwort-Paare auf einer Verbindung laufen sequenziell hin und her, und die anwählende Seite ist immer der Anfragende.
Anfrage (Anwähler → Empfänger)
Strukturrefresh
Antwort (Empfänger → Anwähler)
Strukturrefresh
| Feld | Größe | Inhalt |
|---|---|---|
tag | u8 | RPC-Typ — siehe RPC-Typen (nur bei Anfragen) |
len | u32, big-endian | Byte-Länge der nachfolgenden Payload |
payload | len Byte | Ein openraft-Typ, serialisiert im postcard-Format |
Regeln zur Verbindungsverwaltung
lenist auf 64 MiB begrenzt (beim Empfang geprüft). Ein Frame über dem Limit, ein fehlerhafter Frame, ein unbekanntestagoder ein Raft-Verarbeitungsfehler werden alle durch Schließen der Verbindung behandelt — die anwählende Seite (openraft) verbindet sich neu und versucht es erneut.- Die anwählende Seite verwendet eine Verbindung pro Zielknoten wieder. Bei einem E/A-Fehler oder wenn ein Umlauf mittendrin abgebrochen wird, wird diese Verbindung verworfen und beim nächsten Aufruf eine neue angewählt — ein halb gelesener Stream wird niemals in einem unausgerichteten Zustand wiederverwendet.
Begriffe
- Längen-Präfix (length-prefix) — eine Rahmung, die zuerst die Länge des Bodys sendet und dann genau diese Anzahl an Bytes liest. Es wird kein Trennzeichen wie
\nbenötigt, sodass beliebige Binärdaten unverändert transportiert werden können. - Serialisierung — das Umwandeln einer In-Memory-Struktur in eine für den Transport geeignete Byte-Sequenz.
- RPC (Remote Procedure Call) — ein Anfrage-Antwort-Paar, das eine Funktion auf einem anderen Server über das Netzwerk aufruft, als würde man sie lokal aufrufen.