프레임 구조
Raft RPC를 나르는 길이-프리픽스 바이너리 프레이밍입니다. 클라이언트 프로토콜의 \n 종결 프레임과 달리, 길이를 먼저 보내고 그만큼 읽습니다. 연결당 요청-응답이 순차로 오가며, 항상 부른(dial) 쪽이 요청자입니다.
요청 (부른 쪽 → 받은 쪽)
구조
예제 refresh
응답 (받은 쪽 → 부른 쪽)
구조
예제 refresh
| 필드 | 크기 | 내용 |
|---|---|---|
tag | u8 | RPC 종류 — RPC 종류 참고 (요청에만 있음) |
len | u32, 빅엔디안 | 뒤따르는 payload의 바이트 수 |
payload | len바이트 | postcard 포맷으로 직렬화된 openraft 타입 |
연결 관리 규칙
len상한은 64 MiB입니다(수신 시 검사). 초과하거나 비정상인 프레임, 알 수 없는tag, Raft 처리 오류는 모두 연결을 닫는 것으로 처리하고, 부른 쪽(openraft)이 재접속해 재시도합니다.- 부르는 쪽은 대상 노드당 연결 하나를 재사용합니다. I/O 오류가 나거나 왕복이 중간에 취소되면 그 연결을 버리고 다음 호출에서 새로 접속합니다 — 반쯤 읽힌 스트림이 어긋난 채 재사용되는 일이 없습니다.
용어
- 길이-프리픽스(length-prefix) — 본문의 길이를 먼저 보내고 그 바이트 수만큼 읽는 프레이밍.
\n같은 구분자를 찾을 필요가 없어 임의의 이진 데이터를 그대로 실을 수 있습니다. - 직렬화(serialization) — 메모리 안의 구조체를 전송 가능한 바이트열로 바꾸는 것.
- RPC(remote procedure call) — 다른 서버의 함수를 네트워크 너머에서 호출하듯 주고받는 요청-응답 한 쌍.