Udostępnij za pośrednictwem


Operacje ograniczania przepustowości w usłudze Azure Service Bus

Rozwiązania natywne dla chmury zapewniają pojęcie nieograniczonych zasobów, które można skalować przy użyciu obciążenia. Chociaż to pojęcie jest bardziej prawdziwe w chmurze niż w systemach lokalnych, nadal istnieją ograniczenia, które istnieją w chmurze. Te ograniczenia mogą powodować ograniczanie żądań aplikacji klienckich w warstwach Standardowa i Premium, jak opisano w tym artykule.

Ograniczanie przepustowości w warstwie Standardowa

Warstwa Standardowa usługi Service Bus działa jako konfiguracja wielodostępna z modelem cen płatności zgodnie z rzeczywistym użyciem. W tym miejscu wiele przestrzeni nazw w tym samym klastrze współużytkuje przydzielone zasoby. Warstwa Standardowa jest zalecanym wyborem dla środowisk deweloperskich, środowisk QA i systemów produkcyjnych o niskiej przepływności.

W przeszłości usługa Service Bus miała grubsze limity ograniczania przepustowości ściśle zależne od wykorzystania zasobów. Istnieje jednak możliwość uściślinia logiki ograniczania i zapewnienia przewidywalnego zachowania ograniczania przepustowości dla wszystkich przestrzeni nazw, które współużytkują te zasoby.

W celu zapewnienia sprawiedliwego użycia i dystrybucji zasobów we wszystkich standardowych przestrzeniach nazw usługi Service Bus, które korzystają z tych samych zasobów, standard usługi Service Bus obecnie używa logiki ograniczania opartej na kredytach.

Uwaga

Należy pamiętać, że ograniczanie przepustowości nie jest nowością w usłudze Azure Service Bus ani w żadnej natywnej usłudze w chmurze.

Ograniczanie środków polega po prostu na uściśliniu sposobu, w jaki różne przestrzenie nazw współużytkowują zasoby w środowisku warstwy standardowej z wieloma dzierżawami, a tym samym umożliwiają sprawiedliwe użycie przez wszystkie przestrzenie nazw współużytkujące zasoby.

Co to jest ograniczanie oparte na kredytach?

Ograniczanie środków ogranicza liczbę operacji, które można wykonać w danej przestrzeni nazw w określonym przedziale czasu. Oto przepływ pracy ograniczania opartego na kredytach.

  • Na początku każdego okresu usługa Service Bus zapewnia pewne środki na każdą przestrzeń nazw.
  • Wszystkie operacje wykonywane przez aplikacje klienckie nadawcy lub odbiorcy są liczone względem tych środków (i odejmowane od dostępnych środków).
  • Jeśli środki zostaną wyczerpane, kolejne operacje zostaną ograniczone do początku następnego okresu.
  • Środki są uzupełniane na początku następnego okresu.

Jakie są limity środków?

Limity środków są obecnie ustawione na 1000 kredytów co sekundę (na przestrzeń nazw). Nie wszystkie operacje są tworzone tak samo. Poniżej przedstawiono koszty kredytowe każdego z operacji.

Operacja Koszt kredytu
Operacje na danych (Send, SendAsync, Receive, ReceiveAsync, Peek) 1 kredyt na wiadomość
Operacje zarządzania (Create, Read, DeleteUpdatew kolejkach, tematy, subskrypcje, filtry) 10 kredytów

Uwaga

Podczas wysyłania do tematu każdy komunikat jest oceniany względem filtrów przed udostępnieniem ich w ramach subskrypcji. Każda ocena filtru jest również liczone względem limitu środków (czyli 1 środki na ocenę filtru).

Jak mogę wiedzieć, że jestem ograniczony?

Gdy żądania aplikacji klienckiej są ograniczane, aplikacja kliencka odbiera następującą odpowiedź serwera.

The request was terminated because the entity is being throttled. Error code: 50009. Please wait 2 seconds and try again.

Jak uniknąć ograniczania przepustowości?

W przypadku zasobów udostępnionych ważne jest wymuszanie pewnego rodzaju sprawiedliwego użycia w różnych przestrzeniach nazw usługi Service Bus, które współużytkują te zasoby. Ograniczanie przepustowości gwarantuje, że każdy wzrost pojedynczego obciążenia nie spowoduje ograniczenia innych obciążeń na tych samych zasobach. Jak wspomniano w dalszej części artykułu, nie ma ryzyka ograniczania, ponieważ zestawy SDK (software development kit) klienta i inne oferty PaaS platformy Azure mają wbudowane domyślne zasady ponawiania prób. Wszelkie żądania ograniczone są ponawiane z wycofywaniem wykładniczym i ostatecznie przechodzą, gdy środki zostaną uzupełnione.

Co zrozumiałe, niektóre aplikacje mogą być wrażliwe na ograniczanie przepustowości. W takim przypadku zalecamy przeprowadzenie migracji bieżącej standardowej przestrzeni nazw usługi Service Bus do warstwy Premium. W przypadku migracji można przydzielić dedykowane zasoby do przestrzeni nazw usługi Service Bus i odpowiednio skalować zasoby w górę, jeśli występuje skok obciążenia i zmniejszyć prawdopodobieństwo ograniczenia przepustowości. Ponadto, gdy obciążenie zmniejsza się do normalnych poziomów, możesz skalować zasoby przydzielone do przestrzeni nazw w dół.

Ograniczanie przepustowości w warstwie Premium

Warstwa Premium usługi Service Bus przydziela dedykowane zasoby, w odniesieniu do jednostek obsługi komunikatów, do każdej konfiguracji przestrzeni nazw przez klienta. Te dedykowane zasoby zapewniają przewidywalną przepływność i opóźnienie oraz są zalecane w przypadku systemów wysokiej przepływności lub wrażliwej klasy produkcyjnej. Ponadto warstwa Premium umożliwia również klientom skalowanie w górę pojemności przepływności, gdy wystąpi wzrost obciążenia. Aby uzyskać więcej informacji, zobacz Automatyczne aktualizowanie jednostek obsługi komunikatów przestrzeni nazw usługi Azure Service Bus.

Jak działa ograniczanie przepustowości w usłudze Service Bus Premium?

W przypadku wyłącznej alokacji zasobów dla warstwy Premium ograniczanie jest oparte wyłącznie na ograniczeniach zasobów przydzielonych do przestrzeni nazw. Jeśli liczba żądań jest większa niż bieżące zasoby, żądania są ograniczane.

Jak mogę wiedzieć, że jestem ograniczony?

Istnieją różne sposoby identyfikowania ograniczania przepustowości w warstwie Premium usługi Service Bus.

  • Żądania ograniczone są wyświetlane w metrykach żądania usługi Azure Monitor, aby zidentyfikować liczbę żądań, które zostały ograniczone.
  • Wysokie użycie procesora CPU wskazuje, że bieżąca alokacja zasobów jest wysoka, a żądania mogą zostać ograniczone, jeśli bieżące obciążenie nie zmniejszy się.
  • Wysokie użycie pamięci wskazuje, że bieżąca alokacja zasobów jest wysoka, a żądania mogą zostać ograniczone, jeśli bieżące obciążenie nie zmniejszy się.

Jak uniknąć ograniczania przepustowości?

Ponieważ przestrzeń nazw usługi Service Bus w warstwie Premium ma już dedykowane zasoby, możesz zmniejszyć możliwość ograniczenia przepustowości, skalując w górę liczbę jednostek obsługi komunikatów przydzielonych do przestrzeni nazw w przypadku (lub przewidywanie) skoku obciążenia. Aby uzyskać więcej informacji, zobacz Automatyczne aktualizowanie jednostek obsługi komunikatów przestrzeni nazw usługi Azure Service Bus.

Często zadawane pytania

Jak ograniczanie ma wpływ na moją aplikację?

Gdy żądanie jest ograniczane, oznacza to, że usługa jest zajęta, ponieważ ma do czynienia z większą liczbie żądań niż dozwolone zasoby. Jeśli ta sama operacja zostanie podjęta ponownie po kilku chwilach, gdy usługa przepracuje bieżące obciążenie, żądanie może zostać uznane.

Ponieważ ograniczanie przepustowości jest oczekiwanym zachowaniem dowolnej usługi natywnej w chmurze, logika ponawiania prób jest wbudowana w sam zestaw SDK usługi Service Bus. Wartość domyślna jest ustawiona na automatyczne ponawianie z wykładniczym wycofywaniem, aby upewnić się, że nie mamy tego samego żądania ograniczanego za każdym razem. Domyślna logika ponawiania prób ma zastosowanie do każdej operacji.

Uwaga

Kod przetwarzania komunikatów, który wywołuje inne usługi innych firm, może być również ograniczany przez te inne usługi. Aby uzyskać więcej informacji na temat obsługi tych scenariuszy, zobacz dokumentację dotyczącą wzorca ograniczania przepustowości.

Czy ograniczanie przepustowości powoduje utratę danych?

Usługa Azure Service Bus jest zoptymalizowana pod kątem trwałości. Upewniamy się, że wszystkie dane wysyłane do usługi Service Bus są zatwierdzane w magazynie, zanim usługa potwierdzi powodzenie żądania.

Po pomyślnym potwierdzeniu żądania przez usługę Service Bus oznacza to, że usługa Service Bus pomyślnie przetworzyła żądanie. Jeśli usługa Service Bus zwróci błąd, oznacza to, że usługa Service Bus nie mogła przetworzyć żądania, a aplikacja kliencka musi ponowić próbę wykonania żądania.

Jednak gdy żądanie jest ograniczane, usługa oznacza, że nie może teraz zaakceptować i przetworzyć żądania z powodu ograniczeń zasobów. Nie oznacza to żadnej utraty danych, ponieważ usługa Service Bus po prostu nie spojrzała na żądanie. W takim przypadku poleganie na domyślnych zasadach ponawiania próby zestawu SDK usługi Service Bus gwarantuje, że żądanie zostanie ostatecznie przetworzone.

Aby uzyskać więcej informacji i przykłady korzystania z komunikatów usługi Service Bus, zobacz następujące tematy zaawansowane: