RPC 종류
프레임의 tag가 RPC 종류를 결정합니다. payload는 모두 openraft 타입을 postcard로 직렬화한 것입니다.
| tag | 이름 | 요청 payload | 응답 payload | 역할 |
|---|---|---|---|---|
1 | Vote | VoteRequest | VoteResponse | 리더 선거 — 후보가 다른 노드에 투표를 요청 |
2 | AppendEntries | AppendEntriesRequest | AppendEntriesResponse | 로그 복제 + 하트비트 — 리더가 복제 명령을 팔로워에게 전파 |
3 | FullSnapshot | (Vote, SnapshotMeta, snapshot_bytes) 튜플 | SnapshotResponse | 뒤처진 노드에 스냅숏 전체를 전송 |
- Vote — 리더가 죽으면 하트비트가 끊긴 노드가 후보가 되어 투표를 요청하고, 과반 득표한 노드가 새 리더가 됩니다.
- AppendEntries — 리더가 커밋할 락 명령을 로그 엔트리로 실어 보냅니다. 엔트리가 없는 AppendEntries가 곧 하트비트입니다 — 별도의 하트비트 메시지가 없습니다.
- FullSnapshot — 로그로 따라잡기에 너무 뒤처진(또는 새로 합류한) 노드에게 현재 상태 전체를 보냅니다. 스트리밍 없이 프레임 하나로 통째로 전송됩니다.
용어
- 로그 복제(log replication) — 리더가 결정한 명령을 순서 붙은 일지(log)로 만들어 팔로워들이 그대로 받아 적게 하는 것. 같은 일지를 같은 순서로 적용하면 모든 노드가 같은 상태가 됩니다.
- 하트비트(heartbeat) — "나 살아 있음"을 알리는 주기 신호. 이게 끊기면 팔로워들이 리더가 죽었다고 판단하고 선거를 시작합니다.