Assalamu‘alaikum wr. wb.
Hello guys! Jika sebelumnya sudah membahas tentang Sinkronisasi Clock (Clock Synchronization), sekarang waktunya membahas tentang Konsistensi dan Replikasi.
Sumber Materi : En.Wikipedia.org, Komputasi.Files.Wordpress.com (PDF), Ioenotes.edu.np (PDF), Docplayer.info (PDF), Lass.CS.Umass.edu (PDF), CSIS.Pace.edu, Jepsen.io, Systemdesign.one, Mwhittaker.Github.io, dan Medium.com (@game_official)
A. Pengertian dan Aspek Konsistensi
Dalam konteks sistem terdistribusi, konsistensi merujuk pada kesepakatan atau keseragaman data di seluruh node atau komponen dalam sistem tersebut. Dalam sistem terdistribusi, di mana data disimpan dan diakses dari berbagai lokasi atau node, menjaga konsistensi data menjadi kritis untuk memastikan bahwa semua node memiliki pandangan data yang koheren dan terkini. Berikut adalah beberapa aspek konsistensi dalam sistem terdistribusi :
1. Strong Consistency
Dalam sistem yang memiliki konsistensi kuat, semua node atau komponen melihat data yang sama pada waktu yang sama. Ini berarti bahwa setiap operasi baca pada setiap node akan mengembalikan tulisan paling baru. Pencapaian konsistensi kuat sering membutuhkan mekanisme koordinasi yang kuat, seperti penguncian atau protokol komit dua fase.
2. Eventual Consistency
Konsistensi akhir lebih santai. Meskipun memungkinkan adanya inkonsistensi sementara antar node, sistem menjamin bahwa, seiring waktu dan tidak adanya pembaruan, semua salinan data akan konvergen ke keadaan yang sama. Model ini sering dipilih untuk meningkatkan ketersediaan dan toleransi partisi.
3. Causal Consistency
Konsistensi kausal memastikan bahwa operasi yang berkaitan secara sebab-akibat akan dilihat oleh semua node dalam urutan yang sama. Operasi yang tidak berkaitan secara sebab-akibat mungkin dilihat dalam urutan yang berbeda pada node yang berbeda.
4. Sequential Consistency
Konsistensi Sekuensial menjamin bahwa eksekusi operasi pada semua node muncul seolah-olah ada satu urutan global dari operasi. Ini memastikan bahwa operasi dari semua node diurutkan sesuai dengan waktu sebenarnya.
5. Read-your-write Consistency
Dalam model ini, jika suatu node menulis nilai tertentu, maka saat membaca kembali, nilai tersebut harus terlihat oleh node tersebut. Ini penting dalam skenario di mana tulisan oleh suatu node harus segera terlihat oleh node yang sama dalam operasi baca berikutnya.
6. Monotonic Consistency
Konsistensi Monotonik menjamin bahwa jika sebuah node membaca nilai tertentu, itu tidak akan membaca nilai yang lebih lama pada operasi baca berikutnya. Dengan kata lain, nilai yang terlihat oleh suatu node akan selalu bertambah atau tetap sama seiring waktu.
7. Week Consistency
Weak Consistency adalah bentuk konsistensi dalam sistem terdistribusi yang lebih lemah dibandingkan dengan strong consistency tetapi lebih kuat dibandingkan dengan eventual consistency. Dalam model ini, tidak ada jaminan bahwa semua node akan melihat perubahan pada waktu yang sama, dan mungkin terjadi inkonsistensi sementara di antara node-node tersebut. Tetapi, ada beberapa jaminan atau batasan tentang bagaimana dan seberapa cepat inkonsistensi ini akan diperbaiki.
B. Alasan adanya Konsistensi
Konsistensi dalam Sistem Terdistribusi sangat penting karena memastikan bahwa data yang disimpan di berbagai node atau komponen dalam sistem tersebut memiliki pandangan yang sama atau seragam. Keberadaan konsistensi ini memiliki beberapa alasan yang mendasari :
1. Kepastian Data
Konsistensi memastikan bahwa data yang diakses dari satu node akan memberikan hasil yang sesuai dengan data yang diakses dari node lain pada waktu yang sama. Ini memberikan kepastian kepada pengguna atau aplikasi terkait dengan nilai yang diperoleh dari sistem.
2. Integritas Data
Dengan konsistensi, integritas data tetap terjaga di seluruh sistem. Operasi tulis dan baca dapat diandalkan untuk memberikan hasil yang benar dan konsisten, mencegah situasi di mana nilai yang tidak sesuai muncul atau diakses.
3. Replikasi Data
Dalam sistem terdistribusi, data sering kali direplikasi di berbagai node untuk meningkatkan ketersediaan dan ketahanan terhadap kegagalan. Konsistensi memastikan bahwa replika-replika ini mencerminkan perubahan data dengan benar dan dalam waktu yang sesuai.
4. Koherensi Antar-Komponen
Dalam arsitektur terdistribusi, berbagai komponen atau layanan mungkin saling bergantung. Konsistensi memastikan bahwa data yang diproduksi atau digunakan oleh satu komponen dapat diandalkan oleh komponen lainnya, mendukung koherensi antar-komponen.
5. Pemeliharaan Logika Aplikasi
Aplikasi sering mengandalkan logika konsisten untuk beroperasi dengan benar. Jika data tidak konsisten, aplikasi dapat mengalami kesalahan atau memberikan hasil yang tidak sesuai dengan ekspektasi.
6. Prediktabilitas Perilaku Sistem
Konsistensi memberikan prediktabilitas terhadap perilaku sistem. Pengguna atau aplikasi dapat mengandalkan fakta bahwa hasil operasi akan sesuai dengan aturan logika dan logika aplikasi.
7. Manajemen Kesalahan
Konsistensi memungkinkan sistem untuk lebih efektif mengelola dan memitigasi kesalahan. Dalam situasi di mana kegagalan terjadi, konsistensi membantu dalam pemulihan dan pemulihan data ke keadaan yang konsisten.
Contoh : Suatu Database Bank
C. Tujuan dari Replikasi
Replikasi dalam sistem terdistribusi adalah praktik membuat dan memelihara salinan data atau layanan di beberapa lokasi atau node. Ini dilakukan untuk mencapai beberapa tujuan yang mencakup perbaikan kinerja, high-availability, peningkatan skalabilitas, dan penanggulangan serangan malisius. Berikut adalah penjelasan untuk setiap tujuan replikasi:
1. Replikasi untuk Perbaikan Kinerja
- Tujuan : Meningkatkan performa dan responsivitas sistem.
- Cara Kerja : Data atau layanan direplikasi di beberapa node sehingga permintaan dapat didistribusikan di antara salinan tersebut. Ini dapat mengurangi latensi akses data karena klien dapat berinteraksi dengan replika yang terdekat atau yang paling responsif.
- Contoh : Replikasi pada Server Sekunder dalam Content Delivery Network (CDN).
2. Replikasi untuk High-Availability (HA)
- Tujuan : Menjamin ketersediaan layanan dan meningkatkan ketahanan terhadap kegagalan.
- Cara Kerja : Jika satu node atau replika mengalami kegagalan, klien masih dapat diarahkan ke replika lainnya yang berfungsi. Dengan memiliki salinan data atau layanan di beberapa tempat, sistem tetap dapat memberikan layanan meskipun terjadi kegagalan pada satu atau beberapa node.
- Contoh :
- Google File-System mereplikasi blok-blok data pada komputer lintas rack, cluster dan data center.
- Jika satu komputer, rack atau cluster mengalami crash, block-block data masih dapat diakses dari sumber lainnya.
3. Replikasi untuk Meningkatkan Skalabilitas
- Tujuan : Memungkinkan sistem untuk menangani beban kerja yang lebih besar.
- Cara Kerja : Dengan mereplikasi data atau layanan, sistem dapat mendistribusikan beban kerja di antara berbagai node. Ini memungkinkan sistem untuk memproses lebih banyak permintaan secara bersamaan dan meningkatkan kapasitas untuk mendukung lebih banyak pengguna atau transaksi.
- Contoh : Content Delivery Network (CDN) dapat menurunkan Beban pada Server-server Utama (Primer).
4. Replikasi untuk Pengamanan Serangan Malicious
- Tujuan : Menyediakan keamanan dan ketangguhan terhadap serangan yang mungkin terjadi.
- Cara Kerja : Dengan memiliki salinan data di beberapa lokasi, sistem lebih tahan terhadap serangan yang mungkin mengarah pada penghapusan atau modifikasi data. Jika satu replika terpengaruh, replika lainnya dapat memberikan data yang utuh. Ini juga dapat membantu melindungi sistem dari serangan DoS (Denial of Service) atau DDoS (Distributed Denial of Service) dengan mendistribusikan beban kerja.
- Contoh : Dalam sistem peer-to-peer (P2P), peers dapat berkoordinasi untuk mencegah penyampaian data yang salah kepada requester.
D. Jenis Model Konsistensi
Sumber : Jepsen.io |
Sumber : Jepsen.io dan Geeksforgeeks.org
Dalam sistem terdistribusi, model konsistensi mengatur bagaimana data dirasakan dan dikelola di berbagai node. Dua pendekatan umum adalah Model Konsistensi Berpusat pada Data (Data-centric Consistency Model) dan Model Konsistensi Berpusat pada Klien (Client-centric Consistency Model). Berikut ikhtisar jenis-jenis tersebut :
1. Data-centric Consistency Model
Model Konsistensi Data-Centric
Pada pendekatan ini, fokus utama adalah pada tingkat konsistensi data yang disimpan di dalam sistem terdistribusi. Model ini menentukan bagaimana dan sejauh mana data dijaga konsistensinya di antara node-node yang menyimpan replika-replika data.
Dalam Sistem Terdistribusi, setiap proses memiliki salinan lokalnya sendiri. Pada saat ini, kumpulan data yang disimpan termasuk setiap salinan lokal disebut sebagai penyimpanan data terdistribusi.
Ketika proses membaca dari penyimpanan data, ia mengharapkan hasil dari operasi penulisan terakhir untuk dikembalikan sebagai data. Untuk menjelaskan mana yang merupakan penulisan terakhir, kita menyebut relasi pengurutan sebagai konsistensi.
Konsistensi Sekuensial (Sequential Consistency) adalah model konsistensi yang paling populer dan penting. Ada konsistensi Casual sebagai varian lemahnya.
a. Konsistensi Total
Jika proses Pi mengirimkan message mi dan Pj mengirimkan mj, dan jika satu proses yang benar menyampaikan mi; sebelum mj, maka setiap proses benar lainnya menyampaikan mi sebelum mj.
Message dapat menunjukkan update replika
- Dalam Contoh 11, jika P1 mengeluarkan operasi m(1,1) : x=x+1; dan
- Jika P3 memberikan m(3,1) : print(x); dan
- P1 atau P2 atau P3 mengantarkan m (3,1) sebelum m(1,1)
- Maka, pada semua replika P1, P2, P3 urutan operasi berikut dieksekusi :
print(x); x=x+1;
b. Konsistensi Causal (Causal Consistency)
Pada pola konsistensi sebab-akibat, peristiwa terkait (sebab-akibat) diamati dalam urutan yang tepat oleh server lain, sementara peristiwa yang tidak terkait mungkin diamati tanpa urutan tertentu oleh server lain. Konsistensi sebab-akibat adalah varian dari konsistensi akhir dan muncul sebagai tengah-tengah antara konsistensi akhir dan konsistensi kuat. Operasi tulis yang tidak saling terkait secara sebab-akibat atau terjadi secara bersamaan secara real-time dikenal sebagai peristiwa konkuren. Pola konsistensi sebab-akibat tidak menjamin urutan untuk peristiwa konkuren.
Hubungan sebab-akibat dalam pola konsistensi sebab-akibat dapat diimplementasikan melalui vektor clock. Manfaat dari konsistensi sebab-akibat adalah sebagai berikut :
- Latensi Rendah
- biaya sinkronisasi yang lebih rendah
- ketersediaan tinggi
- konsistensi yang relatif lebih kuat
Beberapa kasus penggunaan umum dari pola konsistensi sebab-akibat adalah sebagai berikut :
- Apache Cassandra menyediakan transaksi ringan dengan konsistensi sebab-akibat
- Penyebaran data dalam basis data terdistribusi Bayou
- Thread komentar di platform media sosial seperti Reddit
Contoh Causally Consistent Data-Store :
c. Konsistensi Sekuensial (Sequential Consistency)
Jika suatu proses Pi mengirimkan serangkaian messages m(i,1),...., m(i,ni), dan Proses Pj mengirimkan serangkaian messages m(j,1),...., m(j,nj), maka :
Maka :
Pada suatu proses, himpunan message tersebut diterima dalam urutan sequential (some sequential order)
Messages dari setiap proses individu harus muncul dalam urutan sama dengan yang dikirimkan oleh proses tersebut :
- Pada setiap proses, mi,1 harus diantarkan sebelum mi, 2, yang harus diantarkan sebelum mi, 3 dan seterusnya...
- Pada setiap proses, mj,1 harus diantarkan sebelum mj, 2, yang harus diantarkan sebelum mi, 3 dan seterusnya...
Contoh Model Konsistensi Sekuensial :
Model konsistensi Sequential mengharuskan bahwa semua operasi update diksekusi pada replika dalam suatu urutan Sequential.
Perhatikan suatu data-store dengan variable x (diberikan nilai awal NULL). Dalam dua data-stores berikut, mana yang konsisten secara Sekuensial?
Perhatikan tiga proses P1, P2 dan P3 yang mengeksekusi banyak instruksi pada tiga shared variables x, y dan z. Anggap bahwa x, y dan z dimulai dengan nilai nol :
Ada banyak valid sequences agar operasi dapat dieksekusi, dengan melihat konsistensi sequential (atau urutan program)
Bagaimana suatu program dapat mengenali wrong sequence di antara rentetan berikut?
Untuk lebih jelasnya, seperti ini :
Concurrent 1
x = 1;
print ((y, z);
y = 1;
print (x, z);
z = 1;
print (x, y);
Output :
001011
Signature :
001011
Concurrent 2
x = 1;
y = 1;
print (x,z);
print(y, z);
z = 1;
print (x, y);
Output :
101011
Signature :
101011
Concurrent 3
y = 1;
z = 1;
print (x, y);
print (x, z);
x = 1;
print (y, z);
Output :
010111
Signature :
110101
Concurrent 4
y = 1;
x = 1;
z = 1;
print (x, z);
print (y, z);
print (x, y);
Output :
111111
Signature :
111111
Empat urutan eksekusi yang valid untuk proses pada slide sebelumnya.
2. Client-centric Consistency Model
Pada pendekatan ini, fokusnya adalah pada persepsi konsistensi yang dirasakan oleh klien atau pengguna sistem. Model ini lebih menitikberatkan pada pengalaman pengguna daripada konsistensi di antara node-node penyimpan data.
Model Konsistensi Client-Centric
Contoh :
- Read-your-write Consistency : Memastikan bahwa jika klien menulis suatu nilai, klien akan melihat nilai itu pada operasi baca selanjutnya.
- Monotonic Consistency : Jika klien melihat nilai tertentu pada operasi baca, klien tidak akan melihat nilai yang lebih lama pada operasi baca berikutnya.
a. Monotonic Reads
Model ini menyediakan jaminan pada operasi read berturutan. Jika klien melihat nilai x pada operasi baca, klien tidak akan melihat nilai x yang lebih lama pada operasi baca berikutnya.
Dan memahami data-stores yang menyediakan jaminan monotonic read.
b. Monotonic Writes
Model konsistensi ini memastikan bahwa operasi writes bersifat monotonic. Operasi write oleh suatu proses client pada item data x diselesaikan sebelum suatu operasi write berturutan pada x oleh proses yang sama.
Write baru pada suatu replika harus menunggu semua write lama pada replika apapun.
c. Read Your Writes
Pengaruh dari suatu operasi write pada suatu item data x oleh suatu proses akan selalu dilihat oleh suatu operasi read berturutan pada x oleh proses yang sama
Contoh Skenario :
Dalam sistem di mana password disimpan di dalam suatu replicated data-base, perubahan password harus di propagasi ke semua replika.
d. Write Follow Reads
Operasi tulis oleh suatu proses pada item data x setelah operasi baca sebelumnya pada x oleh proses yang sama dijamin untuk berlangsung pada nilai x yang sama atau yang lebih baru yang dibaca.
Contoh Skenario :
Pengguna dari suatu newsgroup harus mem-post komentar mereka hanya setelah mereka selesai membaca artikel dan (semua) komentar sebelumnya.
E. Protokol Konsistensi
Dalam konteks fault tolerance, istilah "Groups" dan "Failure Masking" merujuk pada konsep pengelompokan komponen sistem untuk mengelola dan meminimalkan dampak dari kesalahan atau kegagalan. Berikut adalah penjelasan singkat tentang keduanya :
1. Two-Phase Commit (2PC)
Protokol ini melibatkan dua fase, yaitu fase persiapan dan fase komit. Koordinator mengirimkan permintaan komit ke semua partisipan dan hanya akan mengkomit jika semua menyetujui.
- Kelebihan : Sederhana dan efektif untuk sistem kecil.
- Kekurangan : Rentan terhadap deadlock dan membutuhkan koordinator yang selalu tersedia.
2. Three-Phase Commit (3PC)
Serupa dengan 2PC, tetapi menambahkan fase "prepare to commit" untuk mengurangi kemungkinan terjadinya deadlock.
- Kelebihan : Mengatasi masalah deadlock yang mungkin terjadi pada 2PC.
- Kekurangan : Kompleksitas tambahan dan overhead.
3. Paxos
Protokol konsensus asinkron yang digunakan untuk mencapai kesepakatan di antara sekelompok node. Melibatkan pemilihan proposer dan acceptor.
- Kelebihan : Toleran terhadap kegagalan dan menyediakan konsistensi kuat.
- Kekurangan : Kompleks dan sulit untuk dipahami.
4. Raft
Protokol konsensus yang dirancang untuk keterbacaan dan kesederhanaan. Melibatkan pemilihan leader dan replikasi log secara konsisten.
- Kelebihan : Lebih mudah dipahami dibandingkan Paxos.
- Kekurangan : Mungkin tidak sekuat Paxos untuk beberapa kasus penggunaan.
5. Quorum-Based Replication
Menggunakan prinsip quorum, di mana setidaknya sebagian node harus menyetujui operasi untuk memastikan konsistensi.
- Kelebihan : Mudah diimplementasikan dan skalabel.
- Kekurangan : Ketergantungan pada konsep quorum dapat menyebabkan masalah dalam kasus partisi jaringan.
6. Vector Clocks
Digunakan dalam sistem terdistribusi untuk mencatat urutan peristiwa dan memastikan konsistensi di antara node-node yang terlibat.
- Kelebihan : Menangani situasi konkurensi dengan baik.
- Kekurangan : Memerlukan manajemen vektor clock yang cermat.
7. CRDTs (Conflict-Free Replicated Data Types)
Pendekatan yang menggunakan struktur data khusus yang dirancang untuk dapat digabungkan dengan mudah, sehingga mengatasi masalah konflik tanpa memerlukan koordinasi eksternal.
- Kelebihan : Tidak memerlukan koordinasi aktif untuk mencapai konsistensi.
- Kekurangan : Tidak cocok untuk semua jenis data dan aplikasi.
Itulah Materi tentang Konsistensi dan Replikasi dalam Sistem Terdistribusi. Mohon maaf apabila ada kesalahan sedikit pun.
Terima Kasih 😄😘👌👍 :)
Wassalamu‘alaikum wr. wb.