Mendiagnosis dan memecahkan masalah ketersediaan SDK Azure Cosmos di lingkungan multiregional

BERLAKU UNTUK: SQL API

Artikel ini menjelaskan perilaku versi terbaru Azure Cosmos SDKs ketika Anda melihat masalah konektivitas ke wilayah tertentu atau ketika terjadi kegagalan wilayah.

Semua SDK Azure Cosmos memberi Anda opsi untuk menyesuaikan preferensi regional. Properti berikut ini digunakan dalam SDK yang berbeda:

Saat Anda mengatur preferensi wilayah, klien akan tersambung ke wilayah seperti yang disebutkan dalam tabel berikut:

Jenis akun Baca Tulis
Wilayah tulis tunggal Wilayah pilihan Wilayah utama
Beberapa wilayah tulis Wilayah pilihan Wilayah pilihan

Jika Anda tidak menetapkan wilayah pilihan, klien SDK akan didefault ke wilayah utama:

Jenis akun Baca Tulis
Wilayah tulis tunggal Wilayah utama Wilayah utama
Beberapa wilayah tulis Wilayah utama Wilayah utama

Catatan

Wilayah utama adalah wilayah pertama dalam daftar wilayah akun Azure Cosmos. Jika nilai yang ditentukan sebagai preferensi wilayah tidak cocok dengan wilayah Azure yang ada, nilai tersebut akan diabaikan. Jika cocok dengan wilayah yang ada tetapi akun tidak direplikasi ke wilayah tersebut, maka klien akan terhubung ke wilayah pilihan berikutnya yang cocok atau ke wilayah utama.

Peringatan

Logika failover dan ketersediaan yang dijelaskan dalam dokumen ini dapat dinonaktifkan pada konfigurasi klien, yang tidak disarankan kecuali aplikasi pengguna akan menangani kesalahan ketersediaan itu sendiri. Ini dapat dicapai dengan:

Dalam keadaan normal, klien SDK akan terhubung ke wilayah pilihan (jika preferensi regional ditetapkan) atau ke wilayah utama (jika tidak ada preferensi yang ditetapkan), dan operasi akan terbatas pada wilayah tersebut, kecuali terjadi salah satu skenario di bawah.

Dalam kasus ini, klien yang menggunakan Azure Cosmos SDK mengekspos log dan menyertakan informasi coba lagi sebagai bagian dari informasi diagnostik operasi:

  • Properti RequestDiagnosticsString pada respons di .NET V2 SDK.
  • Properti Diagnostik mengenai tanggapan dan pengecualian di .NET V3 SDK.
  • Metode getDiagnostics() pada respons dan pengecualian di Java V4 SDK.

Saat menentukan wilayah berikutnya dalam urutan preferensi, klien SDK akan menggunakan daftar wilayah akun, yang memprioritaskan wilayah pilihan (jika ada).

Untuk detail komprehensif tentang jaminan SLA selama peristiwa ini, lihat SLA untuk ketersediaan.

Menghapus wilayah dari akun

Saat Anda menghapus wilayah dari akun Azure Cosmos, klien SDK apa pun yang secara aktif menggunakan akun akan mendeteksi penghapusan wilayah melalui kode respons backend. Klien selanjutnya menandai titik akhir regional sebagai tidak tersedia. Klien mencoba lagi operasi saat ini dan semua operasi di masa mendatang dirutekan secara permanen ke wilayah berikutnya dalam urutan preferensi. Jika daftar preferensi hanya memiliki satu entri (atau kosong) tetapi akun tersebut memiliki wilayah lain yang tersedia, maka akan merutekan ke wilayah berikutnya dalam daftar akun.

Menambahkan wilayah ke akun

Setiap 5 menit, klien Azure Cosmos SDK membaca konfigurasi akun dan merefresh wilayah yang diperhatikan.

Jika Anda menghapus bidang dan kemudian menambahkannya kembali ke akun, jika wilayah yang ditambahkan memiliki urutan preferensi regional yang lebih tinggi dalam konfigurasi SDK daripada wilayah yang tersambung saat ini, SDK akan beralih kembali untuk menggunakan wilayah ini secara permanen. Setelah wilayah tambahan terdeteksi, semua permintaan di masa depan diarahkan ke sana.

Jika Anda mengonfigurasi klien agar lebih disukai terhubung ke wilayah yang tidak memiliki akun Azure Cosmos, wilayah yang dipilih akan diabaikan. Jika Anda menambahkan wilayah itu nanti, klien mendeteksinya dan akan beralih secara permanen ke wilayah tersebut.

Failover wilayah tulis dalam satu akun wilayah tulis

Jika Anda memulai failover dari wilayah tulis saat ini, permintaan tulis berikutnya akan gagal dengan respons backend yang diketahui. Ketika respons ini terdeteksi, klien akan meminta akun untuk mempelajari wilayah tulis baru dan melanjutkan untuk mencoba kembali operasi saat ini dan secara permanen merutekan semua operasi penulisan di masa mendatang ke wilayah baru.

Pemadaman regional

Jika akun tersebut merupakan wilayah tulis tunggal dan pemadaman regional terjadi selama operasi tulis, perilaku ini mirip dengan failover manual. Untuk permintaan baca atau beberapa akun wilayah tulis, perilaku tersebut mirip dengan menghapus wilayah.

Jaminan konsistensi sesi

Saat menggunakan konsistensi sesi, klien perlu menjamin bahwa ia dapat membaca tulisannya sendiri. Dalam akun wilayah tulis tunggal di mana preferensi wilayah baca berbeda dari wilayah tulis, mungkin ada kasus ketika pengguna mengeluarkan tulisan dan ketika melakukan baca dari wilayah lokal, wilayah lokal tersebut belum menerima replikasi data (batasan kecepatan cahaya). Dalam kasus tersebut, SDK mendeteksi kegagalan spesifik pada operasi baca dan mencoba kembali bacaan pada wilayah utama untuk memastikan konsistensi sesi.

Masalah konektivitas sementara pada protokol TCP

Dalam skenario ketika klien Azure Cosmos SDK dikonfigurasi untuk menggunakan protokol TCP, untuk permintaan tertentu, mungkin ada situasi saat kondisi jaringan untuk sementara memengaruhi komunikasi dengan titik akhir tertentu. Kondisi jaringan sementara ini dapat muncul karena batas waktu TCP dan kesalahan Layanan Tidak Tersedia (HTTP 503). Klien akan mencoba kembali permintaan secara lokal pada titik akhir yang sama selama beberapa detik sebelum memunculkan kesalahan.

Jika pengguna telah mengonfigurasi daftar wilayah pilihan dengan lebih dari satu wilayah dan akun Azure Cosmos merupakan beberapa wilayah tulis atau wilayah tulis tunggal dan operasinya adalah permintaan baca, klien akan mendeteksi kegagalan lokal, dan mencoba kembali operasi tunggal itu di wilayah berikutnya dari daftar preferensi.

Langkah berikutnya