Rakit atau tidak? Solusi Terbaik untuk Konsistensi Data dalam Database Cloud-native
Gambar sampul depan
Artikel ini ditulis oleh Xiaofan Luan dan disadur oleh Angela Ni.
Replikasi berbasis konsensus adalah strategi yang diadopsi secara luas di banyak basis data terdistribusi yang berasal dari cloud. Namun, strategi ini memiliki beberapa kekurangan dan jelas bukan solusi yang tepat.
Tulisan ini bertujuan untuk pertama-tama menjelaskan konsep replikasi, konsistensi, dan konsensus dalam basis data cloud-native dan terdistribusi, kemudian mengklarifikasi mengapa algoritme berbasis konsensus seperti Paxos dan Raft bukanlah peluru perak, dan akhirnya mengusulkan solusi untuk replikasi berbasis konsensus.
Langsung ke:
- Memahami replikasi, konsistensi, dan konsensus
- Replikasi berbasis konsensus
- Strategi replikasi log untuk basis data cloud-native dan terdistribusi
- Ringkasan
Memahami replikasi, konsistensi, dan konsensus
Sebelum mendalami pro dan kontra Paxos dan Raft, serta mengusulkan strategi replikasi log yang paling sesuai, kita perlu terlebih dahulu mengungkap konsep replikasi, konsistensi, dan konsensus.
Perhatikan bahwa artikel ini terutama berfokus pada sinkronisasi data/log tambahan. Oleh karena itu, ketika berbicara tentang replikasi data/log, yang dimaksud adalah replikasi data tambahan, bukan data historis.
Replikasi
Replikasi adalah proses membuat beberapa salinan data dan menyimpannya di disk, proses, mesin, cluster, dll yang berbeda, dengan tujuan untuk meningkatkan keandalan data dan mempercepat kueri data. Karena dalam replikasi, data disalin dan disimpan di beberapa lokasi, data lebih dapat diandalkan dalam menghadapi pemulihan dari kegagalan disk, kegagalan mesin fisik, atau kesalahan cluster. Selain itu, beberapa replika data dapat meningkatkan kinerja database terdistribusi dengan sangat mempercepat kueri.
Ada berbagai mode replikasi, seperti replikasi sinkron / asinkron, replikasi dengan konsistensi yang kuat / bertahap, replikasi pemimpin-pengikut / terdesentralisasi. Pilihan mode replikasi berpengaruh pada ketersediaan dan konsistensi sistem. Oleh karena itu, seperti yang diusulkan dalam teorema CAP yang terkenal, seorang arsitek sistem perlu menukar antara konsistensi dan ketersediaan ketika partisi jaringan tidak dapat dihindari.
Konsistensi
Singkatnya, konsistensi dalam database terdistribusi mengacu pada properti yang memastikan setiap node atau replika memiliki tampilan data yang sama ketika menulis atau membaca data pada waktu tertentu. Untuk daftar lengkap tingkat konsistensi, baca dokumennya di sini.
Untuk memperjelas, di sini kita berbicara tentang konsistensi seperti dalam teorema CAP, bukan ACID (atomisitas, konsistensi, isolasi, daya tahan). Konsistensi dalam teorema CAP mengacu pada setiap node dalam sistem yang memiliki data yang sama, sedangkan konsistensi dalam ACID mengacu pada satu node yang memberlakukan aturan yang sama pada setiap komit yang potensial.
Umumnya, database OLTP (pemrosesan transaksi online) membutuhkan konsistensi yang kuat atau linearitas untuk memastikan hal tersebut:
- Setiap pembacaan dapat mengakses data terbaru yang dimasukkan.
- Jika nilai baru dikembalikan setelah pembacaan, semua pembacaan berikutnya, terlepas dari klien yang sama atau berbeda, harus mengembalikan nilai baru.
Inti dari linearitas adalah untuk menjamin kemutakhiran beberapa replika data - setelah nilai baru ditulis atau dibaca, semua pembacaan berikutnya dapat melihat nilai baru tersebut hingga nilai tersebut ditimpa. Sistem terdistribusi yang menyediakan linearitas dapat menyelamatkan pengguna dari kesulitan mengawasi beberapa replika, dan dapat menjamin atomisitas dan urutan atau setiap operasi.
Konsensus
Konsep konsensus diperkenalkan pada sistem terdistribusi karena pengguna ingin melihat sistem terdistribusi bekerja dengan cara yang sama seperti sistem mandiri.
Sederhananya, konsensus adalah kesepakatan umum tentang nilai. Sebagai contoh, Steve dan Frank ingin mencari makanan. Steve menyarankan untuk makan sandwich. Frank setuju dengan saran Steve dan mereka berdua makan sandwich. Mereka mencapai sebuah konsensus. Lebih spesifiknya, sebuah nilai (sandwich) yang diusulkan oleh salah satu dari mereka disetujui oleh keduanya, dan keduanya mengambil tindakan berdasarkan nilai tersebut. Demikian pula, konsensus dalam sistem terdistribusi berarti ketika sebuah proses mengusulkan sebuah nilai, semua proses lainnya dalam sistem menyetujui dan bertindak berdasarkan nilai ini.
Konsensus
Replikasi berbasis konsensus
Algoritma berbasis konsensus yang paling awal diusulkan bersama dengan replikasi berbasis cap pada tahun 1988. Pada tahun 1989, Leslie Lamport mengusulkan Paxos, sebuah algoritme berbasis konsensus.
Dalam beberapa tahun terakhir, kita menyaksikan algoritme berbasis konsensus lain yang lazim di industri ini - Raft. Algoritma ini telah diadopsi oleh banyak database NewSQL utama seperti CockroachDB, TiDB, OceanBase, dll.
Perlu dicatat, sistem terdistribusi tidak selalu mendukung linearitas meskipun sistem tersebut mengadopsi replikasi berbasis konsensus. Namun, linearitas adalah prasyarat untuk membangun basis data terdistribusi ACID.
Ketika mendesain sistem basis data, urutan komit dari log dan state machine harus dipertimbangkan. Kehati-hatian ekstra juga diperlukan untuk mempertahankan leader lease dari Paxos atau Raft dan mencegah terjadinya split-brain dalam partisi jaringan.
Mesin status replikasi rakit
Pro dan kontra
Memang, Raft, ZAB, dan protokol log berbasis kuorum di Aurora adalah variasi Paxos. Replikasi berbasis konsensus memiliki keuntungan sebagai berikut:
- Meskipun replikasi berbasis konsensus lebih berfokus pada konsistensi dan partisi jaringan dalam teorema CAP, replikasi ini memberikan ketersediaan yang relatif lebih baik dibandingkan dengan replikasi pemimpin-pengikut tradisional.
- Raft merupakan terobosan yang sangat menyederhanakan algoritme berbasis konsensus. Dan ada banyak pustaka Raft yang bersifat open-source di GitHub (Misalnya sofa-jraft).
- Kinerja replikasi berbasis konsensus dapat memuaskan sebagian besar aplikasi dan bisnis. Dengan cakupan SSD berkinerja tinggi dan NIC (kartu antarmuka jaringan) gigabyte, beban untuk menyinkronkan beberapa replika menjadi berkurang, menjadikan algoritme Paxos dan Raft sebagai yang utama dalam industri ini.
Salah satu kesalahpahaman adalah bahwa replikasi berbasis konsensus adalah peluru perak untuk mencapai konsistensi data dalam basis data terdistribusi. Akan tetapi, hal ini tidak benar. Tantangan dalam ketersediaan, kompleksitas, dan kinerja yang dihadapi oleh algoritme berbasis konsensus menghalanginya untuk menjadi solusi yang sempurna.
Ketersediaan yang dikompromikan Algoritma Paxos atau Raft yang dioptimalkan memiliki ketergantungan yang kuat pada replika pemimpin, yang datang dengan kemampuan yang lemah untuk melawan kegagalan abu-abu. Dalam replikasi berbasis konsensus, pemilihan replika pemimpin yang baru tidak akan dilakukan sampai node pemimpin tidak merespons untuk waktu yang lama. Oleh karena itu, replikasi berbasis konsensus tidak mampu menangani situasi di mana leader node lambat atau terjadi perebutan.
Kompleksitas tinggi Meskipun sudah ada banyak algoritme yang diperluas berdasarkan Paxos dan Raft, kemunculan Multi-Raft dan Parallel Raft membutuhkan lebih banyak pertimbangan dan pengujian pada sinkronisasi antara log dan state machine.
Performa yang dikompromikan Di era cloud-native, penyimpanan lokal digantikan oleh solusi penyimpanan bersama seperti EBS dan S3 untuk memastikan keandalan dan konsistensi data. Akibatnya, replikasi berbasis konsensus tidak lagi menjadi keharusan untuk sistem terdistribusi. Terlebih lagi, replikasi berbasis konsensus memiliki masalah redundansi data karena solusi dan EBS memiliki banyak replika.
Untuk replikasi multi-pusat data dan multi-cloud, pengejaran konsistensi tidak hanya mengorbankan ketersediaan tetapi juga latensi, yang mengakibatkan penurunan kinerja. Oleh karena itu, linearitas bukanlah suatu keharusan untuk toleransi bencana multi-datacenter di sebagian besar aplikasi.
Strategi replikasi log untuk basis data cloud-native dan terdistribusi
Tidak dapat disangkal, algoritme berbasis konsensus seperti Raft dan Paxos masih menjadi algoritme utama yang diadopsi oleh banyak database OLTP. Namun, dengan mengamati contoh protokol PacificA, Socrates, dan Rockset, kita dapat melihat trennya bergeser.
Ada dua prinsip utama untuk solusi yang dapat melayani database terdistribusi cloud-native dengan baik.
1. Replikasi sebagai layanan
Diperlukan layanan mikro terpisah yang didedikasikan untuk sinkronisasi data. Modul sinkronisasi dan modul penyimpanan tidak boleh lagi digabungkan secara erat dalam proses yang sama.
Sebagai contoh, Socrates memisahkan penyimpanan, log, dan komputasi. Ada satu layanan log khusus (layanan XLog di tengah-tengah gambar di bawah).
Arsitektur Socrates
Layanan XLog adalah layanan individual. Persistensi data dicapai dengan bantuan penyimpanan latensi rendah. Zona pendaratan di Socrates bertugas menyimpan tiga replika dengan kecepatan yang dipercepat.
Layanan Socrates XLog
Simpul pemimpin mendistribusikan log ke broker log secara asinkron, dan mengirimkan data ke Xstore. Cache SSD lokal dapat mempercepat pembacaan data. Setelah flush data berhasil, buffer di zona pendaratan dapat dibersihkan. Jelas, semua data log dibagi menjadi tiga lapisan - zona pendaratan, SSD lokal, dan XStore.
2. Prinsip boneka Rusia
Salah satu cara untuk mendesain sistem adalah dengan mengikuti prinsip boneka Rusia: setiap lapisan sudah lengkap dan sesuai dengan apa yang dilakukan oleh lapisan tersebut sehingga lapisan lain dapat dibangun di atas atau di sekitarnya.
Ketika merancang database cloud-native, kita perlu secara cerdik memanfaatkan layanan pihak ketiga lainnya untuk mengurangi kerumitan arsitektur sistem.
Sepertinya kita tidak bisa menyiasati Paxos untuk menghindari kegagalan satu titik. Namun, kita masih dapat menyederhanakan replikasi log dengan menyerahkan pemilihan pemimpin ke layanan Raft atau Paxos berdasarkan Chubby, Zk, dan etcd.
Sebagai contoh, arsitektur Rockset mengikuti prinsip boneka Rusia dan menggunakan Kafka/Kineses untuk log terdistribusi, S3 untuk penyimpanan, dan cache SSD lokal untuk meningkatkan kinerja kueri.
Arsitektur Rockset
Pendekatan Milvus
Konsistensi yang dapat disetel dalam Milvus sebenarnya mirip dengan pembacaan pengikut dalam replikasi berbasis konsensus. Fitur pembacaan pengikut mengacu pada penggunaan replika pengikut untuk melakukan tugas pembacaan data di bawah premis konsistensi yang kuat. Tujuannya adalah untuk meningkatkan throughput cluster dan mengurangi beban pada leader. Mekanisme di balik fitur follower read adalah menanyakan indeks komit dari log terbaru dan menyediakan layanan kueri hingga semua data dalam indeks komit diterapkan ke state machine.
Namun, desain Milvus tidak mengadopsi strategi follower. Dengan kata lain, Milvus tidak menanyakan indeks komit setiap kali menerima permintaan kueri. Sebagai gantinya, Milvus mengadopsi mekanisme seperti tanda air di Flink, yang memberi tahu simpul kueri lokasi indeks komit pada interval yang teratur. Alasan untuk mekanisme seperti itu adalah karena pengguna Milvus biasanya tidak memiliki permintaan yang tinggi untuk konsistensi data, dan mereka dapat menerima kompromi dalam visibilitas data untuk kinerja sistem yang lebih baik.
Selain itu, Milvus juga mengadopsi beberapa layanan mikro dan memisahkan penyimpanan dari komputasi. Dalam arsitektur Milvus, S3, MinIo, dan Azure Blob digunakan untuk penyimpanan.
Arsitektur Milvus
Ringkasan
Saat ini, semakin banyak database cloud-native yang menjadikan replikasi log sebagai layanan tersendiri. Dengan demikian, biaya penambahan replika read-only dan replikasi heterogen dapat dikurangi. Menggunakan beberapa layanan mikro memungkinkan pemanfaatan cepat infrastruktur berbasis cloud yang sudah matang, yang tidak mungkin dilakukan oleh database tradisional. Layanan log individual dapat mengandalkan replikasi berbasis konsensus, tetapi juga dapat mengikuti strategi boneka Rusia untuk mengadopsi berbagai protokol konsistensi bersama dengan Paxos atau Raft untuk mencapai linearitas.
Referensi
- Lamport L. Paxos menjadi sederhana[J]. ACM SIGACT News (Kolom Komputasi Terdistribusi) 32, 4 (Nomor Keseluruhan 121, Desember 2001), 2001: 51-58.
- Ongaro D, Ousterhout J. Mencari algoritma konsensus yang dapat dimengerti[C] / Konferensi Teknis Tahunan USENIX 2014 (Usenix ATC 14). 2014: 305-319.
- Oki B M, Liskov B H. Replikasi berstempel: Metode salinan utama baru untuk mendukung sistem terdistribusi yang sangat tersedia[C]//Prosiding Simposium ACM tahunan ketujuh tentang Prinsip-prinsip komputasi terdistribusi. 1988: 8-17.
- Lin W, Yang M, Zhang L, dkk. PacificA: Replikasi dalam sistem penyimpanan terdistribusi berbasis log[J]. 2008.
- Verbitski A, Gupta A, Saha D, dkk. Amazon aurora: Tentang menghindari konsensus terdistribusi untuk i/os, komit, dan perubahan keanggotaan[C] / Prosiding Konferensi Internasional Manajemen Data 2018. 2018: 789-796.
- Antonopoulos P, Budovski A, Diaconu C, dkk. Socrates: Server sql baru di cloud [C] / Prosiding Konferensi Internasional Manajemen Data 2019. 2019: 1743-1756.
- Memahami replikasi, konsistensi, dan konsensus
- Replikasi berbasis konsensus
- Strategi replikasi log untuk basis data cloud-native dan terdistribusi
- Ringkasan
- Referensi
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word