Aracılığıyla paylaş


Azure Cosmos DB Java SDK v4 için bağlantı yapılandırmalarını ayarlama

UYGULANANLAR: NoSQL

Önemli

Bu makaledeki performans ipuçları yalnızca Azure Cosmos DB Java SDK v4 içindir. Daha fazla bilgi için lütfen Azure Cosmos DB Java SDK v4 Sürüm notlarını, Maven deposunu ve Azure Cosmos DB Java SDK v4 sorun giderme kılavuzunu görüntüleyin. Şu anda v4'ten daha eski bir sürüm kullanıyorsanız v4'e yükseltme konusunda yardım için Bkz . Azure Cosmos DB Java SDK'sı v4'e geçiş kılavuzu.

Azure Cosmos DB, garantili gecikme süresi ve aktarım hızı ile sorunsuz bir şekilde ölçeklendirilen hızlı ve esnek bir dağıtılmış veritabanıdır. Azure Cosmos DB ile veritabanınızı ölçeklendirmek için büyük mimari değişiklikleri yapmanız veya karmaşık kod yazmanız gerekmez. Ölçeği artırma ve azaltma, tek bir API çağrısı veya SDK yöntem çağrısı yapmak kadar kolaydır. Ancak Azure Cosmos DB'ye ağ çağrıları aracılığıyla erişildiğinden, Azure Cosmos DB Java SDK v4 kullanırken en yüksek performansı elde etmek için ayarlayabileceğiniz bağlantı yapılandırmaları vardır.

Bağlantı yapılandırması

Not

Azure Cosmos DB Java SDK v4'te, çoğu iş yüküyle veritabanı performansını geliştirmek için en iyi seçenek Doğrudan modudur .

Farklı bağlantı seçenekleri hakkında daha fazla bilgi edinmek için bağlantı modları makalesine bakın.

Doğrudan bağlantı modu

Java SDK varsayılan bağlantı modu doğrudandır. Doğrudan mod Azure Cosmos DB istekleri, Azure Cosmos DB Java SDK v4 kullanılırken TCP üzerinden yapılır. Dahili Doğrudan modu, ağ kaynaklarını dinamik olarak yönetmek ve en iyi performansı elde etmek için özel bir mimari kullanır. Doğrudan modda kullanılan istemci tarafı mimarisi, Azure Cosmos DB çoğaltmalarına tahmin edilebilir ağ kullanımı ve çoklu erişim sağlar. Mimari hakkında daha fazla bilgi edinmek için bkz . Doğrudan mod bağlantı mimarisi

Aşağıda gösterildiği gibi directMode() yöntemini kullanarak istemci oluşturucusunda bağlantı modunu yapılandırabilirsiniz. Varsayılan ayarlarla doğrudan modu yapılandırmak için bağımsız değişkenler olmadan yöntemini çağırabilirsiniz directMode() . Doğrudan mod bağlantı ayarlarını özelleştirmek için DirectConnectionConfig'i API'ye directMode() geçirin.

Java SDK V4 (Maven com.azure::azure-cosmos) Async API


/* Direct mode, default settings */
CosmosAsyncClient clientDirectDefault = new CosmosClientBuilder()
        .endpoint(HOSTNAME)
        .key(MASTERKEY)
        .consistencyLevel(CONSISTENCY)
        .directMode()
        .buildAsyncClient();

/* Direct mode, custom settings */
DirectConnectionConfig directConnectionConfig = DirectConnectionConfig.getDefaultConfig();

// Example config, do not use these settings as defaults
directConnectionConfig.setMaxConnectionsPerEndpoint(130);
directConnectionConfig.setIdleConnectionTimeout(Duration.ZERO);

CosmosAsyncClient clientDirectCustom = new CosmosClientBuilder()
        .endpoint(HOSTNAME)
        .key(MASTERKEY)
        .consistencyLevel(CONSISTENCY)
        .directMode(directConnectionConfig)
        .buildAsyncClient();

/* Gateway mode, default settings */
CosmosAsyncClient clientGatewayDefault = new CosmosClientBuilder()
        .endpoint(HOSTNAME)
        .key(MASTERKEY)
        .consistencyLevel(CONSISTENCY)
        .gatewayMode()
        .buildAsyncClient();

/* Gateway mode, custom settings */
GatewayConnectionConfig gatewayConnectionConfig = GatewayConnectionConfig.getDefaultConfig();

// Example config, do not use these settings as defaults
gatewayConnectionConfig.setProxy(new ProxyOptions(ProxyOptions.Type.HTTP, InetSocketAddress.createUnresolved("your.proxy.addr",80)));
gatewayConnectionConfig.setMaxConnectionPoolSize(1000);

CosmosAsyncClient clientGatewayCustom = new CosmosClientBuilder()
        .endpoint(HOSTNAME)
        .key(MASTERKEY)
        .consistencyLevel(CONSISTENCY)
        .gatewayMode(gatewayConnectionConfig)
        .buildAsyncClient();

/* No connection mode, defaults to Direct mode with default settings */
CosmosAsyncClient clientDefault = new CosmosClientBuilder()
        .endpoint(HOSTNAME)
        .key(MASTERKEY)
        .consistencyLevel(CONSISTENCY)
        .buildAsyncClient();

Doğrudan bağlantı modunu özelleştirme

Varsayılan olmayan Doğrudan mod davranışı isteniyorsa, bir DirectConnectionConfig örneği oluşturun ve özelliklerini özelleştirin, ardından özelleştirilmiş özellik örneğini Azure Cosmos DB istemci oluşturucusunda directMode() yöntemine geçirin.

Bu yapılandırma ayarları, yukarıda açıklanan temel Doğrudan mod mimarisinin davranışını denetler.

İlk adım olarak aşağıdaki önerilen yapılandırma ayarlarını kullanın. Bu DirectConnectionConfig seçenekleri, SDK performansını beklenmedik şekillerde etkileyebilecek gelişmiş yapılandırma ayarlarıdır; kullanıcıların dengeleri anlamakta çok rahat hissetmedikleri ve kesinlikle gerekli olmadığı sürece bunları değiştirmekten kaçınmalarını öneririz. Bu konuda sorunlarla karşılaşırsanız lütfen Azure Cosmos DB ekibine başvurun.

Yapılandırma seçeneği Varsayılan Önerilir Ayrıntılar
idleConnectionTimeout "PT0" (SIFIR) "PT0" (SIFIR) Bu, bir uç noktaya/arka uç düğümüne (çoğaltmayı temsil eden) tek bir bağlantı için boşta bağlantı zaman aşımı süresini temsil eder. Varsayılan olarak, SDK arka uç düğümlerine yönelik boşta bağlantıları otomatik olarak kapatmaz.
idleEndpointTimeout "PT1H" "PT1H" Bu, bir uç nokta/arka uç düğümü için bağlantı havuzu için boşta bağlantı zaman aşımı süresini temsil eder (çoğaltmayı temsil eder). Varsayılan olarak, belirli bir uç noktaya/arka uç düğümüne gelen istek yoksa SDK, ağ kaynaklarından ve G/Ç maliyetinden tasarruf etmek için 1 saat sonra bu uç nokta/arka uç düğümüne bağlantı havuzundaki tüm bağlantıları kapatır. Seyrek veya düzensiz trafik düzeninde, SDK'nın bağlantıları sık sık açması gerekmeyecek şekilde bu değeri 6 saat, 12 saat, hatta 24 saat gibi daha yüksek bir sayıya ayarlamanızı öneririz. Ancak bu, ağ kaynaklarını kullanır ve herhangi bir zamanda açık tutulan daha fazla bağlantı sayısına sahip olur. Bu SIFIR olarak ayarlanırsa boşta uç nokta denetimi devre dışı bırakılır.
maxConnectionsPerEndpoint "130" "130" Bu, bir uç nokta/arka uç düğümü için bağlantı havuzunun üst sınır boyutunu temsil eder (bir çoğaltmayı temsil eder). SDK, isteğe bağlı olarak ve gelen eşzamanlı isteklere göre uç nokta/arka uç düğümüne bağlantılar oluşturur. Varsayılan olarak, gerekirse SDK bir uç nokta/arka uç düğümüne en fazla 130 bağlantı oluşturur. (NOT: SDK bu 130 bağlantıyı önceden oluşturmaz).
maxRequestsPerConnection "30" "30" Bu, belirli bir uç nokta/arka uç düğümü (bir çoğaltmayı temsil eden) için tek bir bağlantıda kuyruğa alınabilecek en fazla istek sayısının üst sınır boyutunu temsil eder. SDK, istekleri isteğe bağlı olarak ve gelen eşzamanlı isteklere göre bir uç nokta/arka uç düğümüne tek bir bağlantı için kuyruğa alır. Varsayılan olarak, gerekirse SDK belirli bir uç nokta/arka uç düğümü için tek bir bağlantıya en fazla 30 istek kuyruğa alır. (NOT: SDK bu 30 isteği tek bir bağlantı ön planda kuyruğa almaz).
connectTimeout "PT5S" "~PT1S" Bu, bir uç nokta/arka uç düğümüyle kurulacak tek bir bağlantı için bağlantı kurma zaman aşımı süresini temsil eder. Varsayılan olarak SDK, hata oluşturmadan önce bağlantı kurulması için en fazla 5 saniye bekler. TCP bağlantısı kurulumu, bağlantı kurma süresinin gecikme süresini artıran çok adımlı el sıkışması kullanır, bu nedenle müşterilerin bu değeri ağ bant genişliğine ve ortam ayarlarına göre ayarlamaları önerilir. NOT: ~PT1S'nin bu önerisi yalnızca Cosmos DB hesaplarının birlikte bulunan bölgelerine dağıtılan uygulamalara yöneliktir.
networkRequestTimeout "PT5S" "PT5S" Bu, tek bir isteğin ağ zaman aşımı süresini temsil eder. İstek ağ bağlantısına yazıldıktan sonra SDK bu süre boyunca hizmet yanıtını kullanmak için en fazla bekler. SDK yalnızca 1 saniye (dk) ile 10 saniye (maksimum) arasında değerlere izin verir. Değerin çok yüksek ayarlanması daha az yeniden denemeye neden olabilir ve yeniden denemelerin başarı şansını azaltabilir.

Ağ Geçidi Bağlantı modu

Veritabanı ve kapsayıcı CRUD gibi denetim düzlemi işlemleri her zaman Ağ Geçidi modunu kullanır. Kullanıcı veri düzlemi işlemleri için Doğrudan modu yapılandırmış olsa bile, denetim düzlemi ve meta veri işlemleri varsayılan Ağ Geçidi modu ayarlarını kullanır. Bu çoğu kullanıcıya uygundur. Ancak, veri düzlemi işlemleri için Doğrudan modu ve denetim düzlemi Ağ geçidi modu parametrelerinin tunability özelliğini isteyen kullanıcılar aşağıdaki directMode() geçersiz kılmasını kullanabilir:

Java SDK V4 (Maven com.azure::azure-cosmos) Async API


/* Independent customization of Direct mode data plane and Gateway mode control plane */
DirectConnectionConfig directConnectionConfig = DirectConnectionConfig.getDefaultConfig();

// Example config, do not use these settings as defaults
directConnectionConfig.setMaxConnectionsPerEndpoint(130);
directConnectionConfig.setIdleConnectionTimeout(Duration.ZERO);

GatewayConnectionConfig gatewayConnectionConfig = GatewayConnectionConfig.getDefaultConfig();

// Example config, do not use these settings as defaults
gatewayConnectionConfig.setProxy(new ProxyOptions(ProxyOptions.Type.HTTP, InetSocketAddress.createUnresolved("your.proxy.addr",80)));
gatewayConnectionConfig.setMaxConnectionPoolSize(1000);

CosmosAsyncClient clientDirectCustom = new CosmosClientBuilder()
        .endpoint(HOSTNAME)
        .key(MASTERKEY)
        .consistencyLevel(CONSISTENCY)
        .directMode(directConnectionConfig,gatewayConnectionConfig)
        .buildAsyncClient();

Ağ geçidi bağlantı modunu özelleştirme

Varsayılan olmayan Ağ Geçidi modu davranışı isteniyorsa bir GatewayConnectionConfig örneği oluşturun ve özelliklerini özelleştirin, ardından özelleştirilmiş özellik örneğini Azure Cosmos DB istemci oluşturucusunda yukarıdaki directMode() geçersiz kılma yöntemine veya gatewayMode() yöntemine geçirin.

İlk adım olarak aşağıdaki önerilen yapılandırma ayarlarını kullanın. Bu GatewayConnectionConfig seçenekleri, SDK performansını beklenmedik şekillerde etkileyebilecek gelişmiş yapılandırma ayarlarıdır; kullanıcıların dengeleri anlamakta çok rahat hissetmedikleri ve kesinlikle gerekli olmadığı sürece bunları değiştirmekten kaçınmalarını öneririz. Bu konuda sorunlarla karşılaşırsanız lütfen Azure Cosmos DB ekibine başvurun.

Yapılandırma seçeneği Varsayılan Önerilir Ayrıntılar
maxConnectionPoolSize "1000" "1000" Bu, sdk'nın Ağ Geçidi moduna giden istekler için oluşturacağı bağlantı sayısı üst sınırı olan temel http istemcisi için bağlantı havuzu boyutunun üst sınır boyutunu temsil eder. SDK, ağ geçidine istek gönderirken bu bağlantıları yeniden kullanır.
idleConnectionTimeout "PT60S" "PT60S" Bu, Ağ Geçidine tek bir bağlantı için boşta bağlantı zaman aşımı süresini temsil eder. Bu süreden sonra bağlantı otomatik olarak kapatılır ve bağlantı havuzundan kaldırılır.

Sonraki adımlar

Java SDK'sına yönelik performans ipuçları hakkında daha fazla bilgi edinmek için bkz . Azure Cosmos DB Java SDK v4 için performans ipuçları.

Uygulamanızı ölçeklendirme ve yüksek performans için tasarlama hakkında daha fazla bilgi edinmek için bkz . Azure Cosmos DB'de bölümleme ve ölçeklendirme.

Azure Cosmos DB'ye geçiş için kapasite planlaması yapmaya mı çalışıyorsunuz? Kapasite planlaması için mevcut veritabanı kümeniz hakkındaki bilgileri kullanabilirsiniz.

  • Tek bildiğiniz mevcut veritabanı kümenizdeki sanal çekirdek ve sunucu sayısıysa, sanal çekirdek veya vCPU kullanarak istek birimlerini tahmin etme hakkında bilgi edinin
  • Geçerli veritabanı iş yükünüz için tipik istek oranlarını biliyorsanız Azure Cosmos DB kapasite planlayıcısı kullanarak istek birimlerini tahmin etme hakkında bilgi edinin