Snapshot
Node yang terlalu tertinggal untuk mengejar lewat log (mis. tepat setelah restart) dikirimi seluruh status saat ini lewat RPC FullSnapshot. Di dalam snapshot_bytes adalah struktur berikut, diserialisasi dengan postcard.
| Field | Isi |
|---|---|
last_applied | Posisi log terakhir yang direfleksikan snapshot ini |
last_membership | Info membership (susunan node) |
token_seq | Counter penerbitan fencing token — direplikasi, sehingga monotonisitas token tetap terjaga bahkan saat leader berganti |
locks | Daftar (key, token, remain_ms) — setiap lock yang sedang dipegang dan sisa lease-nya |
remain_msadalah sisa lease dalam milidetik pada saat snapshot diambil. Node yang menginstalnya memulihkan waktu expiry sebagainow + remain_msmenurut jamnya sendiri — tidak pernah mengirim timestamp absolut, sehingga perbedaan jam antar-node tidak berpengaruh.- Milidetik hanya dipakai di sini saja, demi presisi (satuan yang dihadapi klien adalah detik).
- Log Raft bersifat in-memory (volatile). Node yang di-restart boot dengan status kosong, lalu mengejar lewat replikasi log peer atau snapshot ini — status yang sudah di-commit tetap terjaga selama mayoritas masih hidup.
Alur
Leader
Node tertinggal
tepat setelah restart — boot dengan status kosong
AppendEntries
terlalu tertinggal untuk mengejar lewat log
FullSnapshot — seluruh status dalam satu frame
instalasi: memulihkan tiap lock sebagai now + remain_ms
kembali ke entry log AppendEntries biasa
RPC konsensus (Raft)
Terminologi
- snapshot — salinan utuh status pada satu titik waktu tertentu. Ini memungkinkan node yang tertinggal untuk menginstal snapshot dan hanya mengikuti entry log setelahnya, alih-alih memutar ulang semuanya dari awal.
- membership — daftar node yang menyusun cluster dan informasi perannya.