Pengantar

Dalam dunia distributed systems, menjaga agar beberapa server tetap memiliki data dan kondisi yang konsisten bukanlah pekerjaan sederhana. Ketika sebuah sistem berjalan pada banyak server, kegagalan satu node, gangguan jaringan, atau keterlambatan komunikasi dapat menyebabkan setiap server memiliki kondisi yang berbeda.

Untuk mengatasi masalah tersebut, sistem terdistribusi membutuhkan consensus algorithm atau algoritma konsensus. Salah satu algoritma yang banyak digunakan dan dikenal karena desainnya yang relatif mudah dipahami adalah Raft Consensus Algorithm.

Raft dirancang oleh Diego Ongaro dan John Ousterhout sebagai algoritma konsensus untuk mengelola replicated log. Raft memiliki tujuan yang setara dengan Paxos dalam hal konsensus, tetapi dirancang dengan fokus pada kemudahan pemahaman. (dikutip dari: USENIX – In Search of an Understandable Consensus Algorithm)


Apa Itu Raft Consensus Algorithm?

Raft adalah leader-based consensus algorithm yang digunakan untuk menjaga konsistensi data pada sistem terdistribusi.

Konsep utamanya adalah memilih satu server sebagai leader. Leader bertanggung jawab menerima permintaan dari client, mengelola replicated log, dan meneruskan perubahan tersebut kepada server lain yang berperan sebagai follower.

Dalam sebuah cluster Raft, setiap node memiliki salah satu dari tiga status:

  • Follower
  • Candidate
  • Leader

Raft juga membagi operasi cluster ke dalam periode yang disebut term. Setiap term memiliki nomor yang terus meningkat dan biasanya berkaitan dengan proses pemilihan leader.

Dengan pendekatan tersebut, Raft membuat proses konsensus menjadi lebih terstruktur dan mudah dipahami.

baca juga : JSON Web Token (JWT) None Algorithm Attack: Bahaya Token Tanpa Signature dan Cara Mencegahnya


Mengapa Consensus Dibutuhkan?

Bayangkan sebuah aplikasi menggunakan tiga server untuk menyimpan informasi yang sama.

              Client
                 |
                 v
             +-------+
             | Leader|
             +-------+
              /     \
             /       \
            v         v
       +---------+ +---------+
       |Follower | |Follower |
       +---------+ +---------+

Ketika client mengirim perubahan data, leader tidak cukup hanya menyimpan perubahan tersebut pada dirinya sendiri. Data juga perlu direplikasi ke node lainnya.

Masalah muncul ketika salah satu server mengalami gangguan.

Misalnya terdapat tiga server:

  • Server A
  • Server B
  • Server C

Jika Server A menjadi leader dan kemudian mengalami kegagalan, sistem harus menentukan siapa yang menjadi leader berikutnya tanpa menyebabkan data yang sudah disepakati menjadi tidak konsisten.

Di sinilah mekanisme consensus seperti Raft berperan.


Komponen Utama Raft

1. Leader

merupakan node yang bertanggung jawab mengelola operasi utama dalam cluster.

Leader menerima request dari client dan membuat entry baru pada replicated log. Setelah itu, entry tersebut dikirimkan kepada follower untuk direplikasi.

Secara sederhana:

Client
   |
   | Request
   v
Leader
   |
   | Replicate Log
   +---------> Follower
   |
   +---------> Follower

Pendekatan ini membuat aliran data lebih sederhana karena operasi log terutama bergerak dari leader menuju follower.

2. Follower

merupakan node yang mengikuti keputusan leader.

Follower dapat menerima replicated log dan memberikan respons kepada leader. Jika follower tidak menerima komunikasi dari leader dalam waktu tertentu, follower dapat menganggap leader mengalami kegagalan dan memulai proses pemilihan leader baru.

3. Candidate

Candidate adalah status sementara ketika sebuah node mencoba menjadi leader.

Ketika follower mengalami election timeout sebelum menerima komunikasi dari leader, node tersebut berubah menjadi candidate dan meminta vote dari node lain.

Jika mendapatkan mayoritas suara, candidate tersebut menjadi leader.


Bagaimana Proses Leader Election pada Raft?

Salah satu bagian penting dari Raft adalah leader election.

Pada kondisi normal, sebuah cluster memiliki satu leader. Namun, ketika leader gagal atau tidak dapat berkomunikasi dengan node lain, cluster harus memilih leader baru.

Prosesnya dapat digambarkan sebagai berikut:

Follower
   |
   | Election Timeout
   v
Candidate
   |
   | Request Vote
   v
Node lain
   |
   | Majority Vote
   v
Leader Baru

Election Timeout

Setiap follower memiliki timer yang disebut election timeout.

Jika follower masih menerima komunikasi dari leader, timer akan terus di-reset.

Namun, jika komunikasi tidak diterima dalam waktu tertentu, follower menganggap kemungkinan leader mengalami masalah.

Node tersebut kemudian:

  1. Menaikkan nomor term.
  2. Berubah menjadi candidate.
  3. Memberikan suara untuk dirinya sendiri.
  4. Mengirim permintaan vote kepada node lain.
  5. Menunggu hasil pemungutan suara.

Jika candidate mendapatkan mayoritas suara, node tersebut menjadi leader.


Mengapa Mayoritas Sangat Penting?

Raft menggunakan konsep majority atau quorum.

Misalnya terdapat tiga node:

Node A
Node B
Node C

Mayoritas dari tiga node adalah dua.

Artinya, keputusan penting harus mendapatkan dukungan dari setidaknya dua node.

Untuk cluster dengan lima node, mayoritasnya adalah tiga.

Jumlah Node Mayoritas
3 2
5 3
7 4

Konsep ini membantu sistem tetap dapat bekerja ketika sebagian node mengalami kegagalan.

Sebagai contoh, pada cluster dengan lima node, satu atau dua node masih dapat mengalami kegagalan dan cluster tetap memiliki mayoritas.


Log Replication pada Raft

Setelah leader berhasil dipilih, proses berikutnya adalah log replication.

Setiap perubahan yang dilakukan terhadap replicated state machine dicatat dalam log.

Misalnya client menjalankan perintah:

SET username = "adhe"

Leader akan membuat log entry:

Index: 10
Term : 5
Command: SET username = "adhe"

Kemudian leader mengirimkan entry tersebut kepada follower.

Leader
  |
  | Entry 10
  +----------> Follower 1
  |
  +----------> Follower 2

Jika entry telah direplikasi ke mayoritas node, entry tersebut dapat dianggap committed dan kemudian diterapkan pada state machine.


Apa Itu Replicated Log?

Replicated log merupakan catatan berurutan yang berisi perubahan atau command yang harus diterapkan oleh sistem.

Tujuannya adalah memastikan setiap node dapat menjalankan command yang sama dalam urutan yang sama.

Contohnya:

Log:

1. CREATE USER
2. SET USERNAME
3. UPDATE EMAIL
4. DELETE SESSION

Jika seluruh node menerapkan entry tersebut dalam urutan yang sama, state akhir dari setiap node dapat tetap konsisten.

Raft memang dirancang untuk mengelola replicated log dan menjaga agar beberapa server dapat mempertahankan replicated state machine yang konsisten. (dikutip dari: Raft Official Website).

baca juga : VLAN Hopping: Mengenal Serangan Layer 2 yang Dapat Menembus Segmentasi Jaringan


Bagaimana Raft Menangani Kegagalan Server?

Salah satu alasan consensus algorithm penting adalah karena server dalam distributed system dapat mengalami kegagalan.

Misalnya terdapat tiga node:

        Leader
          |
    +-----+-----+
    |           |
Follower 1   Follower 2

Kemudian leader mengalami crash.

       X Leader
          |
    +-----+-----+
    |           |
Follower 1   Follower 2

Follower yang tidak lagi menerima komunikasi dari leader dapat memasuki proses election.

Jika salah satu node mendapatkan mayoritas suara, node tersebut menjadi leader baru.

      Leader Baru
          |
    +-----+-----+
    |           |
Follower 1   Follower 2

Dengan mekanisme tersebut, sistem tidak harus bergantung pada satu server secara permanen.


Apa yang Terjadi Jika Terjadi Network Partition?

Selain server crash, distributed system juga dapat mengalami network partition.

Network partition terjadi ketika sebagian node tidak dapat berkomunikasi dengan node lainnya.

Misalnya terdapat lima node:

Node A --- Node B --- Node C

        NETWORK PARTITION

Node D --- Node E

Raft menggunakan majority untuk menentukan apakah sebuah keputusan dapat dianggap sah.

Kelompok yang memiliki mayoritas node masih dapat membuat keputusan. Sementara kelompok yang tidak memiliki mayoritas tidak dapat melakukan commit terhadap entry baru secara normal.

Pendekatan ini membantu mencegah dua kelompok node membuat keputusan yang saling bertentangan.


Apa Itu Term pada Raft?

Raft menggunakan konsep term untuk membedakan periode kepemimpinan.

Term dapat dibayangkan seperti nomor generasi.

Contohnya:

Term 1 → Leader A
Term 2 → Leader B
Term 3 → Leader C

Nomor term selalu meningkat.

Term membantu node mengenali informasi lama. Jika sebuah node menerima pesan dengan term yang lebih rendah dibandingkan term yang dimilikinya, pesan tersebut dapat dianggap berasal dari kondisi yang sudah tidak berlaku.

Dengan demikian, term menjadi salah satu mekanisme penting untuk menjaga keamanan dan konsistensi protokol.


Raft vs Paxos

Raft sering dibandingkan dengan Paxos karena keduanya merupakan algoritma consensus untuk distributed systems.

Perbedaannya bukan sekadar nama atau implementasi. Raft dirancang dengan fokus kuat pada understandability.

Raft memisahkan masalah utama menjadi beberapa bagian, seperti:

  • Leader election
  • Log replication
  • Safety
  • Membership changes

Pendekatan tersebut membuat alur Raft lebih mudah dipelajari dibandingkan pendekatan Paxos yang secara historis dikenal lebih kompleks untuk dipahami.

Dalam penelitian Ongaro dan Ousterhout, hasil user study menunjukkan bahwa peserta dapat mempelajari Raft dengan lebih mudah dibandingkan Paxos. (dikutip dari: USENIX – Raft Consensus Algorithm)


Di Mana Raft Digunakan?

Raft dapat digunakan pada sistem yang membutuhkan konsistensi antar-node.

Beberapa contoh penerapannya antara lain:

Distributed Database

Database terdistribusi dapat menggunakan consensus untuk memastikan perubahan data direplikasi secara konsisten.

Distributed Configuration

Sistem yang memiliki konfigurasi terdistribusi dapat menggunakan Raft untuk memastikan konfigurasi yang disepakati tetap konsisten.

Cluster Management

Raft juga dapat digunakan dalam sistem yang membutuhkan koordinasi antar-server.

Cloud dan Infrastructure

Konsep consensus juga penting pada berbagai platform infrastructure yang membutuhkan koordinasi dan konsistensi antar-node.

Karena itu, memahami Raft dapat menjadi dasar yang berguna untuk mempelajari teknologi seperti distributed database, container orchestration, cloud infrastructure, dan sistem terdistribusi lainnya.


Kelebihan Raft Consensus Algorithm

Raft memiliki beberapa kelebihan yang membuatnya menarik untuk dipelajari dan digunakan.

Mudah Dipahami

Raft secara khusus dirancang agar lebih mudah dipahami dibandingkan algoritma consensus yang lebih kompleks.

Struktur yang Jelas

Raft memisahkan proses leader election, log replication, dan safety sehingga alur protokol lebih mudah dipelajari.

Toleran terhadap Kegagalan

Cluster tetap dapat beroperasi selama masih tersedia mayoritas node.

Cocok untuk Distributed Systems

Raft dirancang untuk kebutuhan replicated state machine dan sistem yang membutuhkan konsistensi antar-server.


Keterbatasan Raft

Meskipun memiliki banyak kelebihan, Raft bukan solusi untuk semua jenis sistem.

Membutuhkan Majority

Cluster membutuhkan mayoritas node untuk membuat keputusan tertentu. Jika mayoritas tidak tersedia, proses commit tidak dapat berjalan secara normal.

Bergantung pada Leader

Raft menggunakan pendekatan leader-based. Karena itu, leader menjadi bagian penting dalam proses operasi cluster.

Tidak Selalu Optimal untuk Semua Skenario

Algoritma consensus lain dapat memiliki karakteristik performa yang berbeda. Dalam beberapa kondisi tertentu, pendekatan lain dapat menawarkan keuntungan tertentu.

Karena itu, pemilihan algoritma consensus harus disesuaikan dengan kebutuhan sistem.


Mengapa Raft Penting Dipelajari?

Raft bukan hanya materi teori dalam distributed systems. Konsep yang terdapat di dalamnya membantu developer memahami bagaimana sistem dapat mempertahankan konsistensi meskipun berjalan pada banyak server.

Dengan memahami Raft, kita dapat memahami konsep seperti:

  • Distributed consensus
  • Leader election
  • Replicated log
  • Quorum
  • Fault tolerance
  • Network partition
  • State machine replication
  • Distributed database

Konsep-konsep tersebut merupakan fondasi penting dalam memahami bagaimana berbagai sistem terdistribusi modern bekerja.

baca juga : XML External Entity (XXE) Injection: Mengenal Serangan pada Parser XML dan Cara Mencegahnya


Kesimpulan

Raft Consensus Algorithm adalah algoritma konsensus yang dirancang untuk membantu beberapa server mempertahankan kondisi yang konsisten dalam sebuah distributed system.

Raft menggunakan tiga status utama, yaitu follower, candidate, dan leader. Leader bertugas menerima request dan mereplikasi log kepada follower. Ketika leader mengalami kegagalan, proses leader election dapat dilakukan untuk memilih pemimpin baru.

Penggunaan majority atau quorum menjadi bagian penting dalam Raft karena membantu sistem mempertahankan konsistensi ketika sebagian node mengalami kegagalan atau terjadi network partition.

Salah satu keunggulan utama Raft adalah desainnya yang berfokus pada understandability. Karena itu, Raft menjadi salah satu algoritma yang baik untuk dipelajari sebelum masuk lebih jauh ke dunia distributed systems, distributed database, cloud infrastructure, dan fault-tolerant systems.