Çok bölgeli ortamlarda Azure Cosmos DB SDK'larının kullanılabilirliğini tanılama ve sorunlarını giderme
UYGULANANLAR: NoSQL
Bu makalede, belirli bir bölgeye bağlantı sorunu gördüğünüzde veya bölge yük devretmesi oluştuğunda Azure Cosmos DB SDK'larının en son sürümünün davranışı açıklanmaktadır.
Tüm Azure Cosmos DB SDK'ları size bölgesel tercihi özelleştirme seçeneği sağlar. Aşağıdaki özellikler farklı SDK'larda kullanılır:
- .NET V2 SDK'sında ConnectionPolicy.PreferredLocations özelliği.
- .NET V3 SDK'sında CosmosClientOptions.ApplicationRegion veya CosmosClientOptions.ApplicationPreferredRegions özellikleri.
- Java V4 SDK'sında CosmosClientBuilder.preferredRegions yöntemi.
- Python SDK'sında CosmosClient.preferred_locations parametresi.
- JS SDK'sında CosmosClientOptions.ConnectionPolicy.preferredLocations parametresi.
SDK bölgesel tercihi belirten bir yapılandırmayla başlatıldığında, önce genel uç noktadan kullanılabilir bölgeler dahil olmak üzere hesap bilgilerini alır. Ardından yapılandırılan bölgesel tercihin ve hesabın kullanılabilir bölgelerinin kesişimini uygular ve sonucu önceliklendirmek için bölgesel tercihteki sırayı kullanır.
Bölgesel tercih yapılandırması hesapta kullanılabilir bir bölge olmayan bölgeler içeriyorsa, değerler yoksayılır. Bu geçersiz bölgeler daha sonra hesaba eklenirse, tercih yapılandırmasında daha yüksekse SDK bunları kullanır.
Hesap türü | Okumalar | Yazmalar |
---|---|---|
Tek yazma bölgesi | En yüksek siparişe sahip tercih edilen bölge | Birincil bölge |
Birden çok yazma bölgesi | En yüksek siparişe sahip tercih edilen bölge | En yüksek siparişe sahip tercih edilen bölge |
Tercih edilen bir bölge ayarlamazsanız, SDK istemcisi varsayılan olarak birincil bölgeye ayarlanır:
Hesap türü | Okumalar | Yazmalar |
---|---|---|
Tek yazma bölgesi | Birincil bölge | Birincil bölge |
Birden çok yazma bölgesi | Birincil bölge | Birincil bölge |
Not
Birincil bölge, Azure Cosmos DB hesap bölgesi listesindeki ilk bölgeyi ifade eder. Bölgesel tercih olarak belirtilen değerler mevcut Azure bölgeleriyle eşleşmiyorsa yoksayılır. Mevcut bir bölgeyle eşleşiyorsa ancak hesap bu bölgeye çoğaltılmazsa istemci, birincil bölgeyle eşleşen veya birincil bölgeyle eşleşen bir sonraki tercih edilen bölgeye bağlanır.
Uyarı
Bu belgede açıklanan yük devretme ve kullanılabilirlik mantığı istemci yapılandırmasında devre dışı bırakılabilir ve kullanıcı uygulaması kullanılabilirlik hatalarını işlemediği sürece önerilmez. Bu, şu şekilde yapılabilir:
- .NET V2 SDK'sında ConnectionPolicy.EnableEndpointDiscovery özelliğini false olarak ayarlama.
- .NET V3 SDK'sında CosmosClientOptions.LimitToEndpoint özelliğini true olarak ayarlama.
- Java V4 SDK'sında CosmosClientBuilder.endpointDiscoveryEnabled yöntemini false olarak ayarlama.
- Python SDK'sında CosmosClient.enable_endpoint_discovery parametresini false olarak ayarlama.
- JS SDK'sında CosmosClientOptions.ConnectionPolicy.enableEndpointDiscovery parametresini false olarak ayarlama.
Normal koşullarda, SDK istemcisi tercih edilen bölgeye (bölgesel bir tercih ayarlandıysa) veya birincil bölgeye (tercih ayarlanmadıysa) bağlanır ve aşağıdaki senaryolardan herhangi biri gerçekleşmediği sürece işlemler bu bölgeyle sınırlandırılır.
Bu durumlarda, Azure Cosmos DB SDK'sını kullanan istemci günlükleri kullanıma sunar ve işlem tanılama bilgilerinin bir parçası olarak yeniden deneme bilgilerini içerir:
- .NET V2 SDK'sı yanıtlarında RequestDiagnosticsString özelliği.
- .NET V3 SDK'sında yanıtlar ve özel durumlarla ilgili Tanılama özelliği.
- Java V4 SDK'sında yanıtlar ve özel durumlardaki getDiagnostics() yöntemi.
Tercih sırasına göre bir sonraki bölgeyi belirlerken SDK istemcisi, tercih edilen bölgelere (varsa) öncelik verirseniz hesap bölgesi listesini kullanır.
Bu olaylar sırasında SLA garantileri hakkında ayrıntılı bilgi için bkz . Kullanılabilirlik için SLA'lar.
Hesaptan bölge kaldırma
Azure Cosmos DB hesabından bir bölgeyi kaldırdığınızda, hesabı etkin olarak kullanan herhangi bir SDK istemcisi arka uç yanıt kodu aracılığıyla bölgenin kaldırılmasını algılar. İstemci daha sonra bölgesel uç noktayı kullanılamaz olarak işaretler. İstemci geçerli işlemi yeniden dener ve gelecekteki tüm işlemler tercih sırasına göre kalıcı olarak sonraki bölgeye yönlendirilir. Tercih listesinde yalnızca bir giriş olması (veya boş olması) ancak hesabın kullanılabilir başka bölgeleri olması durumunda, hesap listesinde bir sonraki bölgeye yönlendirilir.
Hesaba bölge ekleme
Azure Cosmos DB SDK istemcisi her 5 dakikada bir hesap yapılandırmasını okur ve farkında olduğu bölgeleri yeniler.
Bir bölgeyi kaldırır ve daha sonra hesaba yeniden eklerseniz, eklenen bölgenin SDK yapılandırmasında geçerli bağlı bölgeden daha yüksek bir bölgesel tercih sırası varsa, SDK bu bölgeyi kalıcı olarak kullanmak için geri döner. Eklenen bölge algılandıktan sonra, gelecekteki tüm istekler bu bölgeye yönlendirilir.
İstemciyi tercihen Azure Cosmos DB hesabının olmadığı bir bölgeye bağlanacak şekilde yapılandırıyorsanız, tercih edilen bölge yoksayılır. Bu bölgeyi daha sonra eklerseniz, istemci bölgeyi algılar ve kalıcı olarak bu bölgeye geçer.
Tek bir yazma bölgesi hesabında yazma bölgesinin yükünü devretme
Geçerli yazma bölgesinin yük devretmesini başlatırsanız, bir sonraki yazma isteği bilinen bir arka uç yanıtıyla başarısız olur. Bu yanıt algılandığında, istemci yeni yazma bölgesini öğrenmek için hesabı sorgular ve geçerli işlemi yeniden denemeye devam eder ve gelecekteki tüm yazma işlemlerini yeni bölgeye kalıcı olarak yönlendirir.
Bölgesel kesinti
Hesap tek bir yazma bölgesiyse ve bölgesel kesinti bir yazma işlemi sırasında oluşuyorsa, davranış el ile yük devretmeye benzer. Okuma istekleri veya birden çok yazma bölgesi hesabı için davranış, bir bölgeyi kaldırmaya benzer.
Oturum tutarlılığı garantileri
Oturum tutarlılığını kullanırken istemcinin kendi yazmalarını okuyabileceğini garanti etmesi gerekir. Okuma bölgesi tercihinin yazma bölgesinden farklı olduğu tek yazma bölgesi hesaplarında, kullanıcının yazma işlemi yaptığı ve ardından yerel bir bölgeden okuma yaptığı durumlar olabilir, yerel bölge henüz veri çoğaltmasını (ışık kısıtlaması hızı) almamış olabilir. Bu gibi durumlarda SDK, okuma işleminde hizmetten belirli bir hata alır ve oturum tutarlılığını sağlamak için birincil bölgede okuma işlemini yeniden dener. Birden çok yazma bölgesine sahip hesaplar için aynı oturum semantiği uygulanır, ancak birden çok yazma bölgesi olduğundan, yeniden denemeler tercih edilen bölge listesi veya hesabın bölge sırası kullanılarak verilir.
TCP protokolünde geçici bağlantı sorunları
Azure Cosmos DB SDK istemcisinin TCP protokollerini kullanacak şekilde yapılandırıldığı senaryolarda, belirli bir istek için ağ koşullarının belirli bir uç noktayla iletişimi geçici olarak etkilediği durumlar olabilir. Bu geçici ağ koşulları TCP zaman aşımları ve Hizmet Kullanılamıyor (HTTP 503) hataları olarak ortaya çıkar. İstemci mümkünse isteği birkaç saniye boyunca aynı uç noktada yerel olarak yeniden dener.
Kullanıcı birden fazla bölge içeren tercih edilen bir bölge listesi yapılandırdıysa ve istemci tüm yerel yeniden denemeleri tükettiyse, tercih listesinden sonraki bölgede bu tek işlemi yeniden denemeyi deneyebilir. Yazma işlemleri yalnızca Azure Cosmos DB hesabında birden çok yazma bölgesi etkinleştirilmişse başka bir bölgede yeniden denenebilirken, okuma işlemleri kullanılabilir herhangi bir bölgede yeniden denenebilir.
Sonraki adımlar
- Kullanılabilirlik SLA'larını gözden geçirin.
- En son .NET SDK'sını kullanma
- En son Java SDK'sını kullanma
- En son Python SDK'sını kullanma
- En son Düğüm SDK'sını kullanma