GithubHelp home page GithubHelp logo

raft's Introduction

Tugas Besar IF3230 Sistem Paralel dan Terdistribusi

Deskripsi Program

Tugas Besar ini adalah implementasi dari algoritma Raft untuk konsensus terdistribusi, yang memastikan konsistensi data di antara beberapa server dalam sebuah cluster. Program ini terdiri dari server backend yang mengelola leader election, log replication, dan membership change, serta sebuah client web yang menyediakan interface untuk berinteraksi dengan sistem.

Implementasi Raft

Raft adalah protokol konsensus yang digunakan untuk mengelola replika log dalam sistem terdistribusi. Implementasi ini mencakup empat komponen utama:

a. Membership Change

Membership Change dalam cluster Raft melibatkan penambahan atau penghapusan node dari cluster. Berikut adalah langkah-langkah yang diambil dalam implementasi ini:

  1. Node yang ingin bergabung akan menghubungi node lain di dalam cluster menggunakan alamat kontak yang disediakan. Node tersebut akan mencoba untuk bergabung dengan cluster dengan mengirim request membership (__try_to_apply_membership).

  2. Jika node yang menerima request adalah leader, maka leader tersebut akan menambahkan node baru ke dalam daftar alamat cluster (cluster_addr_list) dan mengirimkan informasi membership baru kepada semua node dalam cluster (__send_new_member_information).

  3. Semua node yang sudah ada dalam cluster akan diberitahu tentang member baru melalui panggilan RPC (inform_new_member).

  4. Setiap node memperbarui daftar alamat cluster mereka untuk mencerminkan perubahan terbaru dalam membership cluster.

b. Log Replication

Log Replication adalah proses di mana leader memastikan bahwa semua entri log diterapkan pada semua node dalam cluster. Berikut adalah langkah-langkah dalam proses ini:

  1. Ketika leader menerima request dari klien, request tersebut dicatat dalam log leader.

  2. Leader mengirimkan entri log baru ke semua follower melalui RPC AppendEntries (send_append_entries).

  3. Follower merespons dengan pengakuan (acknowledgement) jika mereka berhasil menambahkan entri log ke log mereka sendiri (append_entries).

  4. Jika leader menerima pengakuan dari mayoritas node, leader akan menganggap entri log tersebut telah di-commit dan akan menerapkan perubahan yang diinginkan.

c. Heartbeat

Heartbeat adalah sinyal periodik yang dikirim oleh leader ke semua follower untuk menunjukkan bahwa leader masih hidup dan untuk mencegah pemilihan leader baru. Berikut adalah proses pengiriman heartbeat:

  1. Leader mengirim heartbeat ke semua follower pada interval tertentu (__leader_heartbeat).

  2. Ketika follower menerima heartbeat (heartbeat), mereka mengatur ulang timer pemilihan mereka untuk mencegah pemilihan leader baru.

  3. Dengan menerima heartbeat secara terus-menerus, follower mengetahui bahwa leader saat ini masih aktif dan bertanggung jawab atas cluster.

d. Leader Election

Leader Election terjadi ketika follower tidak menerima heartbeat dalam waktu yang ditentukan, atau ketika follower menerima term yang lebih tinggi dari leader saat ini. Berikut adalah langkah-langkah dalam pemilihan leader:

  1. Ketika timer pemilihan habis, follower akan mengubah status menjadi kandidat dan memulai pemilihan baru dengan meningkatkan term saat ini dan memberikan suara untuk dirinya sendiri (start_election).

  2. Kandidat mengirim request suara (request_vote) ke semua node dalam cluster.

  3. Node yang menerima request suara akan memeriksa term dan log terbaru mereka, dan jika syaratnya terpenuhi, mereka akan memberikan suara kepada kandidat tersebut (request_vote).

  4. Jika kandidat menerima suara dari mayoritas node dalam cluster, kandidat tersebut akan menjadi leader baru dan mulai mengirimkan heartbeat untuk mempertahankan statusnya sebagai leader (__initialize_as_leader).

Fitur Tambahan

a. Unit Test

Unit test digunakan untuk memastikan bahwa setiap komponen program bekerja dengan benar. Test ini mencakup berbagai fungsi dan modul dalam proyek, dan diimplementasikan menggunakan library unittest. Unit test membantu mendeteksi dan memperbaiki bug sebelum kode di-deploy.

b. Web Client

Web client menyediakan interface pengguna yang intuitif untuk berinteraksi dengan sistem Raft. Pengguna dapat mengirim perintah, melihat status cluster, dan memantau log entri melalui halaman web. Web client ini dibangun menggunakan HTML dan JavaScript.

Cara Menjalankan Program

a. Server

Untuk menjalankan server, ikuti langkah-langkah berikut:

  1. Pastikan berada di root direktory repo if3230-tubes-kraft.
  2. Install dependencies dengan menjalankan:
    pip install -r requirements.txt
  3. Jalankan leader server dengan perintah:
    python src/server.py [ip] [port]
    ex: python src/server.py localhost 8080
  4. Jalankan follower server dengan perintah:
    python src/server.py [ip] [port] [leader_ip] [leader_port]
    ex: python src/server.py localhost 8050 localhost 8080

b. Client

Untuk menjalankan client, ikuti langkah-langkah berikut:

  1. Pastikan server sudah berjalan.
  2. Buka file index.html di browser untuk mengakses antarmuka web client.

Identitas

Nama NIM
Kevin John Wesley Hutabarat 13521042
Manuella Ivana Uli Sianipar 13521051
Arleen Chrysantha Gunardi 13521059
Muhammad Fadhil Amri 13521066
Yobel Dean Christopher 13521067

raft's People

Contributors

mehmed13 avatar kevinjohn01 avatar arleenchr avatar manuellaiv avatar yobeldc avatar

Watchers

 avatar

Forkers

kevinjohn01

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.