Back to IF3130 Sistem Paralel dan Terdistribusi

Topic: Algoritma Raft (Understandable Consensus)

Questions/Cues

  • Filosofi Raft vs Paxos

  • Replicated State Machine

  • 3 Status Server (Leader, Follower, Candidate)

  • Konsep Term & Waktu Logis

  • Algoritma Leader Election (Detail)

  • Randomized Timeout

  • Log Replication (AppendEntries RPC)

  • Log Consistency Property

  • Safety: Leader Completeness

  • Penanganan Log Inkonsisten

Reference Points

  • Slides: IF3130-19-Raft-2022.pdf

  • Fokus: Konsensus yang Mudah Dipahami & Diimplementasikan

1. Latar Belakang & Filosofi Raft

Raft diciptakan oleh Diego Ongaro dan John Ousterhout (Stanford) sebagai alternatif dari Paxos.

  • Masalah Paxos: Paxos dianggap sangat sulit dipahami (difficult to understand) dan sulit diimplementasikan dengan benar dalam sistem nyata.

  • Tujuan Raft: Menyediakan algoritma konsensus yang setara dengan Paxos dalam hal efisiensi dan keamanan, namun jauh lebih mudah dipahami (Understandable).

  • Pendekatan Desain: Raft memecah masalah konsensus yang kompleks menjadi beberapa sub-masalah independen yang lebih kecil:

    1. Leader Election: Memilih pemimpin yang kuat.

    2. Log Replication: Leader menerima perintah dan menyebarkannya.

    3. Safety: Menjamin keamanan data (konsistensi).

2. Konsep Dasar: Replicated State Machine

Raft digunakan untuk membangun Replicated State Machine.

  • Prinsip: Jika sekumpulan mesin mengeksekusi urutan perintah (log) yang identik dalam urutan yang sama, maka State Machine mereka akan berakhir pada status yang sama.

  • Peran Raft: Menjamin bahwa Log (catatan perintah) ter-replikasi secara konsisten di semua server, meskipun ada kegagalan server.

  • Alur Data: Client Leader Log State Machine.

3. Status Server (Server States)

Dalam setiap waktu, setiap server dalam klaster Raft hanya bisa berada dalam satu dari tiga status:

  1. Follower:

    • Bersifat pasif. Tidak pernah memulai komunikasi sendiri.

    • Hanya merespon RequestVote dari Candidate atau AppendEntries dari Leader.

    • Jika tidak mendengar kabar (heartbeat) dari Leader dalam waktu tertentu, ia berasumsi Leader mati dan berubah menjadi Candidate.

  2. Candidate:

    • Status transisi saat pemilihan pemimpin (election).

    • Meminta suara (vote) dari server lain.

    • Bisa menang (jadi Leader), kalah (jadi Follower), atau seri (split vote).

  3. Leader:

    • Menangani semua request dari klien.

    • Mereplikasi log ke semua follower.

    • Mengirim Heartbeat berkala untuk mempertahankan kekuasaan.

    • Strong Leader: Log hanya mengalir dari Leader ke Follower, tidak pernah sebaliknya.

4. Konsep Waktu: Term

Waktu di Raft dibagi menjadi interval logis yang disebut Term.

  • Term adalah angka integer yang terus naik (monotonik).

  • Setiap Term dimulai dengan Election.

  • Jika Election berhasil, sisa Term tersebut dipimpin oleh Leader tunggal tersebut.

  • Jika Election gagal (split vote), Term berakhir tanpa Leader, dan Term baru dimulai segera.

  • Fungsi Term: Bertindak sebagai waktu logis (logical clock) untuk mendeteksi informasi usang. Jika server menerima pesan dengan Term < CurrentTerm, pesan itu ditolak.

5. Mekanisme Leader Election

Leader dipilih agar sistem punya satu koordinator otoritatif.

Pemicu: Follower tidak menerima Heartbeat selama periode Election Timeout.

Algoritma Pemilihan:

  1. Follower menaikkan currentTerm.

  2. Berubah status jadi Candidate.

  3. Memberikan suara (vote) ke diri sendiri.

  4. Mengirim RequestVote RPC ke semua server lain secara paralel.

Tiga Kemungkinan Hasil:

  • Menang: Menerima vote dari mayoritas server (). Langsung kirim Heartbeat ke semua untuk deklarasi kemenangan.

  • Kalah: Menerima RPC dari Leader lain yang valid (Term Term sendiri). Kembali jadi Follower.

  • Timeout (Split Vote): Tidak ada yang mayoritas (misal 5 server, suara 2-2-1). Candidate menunggu timeout habis, lalu mulai election baru dengan Term baru.

Solusi Split Vote: Randomized Timeout

Raft menggunakan rentang waktu acak untuk timeout (misal 150ms - 300ms). Ini memastikan jarang ada dua server yang bangun dan jadi kandidat secara bersamaan.

6. Log Replication (Operasi Normal)

Setelah Leader terpilih, ia melayani request klien.

Langkah-langkah Replikasi:

  1. Client Request: Klien mengirim perintah (misal x <- 3) ke Leader.

  2. Append Local: Leader menulis perintah ke Log lokalnya (belum di-commit).

  3. Replicate: Leader mengirim AppendEntries RPC ke semua Follower secara paralel.

  4. Ack: Follower menulis ke log mereka dan membalas “Sukses”.

  5. Commit: Setelah mayoritas follower membalas sukses, Leader menganggap entri tersebut Committed.

  6. Apply: Leader mengeksekusi perintah ke State Machine dan membalas hasil ke Klien.

  7. Notify: Leader memberitahu Follower (via AppendEntries berikutnya) bahwa entri sudah commit, sehingga Follower juga mengeksekusinya.

7. Menjaga Konsistensi Log (Log Matching Property)

Raft sangat ketat menjaga struktur log agar identik.

Properti Log:

  1. Jika dua entri di server berbeda memiliki Index dan Term yang sama, maka perintahnya PASTI sama.

  2. Jika dua entri identik, maka semua entri sebelumnya di log tersebut juga PASTI identik.

Consistency Check:

Saat Leader mengirim log baru (Index N), ia menyertakan info log sebelumnya (Index N-1, Term N-1).

  • Follower mengecek: “Apakah saya punya log di Index N-1 dengan Term itu?”

  • Jika TIDAK (Log follower tertinggal atau beda sejarah): Follower menolak request (return false).

  • Perbaikan (Repair): Leader mundur (decrement) nextIndex untuk follower tersebut dan mencoba mengirim log yang lebih lama, terus mundur sampai ketemu titik kesamaan log. Setelah ketemu, log follower yang konflik akan ditimpa oleh log Leader.

8. Safety: Leader Completeness

Tidak sembarang server boleh jadi Leader.

  • Aturan: Candidate hanya boleh menang jika log-nya setidaknya se-update log mayoritas.

  • Saat RequestVote, Candidate menyertakan info log terakhirnya (lastLogIndex, lastLogTerm).

  • Voter menolak memberi suara jika log Candidate lebih “tua” dari log Voter.

  • Ini menjamin Leader yang terpilih pasti memiliki semua entri yang sudah committed (karena entri committed pasti ada di mayoritas).

Summary

Raft didesain untuk understandability dengan memisahkan konsensus menjadi Leader Election, Log Replication, dan Safety. Raft menggunakan model Strong Leader di mana Leader memegang kendali penuh atas log. Election menggunakan timeout acak untuk menghindari deadlock. Log Replication menjamin konsistensi melalui Log Matching Property dan mekanisme perbaikan otomatis di mana Leader memaksa log Follower untuk sama dengannya. Fitur keamanan (Safety) menjamin bahwa Leader yang terpilih selalu memiliki semua data yang sudah dikonfirmasi (committed), mencegah data hilang.