Jenis RPC
tag pada frame menentukan jenis RPC. Setiap payload adalah tipe openraft yang diserialisasi dengan postcard.
| tag | Nama | Payload request | Payload respons | Peran |
|---|---|---|---|---|
1 | Vote | VoteRequest | VoteResponse | Pemilihan leader — kandidat meminta suara ke node lain |
2 | AppendEntries | AppendEntriesRequest | AppendEntriesResponse | Replikasi log + heartbeat — leader menyebarkan command yang direplikasi ke follower |
3 | FullSnapshot | tuple (Vote, SnapshotMeta, snapshot_bytes) | SnapshotResponse | Mengirim seluruh snapshot ke node yang tertinggal |
- Vote — saat leader mati, node yang heartbeat-nya berhenti menjadi kandidat dan meminta suara; node yang meraih mayoritas menjadi leader baru.
- AppendEntries — leader membawa command lock untuk di-commit sebagai entry log. AppendEntries tanpa entry adalah heartbeat itu sendiri — tidak ada pesan heartbeat terpisah.
- FullSnapshot — mengirim seluruh status saat ini ke node yang terlalu tertinggal untuk mengejar lewat log (atau yang baru bergabung). Dikirim utuh, dalam satu frame, tanpa streaming.
Alur — Saat Leader Mati
Node A
Node B
Node C
mendeteksi heartbeat leader hilang → menjadi kandidat
Vote · meminta suara
Vote · meminta suara
ya
mayoritas termasuk dirinya sendiri → leader baru
AppendEntries (tanpa entry = heartbeat)
AppendEntries (tanpa entry = heartbeat)
RPC konsensus (Raft)
Begitu heartbeat pertama dari leader baru terpilih tiba, cluster kembali ke layanan normal — total jeda biasanya 0,5-1 detik. Lihat Command yang Direplikasi untuk alur AppendEntries (replikasi log) saat operasi normal.
Terminologi
- replikasi log — leader mengubah command yang sudah diputuskan menjadi log berurutan dan membuat follower mencatatnya persis sama. Menerapkan log yang sama dalam urutan yang sama membawa setiap node ke status yang sama.
- heartbeat — sinyal "aku masih hidup" yang dikirim berkala. Saat berhenti, follower menyimpulkan leader telah mati dan memulai pemilihan.