Zapobieganie błędom ograniczania szybkości dla usługi Azure Cosmos DB dla operacji apache Cassandra
DOTYCZY: Kasandra
Koszt wszystkich operacji bazy danych jest znormalizowany przez usługę Azure Cosmos DB i jest wyrażony przez jednostki żądań (RU). Jednostka żądania to waluta wydajności abstrakcyjna zasobów systemowych, takich jak procesor CPU, liczba operacji we/wy na sekundę i pamięć, które są wymagane do wykonywania operacji bazy danych obsługiwanych przez usługę Azure Cosmos DB.
Operacje usługi Azure Cosmos DB dla systemu Apache Cassandra mogą zakończyć się niepowodzeniem z powodu błędów ograniczania szybkości (przeciążonyexception/429), jeśli przekraczają limit przepływności tabeli (RU). Można to obsłużyć po stronie klienta, zgodnie z opisem w tym miejscu. Jeśli nie można zaimplementować zasad ponawiania prób klienta w celu obsługi awarii z powodu błędu ograniczania szybkości, możemy użyć funkcji ponawiania po stronie serwera (SSR), w której operacje przekraczające limit przepływności tabeli zostaną ponawiane automatycznie po krótkim opóźnieniu. Jest to ustawienie na poziomie konta i dotyczy wszystkich spacji klucza i tabel na koncie.
Korzystanie z witryny Azure Portal
Zaloguj się w witrynie Azure Portal.
Przejdź do swojego konta usługi Azure Cosmos DB dla bazy danych Apache Cassandra.
Przejdź do okienka Funkcje poniżej sekcji Ustawienia .
Wybierz pozycję Ponów próbę po stronie serwera.
Kliknij przycisk Włącz , aby włączyć tę funkcję dla wszystkich kolekcji na koncie.
Korzystanie z interfejsu wiersza polecenia platformy Azure
Sprawdź, czy usługa SSR jest już włączona dla Twojego konta:
az cosmosdb show --name accountname --resource-group resourcegroupname
Włącz funkcję SSR dla wszystkich tabel na koncie bazy danych. Zastosowanie tej zmiany może potrwać do 15 minut.
az cosmosdb update --name accountname --resource-group resourcegroupname --capabilities EnableCassandra DisableRateLimitingResponses
Następujące polecenie spowoduje wyłączenie ponawiania po stronie serwera dla wszystkich tabel na koncie bazy danych przez usunięcie
DisableRateLimitingResponses
z listy możliwości. Zastosowanie tej zmiany może potrwać do 15 minut.az cosmosdb update --name accountname --resource-group resourcegroupname --capabilities EnableCassandra
Często zadawane pytania
W jaki sposób żądania są ponawiane?
Żądania są stale ponawiane (w kóło) do momentu osiągnięcia 60-sekundowego limitu czasu. Jeśli limit czasu zostanie osiągnięty, klient otrzyma odpowiednio błąd przekroczenia limitu czasu odczytu lub zapisu
Kiedy usługa SSR jest najbardziej korzystna?
Ponawianie po stronie serwera (SSR) jest najbardziej korzystne w przypadku nagłego skoku przez krótki czas krótszy niż 1 minuta, gdzie można uniknąć błędów ograniczania przepustowości. Jeśli obciążenie pracy zwiększy się i pozostanie stale powyżej określonej jednostki RU, usługa SSR nie pomoże zbyt wiele. Sugestią jest odpowiednie zwiększenie jednostek RU.
Sugerowane ustawienia po stronie klienta?
Po włączeniu funkcji SSR aplikacja kliencka powinna zwiększyć limit czasu odczytu poza ustawieniem ponawiania próby 60 sekund na serwerze. Zalecamy, aby 90 sekund było po bezpieczniejszej stronie.
Przykładowy sterownik kodu3
SocketOptions socketOptions = new SocketOptions()
.setReadTimeoutMillis(90000);
Przykładowy sterownik kodu4
ProgrammaticDriverConfigLoaderBuilder configBuilder = DriverConfigLoader.programmaticBuilder()
.withDuration(DefaultDriverOption.REQUEST_TIMEOUT, Duration.ofSeconds(90));
Jak mogę monitorować skutki ponawiania po stronie serwera?
Możesz wyświetlić błędy ograniczania szybkości (429), które są ponawiane po stronie serwera w okienku Metryki usługi Azure Cosmos DB. Te błędy nie przechodzą do klienta, gdy usługa SSR jest włączona, ponieważ są one obsługiwane i ponawiane po stronie serwera.
W dziennikach zasobów usługi Azure Cosmos DB można wyszukać wpisy dziennika zawierające szacowane wartościDelayFromRateLimitingInMilliseconds.
Czy ponawianie po stronie serwera wpłynie na mój poziom spójności?
Ponawianie po stronie serwera nie ma wpływu na poziomy spójności. Żądania są ponawiane po stronie serwera, jeśli są one ograniczone (błąd 429).
Czy ponawianie po stronie serwera ma wpływ na jakikolwiek typ błędu, który może zostać wyświetlony przez mojego klienta?
Nie, ponawianie po stronie serwera wpływa tylko na błędy ograniczania szybkości (429), ponawiając próby po stronie serwera. Ta funkcja uniemożliwia obsługę błędów ograniczania szybkości w aplikacji klienckiej. Wszystkie inne błędy trafią do klienta.
Następne kroki
Aby dowiedzieć się więcej na temat rozwiązywania typowych błędów, zobacz ten artykuł:
Zobacz następujące artykuły, aby dowiedzieć się więcej na temat aprowizowania przepływności w usłudze Azure Cosmos DB: