Distribusi data global dengan Azure Cosmos DB - bagaimana cara kerjanya

Azure Cosmos DB adalah layanan dasar di Azure, sehingga digunakan di semua wilayah Azure di seluruh dunia termasuk awan publik, kedaulatan, Departemen Pertahanan (DoD) dan pemerintah.

Pada tingkat tinggi, data kontainer Azure Cosmos DB dipartisi secara horizontal ke dalam banyak replika set, yang mereplikasi penulisan, di setiap wilayah. Replica-set menerapkan tulis menggunakan sebagian kuorum secara lama.

Setiap wilayah berisi semua partisi data dari kontainer Azure Cosmos DB dan dapat melayani pembacaan serta penulisan data ketika penulisan di multi-wilayah diaktifkan. Jika akun Azure Cosmos DB Anda didistribusikan di seluruh wilayah N Azure, setidaknya akan ada salinan N x 4 dari semua data Anda.

Dalam pusat data, kami menyebarkan dan mengelola Azure Cosmos DB pada kluster mesin besar, masing-masing dengan penyimpanan lokal khusus. Dalam pusat data, Azure Cosmos DB disebarkan di banyak kluster, masing-masing berpotensi menjalankan beberapa generasi perangkat keras. Mesin dalam kluster biasanya tersebar di 10-20 domain kegagalan untuk tingkat ketersediaan yang tinggi dalam suatu wilayah. Gambar berikut menunjukkan topologi sistem distribusi global Azure Cosmos DB:

Topologi Sistem

Distribusi global di Azure Cosmos DB adalah turnkey: Kapan saja, dengan beberapa klik atau secara terprogram dengan satu panggilan API, Anda dapat menambahkan atau menghapus wilayah geografis yang terkait dengan database Azure Cosmos DB Anda. Database Azure Cosmos DB, pada gilirannya, terdiri dari satu set kontainer Azure Cosmos DB. Dalam Azure Cosmos DB, kontainer berfungsi sebagai unit distribusi dan skalabilitas logis. Koleksi, tabel, dan grafik yang Anda buat adalah (secara internal) hanya kontainer Azure Cosmos DB. Kontainer benar-benar bersifat skema-agnostik dan menyediakan ruang lingkup untuk kueri. Data dalam kontainer Azure Cosmos DB secara otomatis diindeks setelah diserap. Pengindeksan otomatis memungkinkan pengguna untuk mengueri data tanpa kerepotan manajemen skema atau indeks, terutama dalam persiapan distribusi global.

  • Di wilayah tertentu, data dalam kontainer didistribusikan dengan menggunakan kunci partisi, yang Anda sediakan dan dikelola secara transparan oleh partisi fisik yang mendasarinya (distribusi lokal).

  • Setiap partisi fisik juga direplikasi di seluruh wilayah geografis (distribusi global).

Saat aplikasi yang menggunakan Azure Cosmos DB secara elastis menskalakan throughput pada kontainer Azure Cosmos DB atau menggunakan lebih banyak penyimpanan, Azure Cosmos DB secara transparan menangani operasi manajemen partisi (memisahkan, mengkloning, menghapus) di semua wilayah. Terlepas dari skala, distribusi, atau kegagalan, Azure Cosmos DB terus memberikan gambar sistem tunggal dari data dalam kontainer, yang didistribusikan secara global di sejumlah wilayah.

Seperti yang ditunjukkan pada gambar berikut, data dalam kontainer didistribusikan sepanjang dua dimensi - dalam wilayah dan lintas wilayah, di seluruh dunia:

partisi fisik

Partisi fisik diimplementasikan oleh grup replika, yang disebut replica-set. Setiap mesin menampung ratusan replika yang sesuai dengan berbagai partisi fisik dalam serangkaian proses yang tetap seperti yang ditunjukkan pada gambar di atas. Replika yang sesuai dengan partisi fisik ditempatkan secara dinamis dan beban kerja diseimbangkan di seluruh mesin dalam kluster dan pusat data dalam suatu wilayah.

Replika ini unik milik penyewa Azure Cosmos DB. Setiap replika menghosting instans mesin database Azure Cosmos DB, yang mengelola sumber daya serta indeks terkait. Mesin basis data Azure Cosmos DB beroperasi pada sistem jenis berbasis atom-record-sequence (ARS). Mesinnya agnostik terhadap konsep skema, mengaburkan batas antara struktur dan nilai instans rekaman. Azure Cosmos DB mencapai agnostikisme skema penuh dengan secara otomatis mengindeks semuanya setelah penyerapan dengan cara yang efisien, yang memungkinkan pengguna untuk mengkueri data mereka yang didistribusikan secara global tanpa harus berurusan dengan skema atau manajemen indeks.

Mesin database Azure Cosmos DB terdiri dari komponen termasuk implementasi beberapa primitif koordinasi, jalur waktu bahasa, prosesor kueri, dan subsistem penyimpanan serta pengindeksan yang masing-masing bertanggung jawab atas penyimpanan transaksional dan pengindeksan data. Untuk menjamin daya tahan dan ketersediaan tinggi, mesin database menyimpan data dan indeksnya pada SSD serta mereplikasi data tersebut di antara instans mesin database dalam set replikasi secara berurutan. Penyewa yang lebih besar sesuai dengan skala throughput dan penyimpanan yang lebih tinggi dan memiliki replika yang lebih besar atau lebih banyak atau keduanya. Setiap komponen sistem sepenuhnya asinkron – tidak ada utas yang diblokir, dan setiap utas melakukan pekerjaan singkat tanpa menimbulkan peralihan utas yang tidak perlu. Pembatasan laju dan tekanan ke belakang diimplementasikan di seluruh stack dari kontrol penerimaan ke semua lintasan I/O. Mesin database Azure Cosmos DB dirancang untuk memanfaatkan concurrency dengan tingkat serinci mungkin dan memberikan throughput tinggi saat beroperasi dengan penggunaan sumber daya sistem yang hemat.

Distribusi global Azure Cosmos DB bergantung pada dua abstraksi utama – replica-set dan partition-sets. Set replika adalah komponen modular untuk koordinasi, dan set partisi adalah overlay dinamis dari satu atau lebih partisi fisik yang terdistribusi secara geografis. Untuk memahami cara kerja distribusi global, kita perlu memahami dua abstraksi utama ini.

Set replika

Partisi fisik terwujud sebagai kelompok replika yang diatur sendiri dan penyeimbangan beban secara dinamis yang tersebar di beberapa wilayah gangguan, yang disebut sebagai satu set replika. Set ini secara kolektif mengimplementasikan protokol mesin status yang direplikasi untuk membuat data dalam partisi fisik sangat tersedia, tahan lama, dan konsisten. Keanggotaan replica-set N bersifat dinamis – tetap berfluktuasi antara NMin dan NMax berdasarkan kegagalan, operasi administratif, dan waktu untuk replika yang gagal untuk regenerasi/pemulihan. Berdasarkan perubahan keanggotaan, protokol replikasi juga mengonfigurasi ulang ukuran kuorum baca dan tulis. Untuk mendistribusikan throughput secara seragam yang ditetapkan ke partisi fisik tertentu, kami menggunakan dua ide:

  • Pertama, biaya pemrosesan permintaan tulis pada pemimpin lebih tinggi daripada biaya penerapan pembaruan pada pengikut. Oleh karena itu, pemimpin dianggarkan lebih banyak sumber daya sistem daripada pengikut.

  • Kedua, sejauh mungkin, kuorum baca untuk tingkat konsistensi tertentu disusun hanya dari replika pengikut. Kami menghindari menghubungi pemimpin untuk menangani pembacaan kecuali diperlukan. Kami menggunakan sejumlah ide dari penelitian yang dilakukan pada hubungan beban dan kapasitas dalam sistem berbasis kuorum untuk lima model konsistensi yang didukung Azure Cosmos DB.

Untuk informasi selengkapnya tentang set replika dan bagaimana mereka berhubungan dengan partisi fisik, lihat set replika partisi.

Set-partisi

Sekelompok partisi fisik, satu dari setiap wilayah yang dikonfigurasi dengan basis data Azure Cosmos DB, dibentuk untuk mengelola set kunci yang sama yang direplikasi di semua wilayah yang dikonfigurasi. Primitif koordinasi tingkat lanjut ini disebut partition-set - sebuah overlay dinamis partisi fisik yang tersebar secara geografis dan mengelola seperangkat kunci. Meski partisi fisik yang diberikan (replica-set) tercakup dalam kluster, partition-set dapat mencakup kluster, pusat data, dan wilayah geografis seperti yang ditunjukkan pada gambar di bawah ini:

Partisi Set

Anda dapat menganggap partition-set sebagai “super replica-set” yang tersebar secara geografis, terdiri dari beberapa replica-set yang memiliki sekumpulan kunci sama. Mirip dengan replica-set, keanggotaan partition-set juga dinamis - berfluktuasi berdasarkan operasi manajemen partisi fisik implisit untuk menambahkan/menghapus partisi baru ke/dari partition-set tertentu (misalnya, ketika Anda menskalakan throughput pada kontainer, menambahkan/menghapus wilayah ke database Azure Cosmos DB Anda, atau ketika kegagalan terjadi). Dengan masing-masing partisi dari partition-set mengelola keanggotaan partition-set dalam replica-setnya sendiri, keanggotaan ini sepenuhnya terdesentralisasi dan sangat andal. Selama konfigurasi ulang set partisi, topologi overlay antara partisi fisik juga dibentuk. Topologi dipilih secara dinamis berdasarkan tingkat konsistensi, jarak geografis, dan bandwidth jaringan yang tersedia antara sumber dan partisi fisik target.

Layanan ini memungkinkan Anda untuk mengonfigurasi database Azure Cosmos DB Anda dengan wilayah tulis tunggal atau beberapa wilayah tulis, tergantung pada pilihan Anda, set partisi dikonfigurasi untuk menerima penulisan di satu atau semua wilayah. Sistem ini menggunakan protokol konsensus bersarang dua tingkat – satu tingkat beroperasi dalam replika dari replica-set pada partisi fisik yang menerima penulisan, dan yang lain beroperasi pada tingkat partition-set untuk memberikan jaminan pengurutan lengkap untuk semua komitmen penulisan dalam partition-set. Konsensus berlapis berlapis ini sangat penting untuk implementasi SLA kami yang ketat untuk ketersediaan tinggi, serta implementasi model konsistensi, yang ditawarkan Azure Cosmos DB kepada pelanggannya.

Resolusi konflik

Desain kami untuk penyebaran pembaruan, resolusi konflik, dan pelacakan kausalitas terinspirasi dari pekerjaan sebelumnya pada algoritma epidemi dan sistem Bayou. Meskipun kernel ide-ide telah bertahan dan memberikan bingkai referensi yang nyaman untuk mengomunikasikan desain sistem Azure Cosmos DB, mereka juga telah mengalami transformasi signifikan saat kami menerapkannya ke sistem Azure Cosmos DB. Ini diperlukan karena sistem sebelumnya tidak dirancang dengan tata kelola sumber daya maupun skala yang dibutuhkan oleh Azure Cosmos DB untuk beroperasi, serta untuk memberikan kemampuan (misalnya, konsistensi keusangan terikat) dan SLA yang ketat dan komprehensif yang disediakan oleh Azure Cosmos DB kepada pelanggannya.

Ingat bahwa set partisi didistribusikan di beberapa wilayah dan mengikuti protokol replikasi Azure Cosmos DB dengan fitur penulisan multi-wilayah untuk mereplikasi data di antara partisi fisik yang termasuk dalam set partisi tersebut. Setiap partisi fisik (dari partition-set) menerima penulisan data dan melayani pembacaan data, biasanya untuk klien yang berada di wilayah lokal tersebut. Tulisan yang diterima oleh partisi fisik dalam suatu wilayah akan dicatat secara permanen dan dijamin sangat tersedia dalam partisi fisik tersebut sebelum diakui kepada klien. Ini adalah penulisan tentatif dan disebarluaskan ke partisi fisik lainnya dalam partition-set menggunakan saluran anti-entropi. Klien dapat meminta penulisan tentatif atau berkomitmen dengan mengirimkan header permintaan. Propagasi anti-entropi (termasuk frekuensi propagasi) bersifat dinamis, berdasarkan topologi partition-set, kedekatan regional partisi fisik, dan tingkat konsistensi yang dikonfigurasi. Dalam set partisi, Azure Cosmos DB mengikuti skema komit utama dengan partisi arbiter yang dipilih secara dinamis. Pemilihan penengah bersifat dinamis dan merupakan bagian integral dari konfigurasi ulang partition-set berdasarkan topologi overlay. Penulisan yang diterapkan (termasuk pembaruan multi-baris dan batch) dijamin memiliki urutan yang pasti.

Kami menggunakan penunjuk waktu vektor berkode (berisi ID wilayah dan penunjuk waktu logis yang berhubungan dengan tingkat konsensus pada replica-set, dan partition-set) untuk pelacakan kausalitas dan vektor versi, guna mendeteksi serta menyelesaikan konflik pembaruan. Topologi dan algoritma pemilihan rekannya dirancang untuk memastikan penyimpanan yang tetap dan minimal serta overhead jaringan yang minimal pada vektor versi. Algoritma menjamin properti konvergensi yang ketat.

Untuk database Azure Cosmos DB yang dikonfigurasi dengan beberapa wilayah tulis, sistem menawarkan sejumlah kebijakan resolusi konflik otomatis yang fleksibel untuk dipilih pengembang, termasuk:

  • Last-Write-Wins (LWW), yang, secara default, menggunakan properti tanda waktu yang ditentukan sistem (berdasarkan protokol jam sinkronisasi waktu). Azure Cosmos DB juga memungkinkan Anda menentukan properti numerik kustom lainnya yang akan digunakan untuk resolusi konflik.
  • Kebijakan penyelesaian konflik yang ditentukan oleh aplikasi (kustom) (dinyatakan melalui prosedur penggabungan), yang dirancang untuk rekonsiliasi semantik dalam konflik sesuai dengan definisi aplikasi. Prosedur ini dipanggil saat mendeteksi konflik tulis-tulis dalam konteks transaksi basis data di sisi server. Sistem menyediakan hanya satu jaminan untuk pelaksanaan prosedur penggabungan sebagai bagian dari protokol komitmen. Ada beberapa sampel resolusi konflik yang tersedia untuk Anda mainkan.

Model konsistensi

Baik Anda mengonfigurasi database Azure Cosmos DB dengan satu atau beberapa wilayah tulis, Anda dapat memilih dari lima model konsistensi yang ditentukan dengan baik. Model-model ini berkisar dari konsistensi kuat hingga konsistensi akhir, dan memengaruhi cara replika dalam set partisi menyinkronkan data.

Dalam konteks distribusi global:

  • Keterbatasan keusangan menggunakan protokol anti-entropi dengan pembatasan laju, memastikan awalan tidak menumpuk dan penulisan tidak dibatasi secara tidak perlu.
  • Konsistensi sesi menjamin pembacaan monoton, penulisan monoton, membaca tulisan Anda sendiri, penulisan mengikuti pembacaan, dan prefiks konsisten—di seluruh dunia.
  • Konsistensi yang kuat memerlukan replikasi sinkron di seluruh wilayah, yang berarti akun tulis multi-wilayah tidak mendapat manfaat dari latensi tulis rendah atau ketersediaan tulis tinggi saat menggunakan tingkat ini.

Untuk detail lengkap tentang semantik dan jaminan tingkat konsistensi, lihat Tingkat konsistensi di Azure Cosmos DB. Model konsistensi juga dijelaskan secara matematis menggunakan spesifikasi TLA+.

Langkah berikutnya

Selanjutnya pelajari cara mengonfigurasi distribusi global dengan menggunakan artikel berikut: