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:
- Properti ConnectionPolicy.PreferredLocations di .NET V2 SDK.
- Properti CosmosClientOptions.ApplicationRegion atau CosmosClientOptions.ApplicationPreferredRegions di .NET V3 SDK.
- Metode CosmosClientBuilder.preferredRegions di Java V4 SDK.
- Parameter CosmosClient.preferred_locations di Python SDK.
- Parameter CosmosClientOptions.ConnectionPolicy.preferredLocations di JS SDK.
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:
- Mengatur properti ConnectionPolicy.EnableEndpointDiscovery di .NET V2 SDK ke false.
- Mengatur properti CosmosClientOptions.LimitToEndpoint di .NET V3 SDK ke true.
- Mengatur metode CosmosClientBuilder.endpointDiscoveryEnabled di Java V4 SDK ke false.
- Mengatur parameter CosmosClient.enable_endpoint_discovery di Python SDK ke false.
- Mengatur parameter CosmosClientOptions.ConnectionPolicy.enableEndpointDiscovery di JS SDK ke false.
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
- Tinjau SLA Ketersediaan.
- Gunakan .NET SDK terbaru
- Gunakan Java SDK terbaru
- Gunakan Python SDK terbaru
- Gunakan Node SDK terbaru