Ticketing
Dokumentasi

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.

FieldIsi
last_appliedPosisi log terakhir yang direfleksikan snapshot ini
last_membershipInfo membership (susunan node)
token_seqCounter penerbitan fencing token — direplikasi, sehingga monotonisitas token tetap terjaga bahkan saat leader berganti
locksDaftar (key, token, remain_ms) — setiap lock yang sedang dipegang dan sisa lease-nya
  • remain_ms adalah sisa lease dalam milidetik pada saat snapshot diambil. Node yang menginstalnya memulihkan waktu expiry sebagai now + remain_ms menurut 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.