Hałaśliwy antywzorzec sąsiada

Azure

Systemy wielodostępne współdzielą zasoby między co najmniej dwiema dzierżawami. Ponieważ dzierżawcy korzystają z tych samych zasobów udostępnionych, aktywność jednej dzierżawy może mieć negatywny wpływ na użycie systemu przez inną dzierżawę.

Opis problemu

Podczas tworzenia usługi, która ma być współużytkowana przez wielu klientów lub dzierżawców, można ją skompilować tak, aby była wielodostępna. Zaletą systemów wielodostępnych jest to, że zasoby mogą być w puli i współużytkowane przez dzierżawców. Często skutkuje to niższymi kosztami i lepszą wydajnością. Jeśli jednak jedna dzierżawa korzysta z nieproporcjonalnej ilości zasobów dostępnych w systemie, ogólna wydajność systemu może mieć duże znaczenie. Problem z hałaśliwym sąsiadem występuje, gdy wydajność jednej dzierżawy jest obniżona z powodu działań innej dzierżawy.

Rozważmy przykładowy system wielodostępny z dwoma dzierżawami. Wzorce użycia dzierżawy A i wzorce użycia dzierżawy B pokrywają się. W godzinach szczytu dzierżawa A używa wszystkich zasobów systemu, co oznacza, że wszystkie żądania dzierżawy B kończą się niepowodzeniem. Innymi słowy łączne użycie zasobów jest wyższe niż pojemność systemu:

Rysunek przedstawiający użycie zasobów dwóch dzierżaw. Dzierżawa A korzysta z kompletnego zestawu zasobów systemowych, co oznacza, że dzierżawa B napotyka błędy.

Prawdopodobnie pierwsze żądanie dzierżawy będzie miało pierwszeństwo. Następnie druga dzierżawa będzie doświadczać hałaśliwego problemu sąsiada. Alternatywnie obie dzierżawy mogą znaleźć ich wydajność.

Problem z hałaśliwym sąsiadem występuje również wtedy, gdy każda pojedyncza dzierżawa zużywa stosunkowo małe ilości pojemności systemu, ale zbiorowe użycie zasobów wielu dzierżaw powoduje wzrost ogólnego użycia:

Rysunek z 3 dzierżawami, z których każda zużywa mniej maksymalnej przepływności rozwiązania. W sumie trzy dzierżawy zużywają kompletne zasoby systemowe.

Taka sytuacja może wystąpić, gdy masz wiele dzierżaw, które mają podobne wzorce użycia lub nie aprowizowaliśmy wystarczającej pojemności dla zbiorczego obciążenia systemu.

Jak rozwiązać ten problem

Hałaśliwe problemy sąsiadów są nieodłącznym ryzykiem, gdy współużytkujesz jeden zasób i nie można całkowicie wyeliminować możliwości wpływu na hałaśliwego sąsiada. Istnieją jednak pewne kroki, które mogą podjąć zarówno klienci, jak i dostawcy usług, aby zmniejszyć prawdopodobieństwo hałaśliwych problemów sąsiadów lub ograniczyć ich skutki, gdy są obserwowane.

Akcje, które mogą wykonywać klienci

Akcje, które mogą wykonywać dostawcy usług

  • Monitoruj użycie zasobów dla systemu. Monitoruj zarówno ogólne użycie zasobów, jak i zasoby używane przez każdą dzierżawę. Skonfiguruj alerty w celu wykrywania skoków użycia zasobów, a jeśli to możliwe, skonfiguruj automatyzację, aby automatycznie ograniczyć znane problemy przez skalowanie w górę lub w poziomie.
  • Stosowanie ładu zasobów. Rozważ zastosowanie zasad, które pozwalają uniknąć przeciążenia systemu przez pojedynczą dzierżawę i zmniejszenie pojemności dostępnej dla innych osób. Ten krok może mieć formę wymuszania limitu przydziału za pomocą wzorca ograniczania przepustowości lub wzorca ograniczania szybkości.
  • Aprowizuj więcej infrastruktury. Ten proces może obejmować skalowanie w górę przez uaktualnienie niektórych składników rozwiązania lub może obejmować skalowanie w górę przez aprowizowanie dodatkowych fragmentów, w przypadku przestrzegania wzorca fragmentowania lub sygnatur, jeśli zostanie wyświetlony wzorzec sygnatur wdrażania.
  • Umożliwia dzierżawcom zakup wstępnie aprowizowanej lub zarezerwowanej pojemności. Ta pojemność zapewnia dzierżawcom większą pewność, że rozwiązanie odpowiednio obsługuje swoje obciążenie.
  • Wygładź użycie zasobów dzierżawców. Możesz na przykład wypróbować jedną z następujących metod:
    • Jeśli hostujesz wiele wystąpień rozwiązania, rozważ ponowne równoważenie dzierżaw między wystąpieniami lub sygnaturami. Rozważ na przykład umieszczenie dzierżaw z przewidywalnymi i podobnymi wzorcami użycia w wielu sygnaturach, aby spłaścić szczyty ich użycia.
    • Zastanów się, czy masz procesy w tle, czy obciążenia intensywnie korzystające z zasobów, które nie są wrażliwe na czas. Uruchom te obciążenia asynchronicznie poza godzinami szczytu, aby zachować szczytową pojemność zasobów dla obciążeń wrażliwych na czas.
  • Sprawdź, czy usługi podrzędne zapewniają mechanizmy kontroli, aby rozwiązać problemy z hałaśliwymi sąsiadami. Na przykład w przypadku korzystania z platformy Kubernetes rozważ użycie limitów zasobników, a w przypadku korzystania z usługi Service Fabric rozważ użycie wbudowanych funkcji zapewniania ładu.
  • Ogranicz operacje, które mogą wykonywać dzierżawcy. Na przykład ogranicz dzierżawcom wykonywanie operacji, które będą uruchamiać bardzo duże zapytania bazy danych, na przykład przez określenie maksymalnej liczby zwracanych rekordów lub limitu czasu zapytań. Ta akcja ogranicza ryzyko podejmowania działań przez dzierżawców, które mogą negatywnie wpłynąć na inne dzierżawy.
  • Zapewnianie systemu jakości usług (QoS). W przypadku stosowania funkcji QoS priorytety niektórych procesów lub obciążeń należy określić przed innymi. Uwzględniając funkcje QoS w projekcie i architekturze, możesz mieć pewność, że operacje o wysokim priorytcie mają pierwszeństwo, gdy występuje presja na zasoby.

Kwestie wymagające rozważenia

W większości przypadków poszczególne dzierżawy nie zamierzają powodować problemów z hałaśliwymi sąsiadami. Poszczególne dzierżawy mogą nawet nie być świadomi, że ich obciążenia powodują hałaśliwe problemy z sąsiadami dla innych. Istnieje jednak również możliwość, że niektórzy dzierżawcy mogą wykorzystywać luki w zabezpieczeniach w udostępnionych składnikach w celu ataku na usługę pojedynczo lub przez wykonanie rozproszonego ataku typu "odmowa usługi" (DDoS).

Niezależnie od przyczyny ważne jest, aby traktować te problemy jako problemy z zarządzaniem zasobami oraz stosować limity przydziału użycia, ograniczanie przepustowości i mechanizmy kontroli ładu, aby rozwiązać ten problem.

Uwaga

Upewnij się, że informujesz klientów o wszelkich ograniczeniach, które mają zastosowanie, lub o wszelkich limitach przydziału użycia w usłudze. Ważne jest, aby niezawodnie obsługiwały żądania, które zakończyły się niepowodzeniem, i że nie są one zaskoczeni żadnymi ograniczeniami ani limitami przydziału, które stosujesz.

Jak wykryć problem

Z perspektywy klienta problem z hałaśliwym sąsiadem zwykle manifestuje się jako żądania zakończone niepowodzeniem do usługi lub żądania, które wymagają długiego czasu. W szczególności, jeśli to samo żądanie powiedzie się w innym czasie i wydaje się kończyć się losowym niepowodzeniem, może wystąpić problem z hałaśliwym sąsiadem. Aplikacje klienckie powinny rejestrować dane telemetryczne w celu śledzenia współczynnika powodzenia i wydajności żądań do usług, a aplikacje powinny również rejestrować podstawowe metryki wydajności na potrzeby porównania.

Z perspektywy usługi problem z hałaśliwym sąsiadem może pojawić się na kilka sposobów:

  • Skoki użycia zasobów. Ważne jest, aby jasno zrozumieć normalne użycie zasobów punktu odniesienia oraz skonfigurować monitorowanie i alerty w celu wykrywania skoków użycia zasobów. Upewnij się, że uwzględnisz wszystkie zasoby, które mogą mieć wpływ na wydajność lub dostępność usługi. Te zasoby obejmują metryki, takie jak użycie procesora CPU serwera i pamięci, we/wy dysku, użycie bazy danych, ruch sieciowy i metryki, które są udostępniane przez usługi zarządzane, takie jak liczba żądań oraz syntetyczne i abstrakcyjne metryki wydajności, takie jak jednostki żądań usługi Azure Cosmos DB.
  • Błędy podczas wykonywania operacji dla dzierżawy. W szczególności poszukaj błędów, które występują, gdy dzierżawa nie korzysta z dużej części zasobów systemu. Taki wzorzec może wskazywać, że dzierżawa jest ofiarą hałaśliwego problemu sąsiada. Rozważ śledzenie zużycia zasobów według dzierżawy. Na przykład w przypadku korzystania z usługi Azure Cosmos DB rozważ rejestrowanie jednostek żądań używanych dla każdego żądania i dodanie identyfikatora dzierżawy jako wymiaru do telemetrii, dzięki czemu można agregować użycie jednostek żądania dla każdej dzierżawy.

Współautorzy

Ten artykuł jest obsługiwany przez firmę Microsoft. Pierwotnie został napisany przez następujących współautorów.

Główny autor:

Inni współautorzy:

Aby wyświetlić niepubalne profile serwisu LinkedIn, zaloguj się do serwisu LinkedIn.