Mendiagnosis dan memecahkan masalah ketersediaan SDK Azure Cosmos DB di lingkungan multiregional
BERLAKU UNTUK: NoSQL
Artikel ini menjelaskan perilaku versi terbaru Azure Cosmos DB SDK saat Anda melihat masalah konektivitas ke wilayah tertentu atau ketika kegagalan wilayah terjadi.
Semua SDK Azure Cosmos DB 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.
Ketika SDK menginisialisasi dengan konfigurasi yang menentukan preferensi regional, SDK akan terlebih dahulu mendapatkan informasi akun termasuk wilayah yang tersedia dari titik akhir global. Kemudian akan menerapkan persimpangan preferensi regional yang dikonfigurasi dan wilayah akun yang tersedia dan menggunakan urutan di preferensi regional untuk memprioritaskan hasilnya.
Jika konfigurasi preferensi regional berisi wilayah yang bukan wilayah yang tersedia di akun, nilai akan diabaikan. Jika wilayah yang tidak valid ini ditambahkan nanti ke akun, SDK akan menggunakannya jika lebih tinggi dalam konfigurasi preferensi.
Jenis akun | Baca | Tulis |
---|---|---|
Wilayah tulis tunggal | Wilayah pilihan dengan urutan tertinggi | Wilayah utama |
Beberapa wilayah tulis | Wilayah pilihan dengan urutan tertinggi | Wilayah pilihan dengan urutan tertinggi |
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 mengacu pada wilayah pertama dalam daftar wilayah akun Azure Cosmos DB. 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 DB 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 DB, 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 DB SDK membaca konfigurasi akun dan me-refresh wilayah yang diwaspadainya.
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 tersambung ke wilayah yang tidak dimiliki akun Azure Cosmos DB, wilayah pilihan diabaikan. Jika Anda menambahkan wilayah itu nanti, klien akan 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 tulis 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 di mana pengguna mengeluarkan tulis dan kemudian melakukan bacaan dari wilayah lokal, wilayah lokal belum menerima replikasi data (kecepatan batasan cahaya). Dalam kasus seperti itu, SDK menerima kegagalan tertentu dari layanan pada operasi baca dan mencoba kembali baca di wilayah utama untuk memastikan konsistensi sesi. Untuk akun dengan beberapa wilayah tulis, semantik sesi yang sama berlaku tetapi karena ada beberapa wilayah tulis yang tersedia, percobaan ulang dikeluarkan menggunakan daftar wilayah atau urutan wilayah akun pilihan.
Masalah konektivitas sementara pada protokol TCP
Dalam skenario di mana klien Azure Cosmos DB SDK dikonfigurasi untuk menggunakan protokol TCP, untuk permintaan tertentu, mungkin ada situasi di mana kondisi jaringan 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, jika memungkinkan, mencoba kembali permintaan secara lokal pada titik akhir yang sama selama beberapa detik.
Jika pengguna telah mengonfigurasi daftar wilayah pilihan dengan lebih dari satu wilayah dan klien kehabisan semua percobaan lokal, pengguna dapat mencoba untuk mencoba kembali operasi tunggal itu di wilayah berikutnya dari daftar preferensi. Operasi tulis hanya dapat dicoba kembali di wilayah lain jika akun Azure Cosmos DB memiliki beberapa wilayah tulis yang diaktifkan, sementara operasi baca bisa dicoba lagi di wilayah yang tersedia.
Langkah berikutnya
- Tinjau SLA Ketersediaan.
- Gunakan .NET SDK terbaru
- Gunakan Java SDK terbaru
- Gunakan Python SDK terbaru
- Gunakan Node SDK terbaru