Tingkat konsistensi Apache Cassandra dan Azure Cosmos DB untuk Apache Cassandra
BERLAKU UNTUK: Cassandra
Tidak seperti Azure Cosmos DB, Apache Cassandra tidak secara asli memberikan jaminan konsistensi yang ditentukan dengan tepat. Sebagai gantinya, Apache Cassandra menyediakan tingkat konsistensi tulis dan baca, untuk memungkinkan ketersediaan, konsistensi, dan tradeoff latensi yang tinggi. Saat menggunakan Azure Cosmos DB untuk Cassandra:
- Tingkat konsistensi tulis Apache Cassandra dipetakan ke tingkat konsistensi default yang dikonfigurasi pada akun Azure Cosmos DB Anda. Konsistensi untuk operasi tulis (CL) tidak dapat diubah berdasarkan per permintaan.
- Azure Cosmos DB akan secara dinamis memetakan tingkat konsistensi baca yang ditentukan oleh driver klien Cassandra. Tingkat konsistensi akan dipetakan ke salah satu tingkat konsistensi Azure Cosmos DB yang dikonfigurasi secara dinamis pada permintaan baca.
Penulisan multi-wilayah vs penulisan wilayah tunggal
Database Apache Cassandra adalah sistem multi-master secara default, dan tidak menyediakan opsi out-of-box untuk penulisan wilayah tunggal dengan replikasi multi-wilayah untuk bacaan. Namun, Azure Cosmos DB menyediakan kemampuan turnkey untuk memiliki konfigurasi tulis wilayah tunggal, atau multi-wilayah. Salah satu keuntungan dari dapat memilih konfigurasi tulis wilayah tunggal di beberapa wilayah adalah menghindari skenario konflik lintas wilayah, dan opsi mempertahankan konsistensi yang kuat di beberapa wilayah.
Dengan penulisan wilayah tunggal, Anda dapat mempertahankan konsistensi yang kuat, dengan tetap mempertahankan tingkat ketersediaan tinggi di seluruh wilayah dengan failover dikelola layanan. Dalam konfigurasi ini, Anda masih dapat mengeksploitasi lokalitas data untuk mengurangi latensi baca dengan menurunkan konsistensi akhirnya berdasarkan per permintaan. Selain kemampuan ini, platform Azure Cosmos DB juga menawarkan opsi redundansi zona saat memilih wilayah. Dengan demikian, tidak seperti Apache Cassandra asli, Azure Cosmos DB memungkinkan Anda menavigasi spektrum trade-off CAP Theorem dengan lebih banyak granularitas.
Memetakan tingkat konsistensi
Platform Azure Cosmos DB menyediakan satu set lima pengaturan konsistensi berorientasi kasus penggunaan bisnis yang terdefinisi dengan baik sehubungan dengan replikasi. Tradeoff untuk pengaturan konsistensi ini didefinisikan oleh teori CAP dan PACLC . Karena pendekatan ini berbeda secara signifikan dari Apache Cassandra, kami sarankan Anda meluangkan waktu untuk meninjau dan memahami konsistensi Azure Cosmos DB. Atau, Anda dapat meninjau panduan video singkat ini untuk memahami pengaturan konsistensi di platform Azure Cosmos DB. Tabel berikut mengilustrasikan kemungkinan pemetaan antara tingkat konsistensi Apache Cassandra dan Azure Cosmos DB saat menggunakan API untuk Cassandra. Tabel ini memperlihatkan konfigurasi untuk satu wilayah, bacaan multi-wilayah dengan penulisan wilayah tunggal, dan penulisan multi-wilayah.
Pemetaan
Catatan
Ini bukan pemetaan yang tepat. Sebaliknya, kami telah menyediakan analog terdekat untuk Apache Cassandra, dan disambiguasi perbedaan kualitatif di kolom paling kanan. Seperti disebutkan di atas, kami anjurkan untuk meninjau pengaturan konsistensiAzure Cosmos DB.
ALL
, , EACH_QUOROM
QUOROM
, LOCAL_QUORUM
, atau THREE
tulis konsistensi di Apache Cassandra
Konsistensi baca Apache | Membaca dari | Tingkat konsistensi Azure Cosmos DB terdekat dengan pengaturan baca/tulis Apache Cassandra |
---|---|---|
ALL |
Wilayah lokal | Strong |
EACH_QUOROM |
Wilayah lokal | Strong |
QUOROM |
Wilayah lokal | Strong |
LOCAL_QUORUM |
Wilayah lokal | Strong |
LOCAL_ONE |
Wilayah lokal | Eventual |
ONE |
Wilayah lokal | Eventual |
TWO |
Wilayah lokal | Strong |
THREE |
Wilayah lokal | Strong |
Tidak seperti Apache dan DSE Cassandra, Azure Cosmos DB secara durab melakukan penulisan kuorum secara default. Setidaknya tiga dari empat simpul (3/4) menerapkan penulisan ke disk, dan BUKAN hanya log penerapan dalam memori.
ONE
, , LOCAL_ONE
atau ANY
tulis konsistensi di Apache Cassandra
Konsistensi baca Apache | Membaca dari | Tingkat konsistensi Azure Cosmos DB terdekat dengan pengaturan baca/tulis Apache Cassandra |
---|---|---|
ALL |
Wilayah lokal | Strong |
EACH_QUOROM |
Wilayah lokal | Eventual |
QUOROM |
Wilayah lokal | Eventual |
LOCAL_QUORUM |
Wilayah lokal | Eventual |
LOCAL_ONE |
Wilayah lokal | Eventual |
ONE |
Wilayah lokal | Eventual |
TWO |
Wilayah lokal | Eventual |
THREE |
Wilayah lokal | Eventual |
Api Azure Cosmos DB untuk Cassandra selalu melakukan penulisan kuorum secara default, sehingga semua konsistensi baca dapat digunakan.
TWO
menulis konsistensi di Apache Cassandra
Konsistensi baca Apache | Membaca dari | Tingkat konsistensi Azure Cosmos DB terdekat dengan pengaturan baca/tulis Apache Cassandra |
---|---|---|
ALL |
Wilayah lokal | Strong |
EACH_QUOROM |
Wilayah lokal | Strong |
QUOROM |
Wilayah lokal | Strong |
LOCAL_QUORUM |
Wilayah lokal | Strong |
LOCAL_ONE |
Wilayah lokal | Eventual |
ONE |
Wilayah lokal | Eventual |
TWO |
Wilayah lokal | Eventual |
THREE |
Wilayah lokal | Strong |
Azure Cosmos DB tidak memiliki gagasan konsistensi tulis hanya untuk dua simpul, oleh karena itu kami memperlakukan konsistensi ini mirip dengan kuorum untuk sebagian besar kasus. Untuk konsistensi TWO
baca , konsistensi ini setara dengan menulis dengan QUOROM
dan membaca dari ONE
.
Serial
, atau Local_Serial
menulis konsistensi di Apache Cassandra
Konsistensi baca Apache | Membaca dari | Tingkat konsistensi Azure Cosmos DB terdekat dengan pengaturan baca/tulis Apache Cassandra |
---|---|---|
ALL |
Wilayah lokal | Strong |
EACH_QUOROM |
Wilayah lokal | Strong |
QUOROM |
Wilayah lokal | Strong |
LOCAL_QUORUM |
Wilayah lokal | Strong |
LOCAL_ONE |
Wilayah lokal | Eventual |
ONE |
Wilayah lokal | Eventual |
TWO |
Wilayah lokal | Strong |
THREE |
Wilayah lokal | Strong |
Serial hanya berlaku untuk transaksi ringan. Azure Cosmos DB mengikuti algoritma yang diterapkan secara durab secara default, dan karenanya Serial
konsistensinya mirip dengan kuorum.
Wilayah lain untuk penulisan wilayah tunggal
Azure Cosmos DB memfasilitasi lima pengaturan konsistensi, termasuk kuat, di beberapa wilayah tempat penulisan wilayah tunggal dikonfigurasi. Fasilitasi ini terjadi selama wilayah berada dalam jarak 2.000 mil satu sama lain.
Azure Cosmos DB tidak memiliki pemetaan yang berlaku untuk Apache Cassandra karena semua simpul/wilayah adalah tulisan dan jaminan konsistensi yang kuat tidak dimungkinkan di semua wilayah.
Wilayah lain untuk penulisan multi-wilayah
Azure Cosmos DB hanya memfasilitasi empat pengaturan konsistensi; eventual
, consistent prefix
, session
, dan bounded staleness
di beberapa wilayah tempat penulisan multi-wilayah dikonfigurasi.
Apache Cassandra hanya akan memberikan konsistensi akhir untuk membaca di seluruh wilayah lain terlepas dari pengaturannya.
Penimpaan dinamis didukung
Pengaturan akun Azure Cosmos DB | Mengambil alih nilai dalam permintaan klien | Mengesampingkan efek |
---|---|---|
Strong |
All |
Tidak ada efek (tetap sebagai strong ) |
Strong |
Quorum |
Tidak ada efek (tetap sebagai strong ) |
Strong |
LocalQuorum |
Tidak ada efek (tetap sebagai strong ) |
Strong |
Two |
Tidak ada efek (tetap sebagai strong ) |
Strong |
Three |
Tidak ada efek (tetap sebagai strong ) |
Strong |
Serial |
Tidak ada efek (tetap sebagai strong ) |
Strong |
LocalSerial |
Tidak ada efek (tetap sebagai strong ) |
Strong |
One |
Perubahan konsistensi menjadi Eventual |
Strong |
LocalOne |
Perubahan konsistensi menjadi Eventual |
Strong |
Any |
Tidak diperbolehkan (kesalahan) |
Strong |
EachQuorum |
Tidak diperbolehkan (kesalahan) |
Bounded staleness , session , atau consistent prefix |
All |
Tidak diperbolehkan (kesalahan) |
Bounded staleness , session , atau consistent prefix |
Quorum |
Tidak diperbolehkan (kesalahan) |
Bounded staleness , session , atau consistent prefix |
LocalQuorum |
Tidak diperbolehkan (kesalahan) |
Bounded staleness , session , atau consistent prefix |
Two |
Tidak diperbolehkan (kesalahan) |
Bounded staleness , session , atau consistent prefix |
Three |
Tidak diperbolehkan (kesalahan) |
Bounded staleness , session , atau consistent prefix |
Serial |
Tidak diperbolehkan (kesalahan) |
Bounded staleness , session , atau consistent prefix |
LocalSerial |
Tidak diperbolehkan (kesalahan) |
Bounded staleness , session , atau consistent prefix |
One |
Perubahan konsistensi menjadi Eventual |
Bounded staleness , session , atau consistent prefix |
LocalOne |
Perubahan konsistensi menjadi Eventual |
Bounded staleness , session , atau consistent prefix |
Any |
Tidak diperbolehkan (kesalahan) |
Bounded staleness , session , atau consistent prefix |
EachQuorum |
Tidak diperbolehkan (kesalahan) |
Metrik
Jika akun Azure Cosmos DB Anda dikonfigurasi dengan tingkat konsistensi selain konsistensi yang kuat, tinjau metrik Probabilistically Bounded Staleness (PBS ). Metrik menangkap probabilitas bahwa klien Anda mungkin mendapatkan bacaan yang kuat dan konsisten untuk beban kerja Anda. Metrik ini diekspos dalam portal Azure. Untuk menemukan informasi selengkapnya tentang metrik PBS, lihat Metrik Monitor Probabilistically Bounded Staleness (PBS).
Probabilistically Bounded Staleness menunjukkan bagaimana akhir dari konsistensi akhir Anda. Metrik ini memberikan wawasan tentang seberapa sering Anda bisa mendapatkan konsistensi yang lebih kuat daripada tingkat konsistensi yang saat ini telah Anda konfigurasi di akun Azure Cosmos DB Anda. Dengan kata lain, Anda dapat melihat probabilitas (diukur dalam milidetik) untuk mendapatkan bacaan yang konsisten untuk kombinasi wilayah tulis dan baca.
Konsistensi kuat global untuk permintaan tulis di Apache Cassandra
Apache Cassandra, pengaturan EACH_QUORUM
atau QUORUM
memberikan konsistensi yang kuat. Saat permintaan tulis dikirim ke suatu wilayah, EACH_QUORUM
mempertahankan data dalam jumlah kuorum simpul di setiap pusat data. Persistensi ini mengharuskan setiap pusat data tersedia agar operasi tulis berhasil. QUORUM
sedikit kurang ketat, dengan QUORUM
sejumlah simpul di semua pusat data yang diperlukan untuk mempertahankan data sebelum mengakui penulisan agar berhasil.
Grafik berikut menggambarkan pengaturan konsistensi kuat global di Apache Cassandra antara dua wilayah 1 dan 2. Setelah data ditulis ke wilayah 1, penulisan perlu dipertahankan dalam jumlah kuorum simpul di wilayah 1, dan wilayah 2 sebelum pengakuan diterima oleh aplikasi.
Konsistensi kuat global untuk permintaan tulis di Azure Cosmos DB untuk Apache Cassandra
Di Konsistensi Azure Cosmos DB diatur pada tingkat akun. Dengan Strong
konsistensi di Azure Cosmos DB for Cassandra, data direplikasi secara sinkron ke wilayah baca untuk akun tersebut. Semakin jauh bagian dari wilayah untuk akun Azure Cosmos DB adalah, semakin tinggi latensi operasi tulis yang konsisten.
Bagaimana jumlah wilayah memengaruhi permintaan baca atau tulis Anda:
- Dua wilayah: Dengan konsistensi yang kuat, kuorum
(N/2 + 1) = 2
. Jadi, jika wilayah baca tidak berfungsi, akun tidak dapat lagi menerima tulisan dengan konsistensi yang kuat karena jumlah kuorum wilayah tidak tersedia untuk penulisan yang akan direplikasi. - Tiga wilayah atau lebih: untuk
N = 3
,quorum = 2
. Jika salah satu wilayah baca tidak berfungsi, wilayah tulis masih dapat mereplikasi penulisan ke total dua wilayah yang memenuhi persyaratan kuorum. Demikian pula, dengan empat wilayah,quorum = 4/2 + 1 = 3
. Bahkan dengan satu wilayah baca sedang tidak berfungsi, kuorum dapat dipenuhi.
Catatan
Jika konsistensi yang kuat secara global diperlukan untuk semua operasi tulis, konsistensi untuk akun Azure Cosmos DB for Cassandra harus diatur ke Kuat. Tingkat konsistensi untuk operasi tulis tidak dapat ditimpa ke tingkat konsistensi yang lebih rendah berdasarkan per permintaan di Azure Cosmos DB.
Konsistensi yang lebih lemah untuk permintaan tulis di Apache Cassandra
Tingkat konsistensi , ANY
, ONE
, TWO
, THREE
, LOCAL_QUORUM
Serial
atau Local_Serial
? Pertimbangkan permintaan tulis dengan LOCAL_QUORUM
dengan RF
di 4
pusat data enam simpul. Quorum = 4/2 + 1 = 3
.
Konsistensi yang lebih lemah untuk permintaan tulis di Azure Cosmos DB untuk Apache Cassandra
Ketika permintaan tulis dikirim dengan salah satu tingkat konsistensi yang lebih rendah dari Strong
, respons keberhasilan dikembalikan segera setelah wilayah lokal mempertahankan penulisan dalam setidaknya tiga dari empat replika.
Konsistensi kuat global untuk permintaan baca di Apache Cassandra
Dengan konsistensi EACH_QUORUM
, bacaan yang konsisten dapat dicapai di Apache Cassandra. Dalam, pengaturan multi-wilayah untuk EACH_QUORUM
jika jumlah kuorum simpul tidak terpenuhi di setiap wilayah, maka bacaan tidak akan berhasil.
Konsistensi kuat global untuk permintaan baca di Azure Cosmos DB untuk Apache Cassandra
Permintaan baca disajikan dari dua replika di wilayah yang ditentukan. Karena penulisan sudah mengurus bertahan ke sejumlah wilayah kuorum (dan semua wilayah jika setiap wilayah tersedia), cukup membaca dari dua replika di wilayah yang ditentukan memberikan konsistensi yang kuat. Konsistensi yang kuat ini perlu EACH_QUORUM
ditentukan dalam driver saat mengeluarkan bacaan terhadap wilayah untuk akun Cosmos DB bersama dengan Konsistensi Kuat sebagai tingkat konsistensi default untuk akun.
Konsistensi kuat lokal di Apache Cassandra
Permintaan baca dengan tingkat TWO
konsistensi , , THREE
atau LOCAL_QUORUM
akan memberi kita pembacaan konsistensi yang kuat dari wilayah lokal. Dengan tingkat LOCAL_QUORUM
konsistensi , Anda memerlukan respons dari dua simpul di pusat data yang ditentukan untuk pembacaan yang berhasil.
Konsistensi kuat lokal di Azure Cosmos DB untuk Apache Cassandra
Di Azure Cosmos DB for Cassandra, memiliki tingkat konsistensi TWO
, THREE
atau LOCAL_QUORUM
akan memberikan konsistensi kuat lokal untuk permintaan baca. Karena jalur tulis menjamin replikasi ke minimal tiga dari empat replika, baca dari dua replika di wilayah yang ditentukan akan menjamin pembacaan kuorum data di wilayah tersebut.
Konsistensi akhir di Apache Cassandra
Tingkat konsistensi LOCAL_ONE
, One
dan ANY with LOCAL_ONE
akan menghasilkan konsistensi akhirnya. Konsistensi ini digunakan dalam kasus di mana fokusnya adalah pada latensi.
Konsistensi akhir di Azure Cosmos DB untuk Apache Cassandra?
Tingkat konsistensi LOCAL_ONE
, ONE
atau Any
akan memberi Anda konsistensi akhir. Dengan konsistensi akhir, bacaan disajikan hanya dari salah satu replika di wilayah yang ditentukan.
Mengambil alih tingkat konsistensi untuk operasi baca di Azure Cosmos DB untuk Cassandra
Sebelumnya, tingkat konsistensi untuk permintaan baca hanya dapat ditimpa ke konsistensi yang lebih rendah daripada yang ditetapkan default pada akun. Misalnya, dengan konsistensi default Kuat, permintaan baca dapat dikeluarkan dengan Kuat secara default dan ditimpa berdasarkan per permintaan (jika diperlukan) ke tingkat konsistensi yang lebih lemah dari Kuat. Namun, permintaan baca tidak dapat dikeluarkan dengan tingkat konsistensi yang ditimpa lebih tinggi dari default akun. Akun dengan konsistensi Eventual tidak dapat menerima permintaan baca dengan tingkat konsistensi yang lebih tinggi dari Eventual (yang dalam driver Apache Cassandra diterjemahkan ke TWO
, , THREE
LOCAL_QUORUM
atau QUORUM
).
Azure Cosmos DB for Cassandra sekarang memfasilitasi pengesampingan konsistensi pada permintaan baca ke nilai yang lebih tinggi dari konsistensi default akun. Misalnya, dengan konsistensi default pada akun Cosmos DB yang diatur ke Eventual (Apache Cassandra setara atau One
ANY
), permintaan baca dapat diambil alih berdasarkan per permintaan ke LOCAL_QUORUM
. Penimpaan ini memastikan bahwa jumlah replika kuorum dalam wilayah yang ditentukan dikonsultasikan sebelum mengembalikan kumpulan hasil, seperti yang diperlukan oleh LOCAL_QUORUM
.
Opsi ini juga mencegah kebutuhan untuk mengatur konsistensi default yang lebih tinggi dari Eventual
, ketika hanya diperlukan untuk permintaan baca.