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 siap pakai untuk penulisan wilayah tunggal dengan replikasi multi-wilayah untuk pembacaan. 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 teorema 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_QUOROMQUOROM, LOCAL_QUORUM, atau THREE 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

Tidak seperti Apache dan DSE Cassandra, Azure Cosmos DB secara tahan lama 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_ONEatau ANY 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 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

Azure Cosmos DB API untuk Cassandra selalu menerapkan 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 TWObaca , 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 durably 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 satu wilayah 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 Mengesampingkan 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 Konsistensi berubah menjadi Eventual
Strong LocalOne Konsistensi berubah 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 Konsistensi berubah menjadi Eventual
Bounded staleness, session, atau consistent prefix LocalOne Konsistensi berubah 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 Memantau metrik 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 global yang kuat 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 bahwa penulisan berhasil.

Grafik berikut menggambarkan pengaturan konsistensi global yang kuat di Apache Cassandra antara dua wilayah 1 dan 2. Setelah data ditulis ke wilayah 1, tulisan perlu dipertahankan dalam jumlah kuorum simpul di kedua wilayah 1, dan wilayah 2 sebelum pengakuan diterima oleh aplikasi.

Diagram konsistensi tulis global di Apache Cassandra.

Konsistensi global yang kuat untuk permintaan tulis di Azure Cosmos DB untuk Apache Cassandra

Dalam konsistensi Azure Cosmos DB diatur pada tingkat akun. Dengan Strong konsistensi di Azure Cosmos DB untuk Cassandra, data direplikasi secara sinkron ke wilayah baca untuk akun tersebut. Semakin jauh wilayah untuk akun Azure Cosmos DB, semakin tinggi latensi operasi tulis yang konsisten.

Diagram konsistensi tulis global di Azure Cosmos DB untuk Apache Cassandra.

Bagaimana jumlah wilayah memengaruhi permintaan baca atau tulis Anda:

  • Dua wilayah: Dengan konsistensi yang kuat, kuorum (N/2 + 1) = 2. Jadi, jika wilayah baca turun, 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 tulisan 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_QUORUMSerial atau Local_Serial? Pertimbangkan permintaan tulis dengan LOCAL_QUORUMRF dari 4 di pusat data enam simpul. Quorum = 4/2 + 1 = 3.

Diagram konsistensi tulis non-global di Apache Cassandra.

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 tulisan di setidaknya tiga dari empat replika.

Diagram konsistensi tulis non-global di Azure Cosmos DB untuk Apache Cassandra.

Konsistensi kuat global untuk permintaan baca di Apache Cassandra

Dengan konsistensi , bacaan EACH_QUORUMyang 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.

Diagram konsistensi baca global di Apache Cassandra.

Konsistensi global yang kuat untuk permintaan baca di Azure Cosmos DB untuk Apache Cassandra

Permintaan baca disajikan dari dua replika di wilayah yang ditentukan. Karena tulisan sudah mengurus bertahan hingga jumlah 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 tersebut.

Diagram konsistensi baca global di Azure Cosmos DB untuk Apache Cassandra.

Konsistensi kuat lokal di Apache Cassandra

Permintaan baca dengan tingkat konsistensi , , THREEatau LOCAL_QUORUM akan memberi kita pembacaan TWOkonsistensi yang kuat dari wilayah lokal. Dengan tingkat konsistensi , Anda memerlukan respons dari dua simpul di pusat data yang ditentukan untuk pembacaan LOCAL_QUORUMyang berhasil.

Diagram konsistensi baca kuat lokal di Apache Cassandra.

Konsistensi kuat lokal di Azure Cosmos DB untuk Apache Cassandra

Di Azure Cosmos DB for Cassandra, memiliki tingkat TWOkonsistensi , THREE atau LOCAL_QUORUM akan memberikan konsistensi kuat lokal untuk permintaan baca. Karena jalur tulis menjamin replikasi ke minimal tiga dari empat replika, bacaan dari dua replika di wilayah yang ditentukan akan menjamin pembacaan kuorum data di wilayah tersebut.

Diagram konsistensi baca kuat lokal di Azure Cosmos DB untuk Apache Cassandra.

Konsistensi akhir di Apache Cassandra

Tingkat konsistensi LOCAL_ONE, One dan ANY with LOCAL_ONE akan menghasilkan konsistensi akhir. Konsistensi ini digunakan dalam kasus di mana fokusnya adalah pada latensi.

Diagram konsistensi baca akhirnya di Apache Cassandra.

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.

Diagram konsistensi baca akhir di Azure Cosmos DB untuk Apache Cassandra.

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 yang lebih tinggi dari default akun. Akun dengan konsistensi Akhir tidak dapat menerima permintaan baca dengan tingkat konsistensi yang lebih tinggi dari Eventual (yang di driver Apache Cassandra diterjemahkan ke TWO, , THREELOCAL_QUORUM atau QUORUM).

Azure Cosmos DB for Cassandra sekarang memfasilitasi penimpaan 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 dengan One atau ANY), permintaan baca dapat ditimpa berdasarkan per permintaan ke LOCAL_QUORUM. Penimpaan ini memastikan bahwa jumlah kuorum replika dalam wilayah yang ditentukan dikonsultasikan sebelum mengembalikan tataan hasil, sebagaimana diperlukan oleh LOCAL_QUORUM.

Opsi ini juga mencegah kebutuhan untuk mengatur konsistensi default yang lebih tinggi dari Eventual, ketika hanya diperlukan untuk permintaan baca.

Langkah berikutnya

Pelajari selengkapnya tentang tingkat distribusi dan konsistensi global untuk Azure Cosmos DB: