Ç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 bir 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 de 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şle tercih edilen bölge | Birincil bölge |
Birden çok yazma bölgesi | En yüksek siparişle tercih edilen bölge | En yüksek siparişle tercih edilen bölge |
Tercih edilen bölgeyi ayarlamazsanız, SDK istemcisi varsayılan olarak birincil bölgeyi kullanı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. Bu, 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 parametresi false olarak ayarlanıyor.
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'daki yanıtlarda 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.
Bir sonraki bölgeyi tercih sırasına göre belirlerken SDK istemcisi, tercih edilen bölgelere (varsa) öncelik verirseniz hesap bölgesi listesini kullanır.
Bu olaylar sırasında SLA garantileriyle ilgili kapsamlı bir ayrıntı 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ölge kaldırma işlemini 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 bir sonraki bölgeye yönlendirilir. Tercih listesinde yalnızca bir giriş varsa (veya boşsa) ancak hesapta başka bölgeler varsa, hesap listesinde bir sonraki bölgeye yönlendirilir.
Hesaba bölge ekleme
Azure Cosmos DB SDK istemcisi 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 geri 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 kullanmaya 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ırdığınızda tercih edilen bölge yoksayılır. Bu bölgeyi daha sonra eklerseniz, istemci bölgeyi algılar ve kalıcı olarak o bölgeye geçer.
Yazma bölgesinin yükünü tek bir yazma bölgesi hesabında 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 bir yazma işlemi sırasında bölgesel kesinti oluşursa, davranış el ile yük devretmeye benzer. Okuma istekleri veya birden çok yazma bölgesi hesabı için bu 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 bir yazma işlemi yaptığı ve ardından yerel bir bölgeden okuma yaptığı durumlar olabilir, yerel bölge henüz veri çoğaltmasını almamış olabilir (ışık kısıtlaması hızı). Böyle 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 denenir. Birden çok yazma bölgesine sahip hesaplar için aynı oturum semantiği geçerlidir, 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 çıkabilir. İstemci mümkünse isteği birkaç saniye boyunca aynı uç noktada yerel olarak yeniden dener .
Kullanıcı birden fazla bölge içeren bir tercih edilen bölge listesi yapılandırdıysa ve istemci tüm yerel yeniden denemeleri tükettiyse, tercih listesinden bir 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 Node SDK'sını kullanma