menuTicketing
문서search

프레임 구조

Raft RPC를 나르는 길이-프리픽스 바이너리 프레이밍입니다. 클라이언트 프로토콜의 \n 종결 프레임과 달리, 길이를 먼저 보내고 그만큼 읽습니다. 연결당 요청-응답이 순차로 오가며, 항상 부른(dial) 쪽이 요청자입니다.

요청 (부른 쪽 → 받은 쪽)

구조
예제 refresh

응답 (받은 쪽 → 부른 쪽)

구조
예제 refresh
필드크기내용
tagu8RPC 종류 — RPC 종류 참고 (요청에만 있음)
lenu32, 빅엔디안뒤따르는 payload의 바이트 수
payloadlen바이트postcard 포맷으로 직렬화된 openraft 타입

연결 관리 규칙

  • len 상한은 64 MiB입니다(수신 시 검사). 초과하거나 비정상인 프레임, 알 수 없는 tag, Raft 처리 오류는 모두 연결을 닫는 것으로 처리하고, 부른 쪽(openraft)이 재접속해 재시도합니다.
  • 부르는 쪽은 대상 노드당 연결 하나를 재사용합니다. I/O 오류가 나거나 왕복이 중간에 취소되면 그 연결을 버리고 다음 호출에서 새로 접속합니다 — 반쯤 읽힌 스트림이 어긋난 채 재사용되는 일이 없습니다.

용어

  • 길이-프리픽스(length-prefix) — 본문의 길이를 먼저 보내고 그 바이트 수만큼 읽는 프레이밍. \n 같은 구분자를 찾을 필요가 없어 임의의 이진 데이터를 그대로 실을 수 있습니다.
  • 직렬화(serialization) — 메모리 안의 구조체를 전송 가능한 바이트열로 바꾸는 것.
  • RPC(remote procedure call) — 다른 서버의 함수를 네트워크 너머에서 호출하듯 주고받는 요청-응답 한 쌍.