Skalowanie za pomocą usługi Event Hubs
Istnieją dwa czynniki wpływające na skalowanie za pomocą usługi Event Hubs.
- Jednostki przepływności (warstwa Standardowa) lub jednostki przetwarzania (warstwa Premium)
- Partycje
Jednostki przepływności
Przepływność centrów zdarzeń jest kontrolowana przez jednostki przepływności. Jednostki przepływności to wstępniepurowane jednostki pojemności. Pojedyncza jednostka przepływności umożliwia:
- Ruch przychodzący: maksymalnie 1 MB na sekundę lub 1000 zdarzeń na sekundę (w zależności od tego, co nastąpi wcześniej).
- Ruch wychodzący: do 2 MB na sekundę lub 4096 zdarzeń na sekundę.
Poza pojemnością zakupionych jednostek przepływności ruch przychodzący jest ograniczany, a usługa Event Hubs zgłasza wyjątek ServerBusyException. Ruch wychodzący nie generuje wyjątków ograniczania przepustowości, ale jest nadal ograniczony do pojemności zakupionych jednostek przepływności. Jeśli wystąpią wyjątki szybkości publikowania lub oczekiwany będzie większy transfer danych wychodzących, należy sprawdzić liczbę jednostek przepływności zakupionych dla przestrzeni nazw. Jednostki przepływności można zarządzać na stronie Skalowanie przestrzeni nazw w witrynie Azure Portal. Jednostki przepływności można również zarządzać programowo przy użyciu interfejsów API usługi Event Hubs.
Jednostki przepływności są rozliczane wstępnie i rozliczane na godzinę. Po zakupieniu jednostki przepływności są rozliczane za co najmniej jedną godzinę. Dla przestrzeni nazw usługi Event Hubs można kupić do 40 jednostek przepływności. Jednostki te będą współużytkowane przez wszystkie centra zdarzeń w przestrzeni nazw.
Funkcja automatycznego rozszerzania usługi Event Hubs automatycznie skaluje się w górę przez zwiększenie liczby jednostek przepływności w celu spełnienia wymagań dotyczących użycia. Zwiększanie liczby jednostek przepływności zapobiega scenariuszom ograniczania przepustowości, w których:
- Współczynniki ruchu przychodzącego danych przekraczają ustawione jednostki przepływności.
- Współczynniki żądań wychodzących danych przekraczają ustawione jednostki przepływności.
Usługa Event Hubs zwiększa przepływność, gdy obciążenie zwiększa się poza minimalny próg, bez żadnych żądań zakończonych niepowodzeniem z błędami ServerBusy.
Aby uzyskać więcej informacji na temat funkcji autoinflate, zobacz Automatyczne skalowanie jednostek przepływności.
Jednostki przetwarzania
Usługa Event Hubs Premium zapewnia lepszą wydajność i lepszą izolację w zarządzanym wielodostępnym środowisku PaaS. Zasoby w warstwie Premium są izolowane na poziomie procesora CPU i pamięci, dzięki czemu każde obciążenie dzierżawy działa w izolacji. Ten kontener zasobów jest nazywany jednostką przetwarzania (PU). Możesz kupić 1, 2, 4, 6, 8, 10, 12 lub 16 jednostek przetwarzania dla każdej przestrzeni nazw usługi Event Hubs Premium.
Ile można pozyskiwać i przesyłać strumieniowo za pomocą jednostki przetwarzania, zależy od różnych czynników, takich jak producenci, konsumenci, szybkość pozyskiwania i przetwarzania oraz wiele innych.
Na przykład przestrzeń nazw usługi Event Hubs Premium z jednym pu i jednym centrum zdarzeń (100 partycji) może oferować około 5–10 MB/s ruchu przychodzącego oraz 10–20 MB/s dla obciążeń AMQP lub Kafka.
Aby dowiedzieć się więcej o konfigurowaniu jednostek PU dla przestrzeni nazw warstwy Premium, zobacz Konfigurowanie jednostek przetwarzania.
Uwaga
Aby dowiedzieć się więcej o limitach przydziału i limitach, zobacz Azure Event Hubs — limity przydziału i limity.
Partycje
Usługa Event Hubs organizuje sekwencje zdarzeń wysyłanych do centrum zdarzeń w co najmniej jednej partycji. Po nadejściu nowszych zdarzeń są one dodawane na końcu tej sekwencji.
Partycję można traktować jako dziennik zatwierdzeń. Partycje przechowują dane zdarzeń zawierające następujące informacje:
- Treść zdarzenia
- Torba właściwości zdefiniowana przez użytkownika opisująca zdarzenie
- Metadane, takie jak przesunięcie w partycji, jego liczba w sekwencji strumienia
- Sygnatura czasowa po stronie usługi, w której została zaakceptowana
Zalety korzystania z partycji
Usługa Event Hubs została zaprojektowana w celu ułatwienia przetwarzania dużych ilości zdarzeń, a partycjonowanie pomaga w tym na dwa sposoby:
- Mimo że usługa Event Hubs jest usługą PaaS, poniżej znajduje się rzeczywistość fizyczna. Utrzymywanie dziennika, który zachowuje kolejność zdarzeń, wymaga, aby te zdarzenia były przechowywane razem w magazynie bazowym i jego replikach, co powoduje pułap przepływności dla takiego dziennika. Partycjonowanie umożliwia użycie wielu dzienników równoległych dla tego samego centrum zdarzeń i w związku z tym pomnożenie dostępnej pojemności przepływności danych wejściowych (we/wy).
- Twoje aplikacje muszą być w stanie nadążyć za przetwarzaniem liczby zdarzeń wysyłanych do centrum zdarzeń. Może to być złożone i wymaga znacznej, skalowanej w poziomie pojemności przetwarzania równoległego. Pojemność pojedynczego procesu do obsługi zdarzeń jest ograniczona, więc potrzebujesz kilku procesów. Partycje są sposobem, w jaki rozwiązanie jest źródłem tych procesów, a jednocześnie zapewnia, że każde zdarzenie ma jasnego właściciela przetwarzania.
Liczba partycji
Liczba partycji jest określana w momencie tworzenia centrum zdarzeń. Musi zawierać się między jedną a maksymalną dozwoloną liczbą partycji dla każdej warstwy cenowej. Aby uzyskać limit liczby partycji dla każdej warstwy, zobacz ten artykuł.
Zalecamy wybranie co najmniej tylu partycji, zgodnie z oczekiwaniami, które są wymagane podczas szczytowego obciążenia aplikacji dla tego konkretnego centrum zdarzeń. W przypadku warstw innych niż warstwy premium i dedykowane nie można zmienić liczby partycji dla centrum zdarzeń po jego utworzeniu. W przypadku centrum zdarzeń w warstwie Premium lub dedykowanej można zwiększyć liczbę partycji po jego utworzeniu, ale nie można ich zmniejszyć. Rozkład strumieni między partycjami zmieni się po zakończeniu mapowania kluczy partycji na zmiany partycji, dlatego należy spróbować uniknąć takich zmian, jeśli względna kolejność zdarzeń ma znaczenie w aplikacji.
Ustawienie liczby partycji na maksymalną dozwoloną wartość jest kuszące, ale należy pamiętać, że strumienie zdarzeń muszą być ustrukturyzowane tak, aby rzeczywiście można było korzystać z wielu partycji. Jeśli potrzebujesz bezwzględnego zachowania porządku we wszystkich zdarzeniach lub tylko kilku podstreamach, możesz nie być w stanie skorzystać z wielu partycji. Ponadto wiele partycji sprawia, że strona przetwarzania jest bardziej złożona.
Nie ma znaczenia, ile partycji znajduje się w centrum zdarzeń, jeśli chodzi o ceny. Zależy to od liczby jednostek cenowych (jednostek przepływności (TU) dla warstwy Standardowa, jednostek przetwarzania (PU) dla warstwy Premium oraz jednostek pojemności (CU) dla dedykowanej warstwy) dla przestrzeni nazw lub dedykowanego klastra. Na przykład centrum zdarzeń warstwy Standardowa z 32 partycjami lub z jedną partycją wiąże się z tym samym kosztem, gdy przestrzeń nazw jest ustawiona na jedną pojemność tu. Ponadto można skalować jednostki RU lub jednostki PU w przestrzeni nazw lub jednostkach CU dedykowanego klastra niezależnie od liczby partycji.
Jako partycja to mechanizm organizacji danych, który umożliwia równoległe publikowanie i używanie danych. Zalecamy równoważenie jednostek skalowania (jednostek przepływności dla warstwy Standardowa, jednostek przetwarzania dla warstwy Premium lub jednostek pojemności dla warstwy dedykowanej) i partycji w celu uzyskania optymalnej skali. Ogólnie rzecz biorąc, zalecamy maksymalną przepływność wynoszącą 1 MB/s na partycję. W związku z tym regułą kciuka do obliczenia liczby partycji byłoby podzielenie maksymalnej oczekiwanej przepływności o 1 MB/s. Jeśli na przykład przypadek użycia wymaga 20 MB/s, zalecamy wybranie co najmniej 20 partycji w celu uzyskania optymalnej przepływności.
Jeśli jednak masz model, w którym aplikacja ma koligację z określoną partycją, zwiększenie liczby partycji nie jest korzystne. Aby uzyskać więcej informacji, zobacz dostępność i spójność.
Mapowanie zdarzeń na partycje
Klucz partycji służy do mapowania danych zdarzeń przychodzących na określone partycje na potrzeby organizowania danych. Klucz partycji to wartość podawana przez nadawcę przekazywana do centrum zdarzeń. Jest ona przetwarzana za pomocą statycznej funkcji tworzenia skrótów, która tworzy przypisanie partycji. Jeśli nie określisz klucza partycji podczas publikowania zdarzenia, używane jest przypisanie działania okrężnego.
Wydawca zdarzeń ma informacje tylko o kluczu partycji, a nie partycji, na której publikowane są zdarzenia. To oddzielenie klucza od partycji powoduje, że nadawca nie musi wiedzieć zbyt dużo o przetwarzaniu podrzędnym. Unikatowa tożsamość urządzenia lub użytkownika stanowi dobry klucz partycji, ale inne atrybuty, takie jak lokalizacja geograficzna, mogą również zostać użyte do grupowania powiązanych zdarzeń w jedną partycję.
Określenie klucza partycji umożliwia zachowanie powiązanych zdarzeń w tej samej partycji i w dokładnej kolejności, w jakiej dotarły. Klucz partycji jest ciągiem pochodzącym z kontekstu aplikacji i identyfikuje interrelationship zdarzeń. Sekwencja zdarzeń zidentyfikowanych przez klucz partycji jest strumieniem. Partycja jest multipleksowym magazynem dzienników dla wielu takich strumieni.
Uwaga
Chociaż zdarzenia można wysyłać bezpośrednio do partycji, nie zalecamy tego, zwłaszcza gdy wysoka dostępność jest dla Ciebie ważna. Obniża dostępność centrum zdarzeń na poziomie partycji. Aby uzyskać więcej informacji, zobacz Dostępność i spójność.
Następne kroki
Następujące linki pozwalają dowiedzieć się więcej na temat usługi Event Hubs: