Dostrajanie konfiguracji połączeń dla zestawu Java SDK usługi Azure Cosmos DB w wersji 4
DOTYCZY: NoSQL
Ważne
Porady dotyczące wydajności w tym artykule dotyczą tylko zestawu Java SDK usługi Azure Cosmos DB w wersji 4. Aby uzyskać więcej informacji, zobacz przewodnik rozwiązywania problemów z zestawem Java SDK usługi Azure Cosmos DB w wersji 4, repozytorium Maven i zestaw Java SDK usługi Azure Cosmos DB w wersji 4. Jeśli obecnie używasz starszej wersji niż 4, zobacz przewodnik Migrowanie do zestawu Java SDK usługi Azure Cosmos DB w wersji 4 , aby uzyskać pomoc dotyczącą uaktualniania do wersji 4.
Azure Cosmos DB to szybka i elastyczna rozproszona baza danych, która bezproblemowo skaluje się z gwarantowanym opóźnieniem i przepływnością. Nie musisz wprowadzać istotnych zmian architektury ani pisać złożonego kodu w celu skalowania bazy danych za pomocą usługi Azure Cosmos DB. Skalowanie w górę i w dół jest tak proste, jak tworzenie pojedynczego wywołania interfejsu API lub wywołania metody zestawu SDK. Jednak ponieważ usługa Azure Cosmos DB jest dostępna za pośrednictwem wywołań sieciowych, istnieją konfiguracje połączeń, które można dostosować, aby osiągnąć szczytową wydajność podczas korzystania z zestawu Java SDK usługi Azure Cosmos DB w wersji 4.
Konfiguracja połączenia
Uwaga
W zestawie Java SDK usługi Azure Cosmos DB w wersji 4 tryb bezpośredni jest najlepszym wyborem, aby zwiększyć wydajność bazy danych przy użyciu większości obciążeń.
Aby dowiedzieć się więcej o różnych opcjach łączności, zobacz artykuł Tryby łączności.
Tryb połączenia bezpośredniego
Domyślny tryb połączenia zestawu JAVA SDK jest bezpośredni. Żądania trybu bezpośredniego usługi Azure Cosmos DB są wykonywane za pośrednictwem protokołu TCP podczas korzystania z zestawu Java SDK usługi Azure Cosmos DB w wersji 4. Tryb wewnętrznie bezpośredni używa specjalnej architektury do dynamicznego zarządzania zasobami sieciowymi i uzyskania najlepszej wydajności. Architektura po stronie klienta zastosowana w trybie bezpośrednim umożliwia przewidywalne wykorzystanie sieci i multipleksowany dostęp do replik usługi Azure Cosmos DB. Aby dowiedzieć się więcej na temat architektury, zobacz architektura połączenia w trybie bezpośrednim
Tryb połączenia można skonfigurować w konstruktorze klienta przy użyciu metody directMode(), jak pokazano poniżej. Aby skonfigurować tryb bezpośredni z ustawieniami domyślnymi, wywołaj directMode()
metodę bez argumentów. Aby dostosować ustawienia połączenia trybu bezpośredniego, przekaż polecenie DirectConnectionConfig do directMode()
interfejsu API.
Zestaw JAVA SDK w wersji 4 (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();
Dostosowywanie trybu bezpośredniego połączenia
Jeśli nie domyślne zachowanie trybu bezpośredniego jest pożądane, utwórz wystąpienie directConnectionConfig i dostosuj jego właściwości, a następnie przekaż dostosowane wystąpienie właściwości do metody directMode() w konstruktorze klienta usługi Azure Cosmos DB.
Te ustawienia konfiguracji kontrolują zachowanie podstawowej architektury trybu bezpośredniego omówionej powyżej.
W pierwszym kroku użyj poniższych zalecanych ustawień konfiguracji. Te opcje DirectConnectionConfig to zaawansowane ustawienia konfiguracji, które mogą mieć wpływ na wydajność zestawu SDK w nieoczekiwany sposób. Zalecamy użytkownikom unikanie ich modyfikowania, chyba że czują się bardzo komfortowo w zrozumieniu kompromisów i jest to absolutnie konieczne. Jeśli wystąpią problemy w tym konkretnym temacie, skontaktuj się z zespołem usługi Azure Cosmos DB.
Opcja konfiguracji | Wartość domyślna | Zalecane | Szczegóły |
---|---|---|---|
idleConnectionTimeout | "PT0" (ZERO) | "PT0" (ZERO) | Reprezentuje to czas trwania bezczynności połączenia dla pojedynczego połączenia z węzłem punktu końcowego/zaplecza (reprezentującym replikę). Domyślnie zestaw SDK nie zamyka automatycznie bezczynnych połączeń z węzłami zaplecza. |
idleEndpointTimeout | "PT1H" | "PT1H" | Reprezentuje to czas trwania limitu czasu bezczynności połączenia dla puli połączeń dla węzła punktu końcowego/zaplecza (reprezentującego replikę). Domyślnie, jeśli nie ma żądań przychodzących do określonego punktu końcowego/węzła zaplecza, zestaw SDK zamknie wszystkie połączenia w puli połączeń z tym węzłem punktu końcowego/zaplecza po 1 godzinie, aby zaoszczędzić zasoby sieciowe i koszty operacji we/wy. W przypadku rozrzedzonego lub sporadycznego wzorca ruchu zalecamy ustawienie tej wartości na wyższą liczbę, taką jak 6 godzin, 12 godzin lub nawet 24 godziny, aby zestaw SDK nie musiał często otwierać połączeń. Będzie to jednak korzystać z zasobów sieciowych i będzie mieć większą liczbę otwartych połączeń w danym momencie. Jeśli jest ustawiona wartość ZERO, sprawdzanie bezczynności punktu końcowego zostanie wyłączone. |
maxConnectionsPerEndpoint | "130" | "130" | Reprezentuje górny rozmiar puli połączeń dla węzła punktu końcowego/zaplecza (reprezentujący replikę). Zestaw SDK tworzy połączenia z węzłem punktu końcowego/zaplecza na żądanie i na podstawie przychodzących żądań współbieżnych. Domyślnie, jeśli jest to wymagane, zestaw SDK utworzy maksymalnie 130 połączeń z węzłem punktu końcowego/zaplecza. (UWAGA: zestaw SDK nie tworzy tych 130 połączeń z góry). |
maxRequestsPerConnection | "30" | "30" | Reprezentuje on górny rozmiar granicy maksymalnej liczby żądań, które można w kolejce w jednym połączeniu dla określonego punktu końcowego/węzła zaplecza (reprezentującego replikę). Zestaw SDK kolejkuje żądania do pojedynczego połączenia z węzłem punktu końcowego/zaplecza na żądanie i na podstawie przychodzących żądań współbieżnych. Domyślnie, jeśli jest to wymagane, zestaw SDK będzie kolejkować maksymalnie 30 żądań do pojedynczego połączenia dla określonego punktu końcowego/węzła zaplecza. (UWAGA: zestaw SDK nie kolejkuje tych 30 żądań do pojedynczego połączenia z góry). |
connectTimeout | "PT5S" | "~PT1S" | Reprezentuje to czas trwania limitu czasu połączenia dla pojedynczego połączenia , które ma zostać nawiązane z węzłem punktu końcowego/zaplecza. Domyślnie zestaw SDK będzie czekać maksymalnie 5 sekund na utworzenie połączenia przed zgłoszeniem błędu. Ustanowienie połączenia TCP używa uzgadniania wieloetapowego , co zwiększa opóźnienie czasu ustanowienia połączenia, dlatego zaleca się klientom ustawienie tej wartości zgodnie z ich przepustowością sieci i ustawieniami środowiska. UWAGA: To zalecenie ~PT1S dotyczy tylko aplikacji wdrożonych w kolokowanych regionach kont usługi Cosmos DB. |
networkRequestTimeout | "PT5S" | "PT5S" | Reprezentuje to czas trwania limitu czasu sieci dla pojedynczego żądania. Zestaw SDK będzie czekać maksymalnie przez ten czas trwania, aby użyć odpowiedzi usługi po zapisaniu żądania do połączenia sieciowego. Zestaw SDK zezwala tylko na wartości z zakresu od 1 sekundy (min) do 10 sekund (maksimum). Ustawienie zbyt dużej wartości może spowodować zmniejszenie liczby ponownych prób i zmniejszenie prawdopodobieństwa powodzenia przez ponawianie prób. |
Tryb połączenia bramy
Operacje płaszczyzny sterowania, takie jak baza danych i kontener CRUD , zawsze korzystają z trybu bramy. Nawet jeśli użytkownik skonfigurował tryb bezpośredni dla operacji płaszczyzny danych, płaszczyzna sterowania i operacje metadanych używają domyślnych ustawień trybu bramy. Odpowiada to większości użytkowników. Jednak użytkownicy, którzy chcą trybu bezpośredniego dla operacji płaszczyzny danych, a także dostrajania parametrów trybu bramy płaszczyzny sterowania, mogą użyć następującego zastąpienia trybu directMode():
Zestaw JAVA SDK w wersji 4 (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();
Dostosowywanie trybu połączenia bramy
Jeśli nie domyślne zachowanie trybu bramy jest pożądane, utwórz wystąpienie GatewayConnectionConfig i dostosuj jego właściwości, a następnie przekaż dostosowane wystąpienie właściwości do powyższej metody zastąpienia directMode() lub metody gatewayMode() w konstruktorze klienta usługi Azure Cosmos DB.
W pierwszym kroku użyj poniższych zalecanych ustawień konfiguracji. Te opcje GatewayConnectionConfig to zaawansowane ustawienia konfiguracji, które mogą mieć wpływ na wydajność zestawu SDK w nieoczekiwany sposób. Zalecamy użytkownikom unikanie ich modyfikowania, chyba że czują się bardzo komfortowo w zrozumieniu kompromisów i jest to absolutnie konieczne. Jeśli wystąpią problemy w tym konkretnym temacie, skontaktuj się z zespołem usługi Azure Cosmos DB.
Opcja konfiguracji | Wartość domyślna | Zalecane | Szczegóły |
---|---|---|---|
maxConnectionPoolSize | "1000" | "1000" | Reprezentuje to górny rozmiar puli połączeń dla bazowego klienta HTTP, który jest maksymalną liczbą połączeń tworzonych przez zestaw SDK dla żądań przechodzących do trybu bramy. Zestaw SDK ponownie używa tych połączeń podczas wysyłania żądań do bramy. |
idleConnectionTimeout | "PT60S" | "PT60S" | Reprezentuje to czas bezczynności limitu czasu połączenia dla pojedynczego połączenia z bramą. Po tym czasie połączenie zostanie automatycznie zamknięte i zostanie usunięte z puli połączeń. |
Następne kroki
Aby dowiedzieć się więcej na temat wskazówek dotyczących wydajności zestawu Java SDK, zobacz Porady dotyczące wydajności zestawu Java SDK usługi Azure Cosmos DB w wersji 4.
Aby dowiedzieć się więcej na temat projektowania aplikacji pod kątem skalowania i wysokiej wydajności, zobacz Partycjonowanie i skalowanie w usłudze Azure Cosmos DB.
Próbujesz zaplanować pojemność migracji do usługi Azure Cosmos DB? Informacje o istniejącym klastrze bazy danych można użyć do planowania pojemności.
- Jeśli wiesz, ile rdzeni wirtualnych i serwerów znajduje się w istniejącym klastrze bazy danych, przeczytaj o szacowaniu jednostek żądań przy użyciu rdzeni wirtualnych lub procesorów wirtualnych
- Jeśli znasz typowe stawki żądań dla bieżącego obciążenia bazy danych, przeczytaj o szacowaniu jednostek żądań przy użyciu planisty pojemności usługi Azure Cosmos DB