Back to IF3130 Sistem Paralel dan Terdistribusi
Topic: Logical Clock, Happened-Before, & Vector Clock
Questions/Cues
Kenapa butuh Logical Clock?
Happened-Before Relation ()
Transitivity
Concurrent Events
Lamport Clock Rules
Masalah Lamport Clock
Totally Ordered Multicast
Vector Clock Rules
Perbandingan Vector vs Scalar
Reference Points
Slides: Page 29-41
Fokus: Kausalitas & Pengurutan
1. Konsep Happened-Before ()
Karena sinkronisasi fisik tidak pernah sempurna, Leslie Lamport (1978) mengusulkan: kita tidak perlu waktu absolut, kita hanya perlu tahu urutan kejadian (ordering) yang konsisten.
Relasi Happened-Before ():
Jika dan di proses yang sama, dan terjadi sebelum , maka .
Jika adalah pengiriman pesan (send) dan adalah penerimaan pesan itu (receive), maka .
Transitif: Jika dan , maka .
Concurrent: Jika dan , maka dua event tersebut dikatakan konkuren (terjadi bersamaan secara logis).
2. Lamport Logical Clock
Algoritma sederhana untuk menangkap relasi happened-before menggunakan counter integer tunggal ().
Algoritma/Aturan:
Setiap proses punya counter lokal , inisialisasi 0.
Sebelum event internal, .
Saat kirim pesan , sertakan timestamp .
Saat terima pesan di :
(Ambil yang terbesar antara jam lokal dan jam pesan, lalu tambah 1).
Keterbatasan Fatal Lamport Clock:
Jika , maka pasti . (Benar).
TAPI, jika , belum tentu . Bisa saja mereka konkuren.
Kesimpulan: Lamport Clock tidak bisa menangkap kausalitas secara sempurna.
3. Aplikasi: Totally Ordered Multicast
Lamport Clock digunakan untuk menjamin semua replika database mengeksekusi update dalam urutan yang persis sama.
Mekanisme:
Kirim pesan timestamped ke semua proses (termasuk diri sendiri).
Masukkan pesan masuk ke antrean lokal (diurutkan berdasarkan timestamp).
Kirim ACK ke semua orang.
Pesan diproses aplikasi HANYA JIKA: pesan ada di kepala antrean (head) DAN kita sudah menerima ACK/pesan dengan timestamp lebih besar dari semua proses lain.
Asumsi: Kanal komunikasi reliable dan FIFO.
4. Vector Clock (Solusi Kausalitas)
Untuk mengatasi kelemahan Lamport Clock, kita menggunakan Array (Vektor) alih-alih integer tunggal.
Struktur:
Setiap proses memiliki array (n = jumlah proses total).
artinya: jumlah event di proses yang sudah “diketahui” oleh .
Algoritma:
Inisialisasi vektor dengan .
Event internal di : Increment elemen miliknya sendiri ().
Kirim pesan: Kirim seluruh vektor bersama pesan.
Terima pesan () di :
Update setiap elemen : .
Increment elemen sendiri: .
Keunggulan:
Dengan Vector Clock, kita bisa membandingkan dua event dan :
jika dan hanya jika .
Ini menutup celah yang ada pada Lamport Clock.
Logical Clock menggantikan waktu absolut dengan konsep keterurutan event. Lamport Clock menggunakan counter sederhana untuk memastikan properti , yang berguna untuk Totally Ordered Multicast. Namun, Lamport Clock tidak bisa mendeteksi kejadian konkuren. Vector Clock mengatasi ini dengan menyimpan array state seluruh sistem, memungkinkan deteksi kausalitas yang sempurna (), namun dengan biaya overhead ukuran pesan yang lebih besar (sebanding jumlah proses).
Additional Information (Deep Dive)
Membandingkan Vector Clock
Bagaimana cara komputer tahu Vektor A < Vektor B?
jika setiap elemen .
jika DAN ada setidaknya satu elemen di mana .
Jika ada elemen dimana dan elemen lain , maka kedua vektor tersebut Konkuren (tidak punya hubungan sebab-akibat).
Overhead Vector Clock
Jika ada 10.000 proses dalam sistem terdistribusi, setiap pesan harus membawa array integer berukuran 10.000. Ini sangat boros bandwidth. Ini sebabnya Vector Clock jarang dipakai di sistem skala internet masif, dan lebih sering dipakai di sistem cluster/replikasi database terbatas (seperti DynamoDB versi awal).
Sumber & Referensi:
- Paper Asli: Leslie Lamport, “Time, Clocks, and the Ordering of Events in a Distributed System” (1978). Salah satu paper paling banyak disitasi dalam ilmu komputer.
Spaced Repetition Questions (Review)
1. Apa kelemahan utama Lamport Clock dibandingkan Vector Clock?
Lamport Clock tidak bisa membedakan antara kejadian yang memiliki hubungan sebab-akibat (kausal) dengan kejadian yang konkuren. Jika C(a) < C(b), kita tidak bisa memastikan apakah a menyebabkan b, atau a dan b terjadi bersamaan tanpa saling tahu.
2. Bagaimana aturan update jam lokal saat menerima pesan pada algoritma Lamport?
Jam lokal diperbarui menjadi nilai maksimum antara jam lokal saat ini dan timestamp pesan yang diterima, lalu ditambah 1. Rumus: max(Local, Message_TS) + 1.
3. Dalam Vector Clock, apa arti dari elemen VC_i[j] = k?
Artinya, proses P_i mengetahui bahwa proses P_j telah mengalami setidaknya k kejadian (events). Ini mencerminkan pengetahuan P_i tentang kemajuan proses P_j.