Wydajność obciążenia IoT
Rozwiązania IoT obejmują składniki urządzeń, urządzeń brzegowych i chmury oraz wiele od milionów małych urządzeń połączonych z chmurą po rozwiązania przemysłowe, w których kilka zaawansowanych serwerów to bramy do łączności w chmurze. Liczba urządzeń, ich fizyczne i geograficzne rozmieszczenie oraz liczba wysyłanych lub odbieranych komunikatów to niektóre czynniki, które mogą definiować wydajność obciążenia IoT.
Wydajność obejmuje również możliwość wydajnego skalowania obciążenia IoT w celu spełnienia wymagań. Zaletą chmury jest dostępność geograficzna i możliwość skalowania usług na żądanie z niewielkim przestojem aplikacji lub bez przestoju aplikacji.
Wydajność reprezentuje wydajność w stosunku do użycia zasobów w określonych warunkach. Wydajność mierzy, jak dobrze produkt lub system, podczas wykonywania jego funkcji, spełnia wymagania:
Zachowanie czasu, takie jak czasy odpowiedzi, czasy przetwarzania i współczynniki przepływności.
Wykorzystanie zasobów lub ilości i typy używanych zasobów.
Pojemność lub maksymalne limity.
Ocena wydajności obciążenia IoT
Aby ocenić obciążenie IoT za pomocą obiektywów filaru wydajności platformy Well-Architected Framework, ukończ pytania dotyczące wydajności obciążeń IoT w przeglądzie usługi Azure Well-Architected. Po zidentyfikowaniu przez ocenę kluczowych zaleceń dotyczących wydajności dla rozwiązania IoT skorzystaj z poniższej zawartości, aby ułatwić wdrożenie zaleceń.
Zasady projektowania
Pięć filarów doskonałości architektury stanowi podstawę metodologii projektowania obciążeń IoT. Te filary służą jako kompas dla kolejnych decyzji projektowych w kluczowych obszarach projektowania IoT. Poniższe zasady projektowania rozszerzają filar jakości platformy Azure Well-Architected Framework — Wydajność wydajności.
Zasada projektowania | Zagadnienia do rozważenia |
---|---|
Projektowanie pod kątem skalowania w poziomie | Rozwiązanie IoT może zaczynać się od kilkuset urządzeń lub komunikatów i zwiększać się do milionów urządzeń i komunikatów na minutę. Usługi w chmurze można łatwo skalować w celu zwiększenia obciążenia, ale sytuacja może być bardziej złożona w przypadku urządzeń i bram IoT. Urządzenia IoT można zaprojektować lub wdrożyć, zanim rozwiązanie zostanie sfinalizowane. Przemysłowe IoT lub podobne branże mogą mierzyć żywotność urządzeń w dziesięcioleciach. Aktualizowanie pojemności przez zastąpienie urządzeń jest kosztowne. W tych scenariuszach szczególnie ważne jest zaplanowanie z wyprzedzeniem. |
Shift-left w przypadku testowania wydajnościowego | Przetestuj wcześnie i przetestuj często, aby wcześnie przechwycić problemy. Należy pamiętać o złożoności czujników, urządzeń i bram w różnych lokalizacjach geograficznych o różnych cechach, szybkości i niezawodności komunikacji. Zaplanuj tę złożoność testowania i upewnij się, że chcesz przetestować scenariusze awarii, takie jak rozłączenie sieci. Przetestuj obciążenia i obciążenia wszystkich składników urządzeń, urządzeń brzegowych i chmury w rozwiązaniu IoT. |
Ciągłe monitorowanie wydajności w środowisku produkcyjnym | Aby monitorować różne typy urządzeń w wielu regionach geograficznych, użyj rozwiązania do monitorowania rozproszonego. Zrównoważ ilość informacji monitorowanych i wysyłanych do chmury pod kątem kosztów pamięci i wydajności. Dostrajanie transmisji dla scenariuszy diagnostycznych i monitorowanie na wielu poziomach i warstwach. Uwidaczniaj metryki bramy dla rozwiązań przemysłowych lub z obsługą bramy. |
Warstwy architektury IoT
Zasady projektowania wydajności pomagają wyjaśnić zagadnienia, aby zapewnić, że obciążenie IoT spełnia wymagania w podstawowych warstwach architektury IoT. W poniższych sekcjach przedstawiono specyfikę warstwy dla filaru wydajności.
Warstwa urządzenia i bramy
Urządzenie IoT to urządzenie obliczeniowe, które łączy się z rozwiązaniem IoT i może zbierać, przesyłać lub odbierać dane. Bramy to punkty połączenia między urządzeniami a chmurą lub między IoT i innymi składnikami.
Optymalizowanie możliwości sprzętowych
Uaktualnianie lub wymiana sprzętu jest kosztowne i czasochłonne. Rozmiar urządzeń IoT dla wymaganej pojemności i funkcjonalności z wyprzedzeniem.
Aby zoptymalizować możliwości sprzętowe:
Uruchamianie zadań intensywnie korzystających z obliczeń i danych wejściowych na określonym sprzęcie. Na przykład uruchom algorytmy uczenia maszynowego (ML) na lokalnych jednostkach przetwarzania grafiki (GPU).
Zoptymalizuj istniejące możliwości sprzętowe przy użyciu wydajnych języków i struktur, takich jak Embedded C i Rust Embedded. Zestaw SDK języka C usługi Azure IoT Embedded można używać podczas opracowywania dla ograniczonych urządzeń lub gdy większość stosu zabezpieczeń i komunikacji jest już dostępna na urządzeniu.
Użyj zestawu SDK urządzenia Usługi Azure IoT dla języka C, aby uzyskać wszystkie informacje potrzebne do nawiązania połączenia z bramą w chmurze. Zestawy SDK (Software Development Kit) usługi Azure IoT Device zarządzają wymaganymi mechanizmami tłumaczenia komunikatów, obsługi błędów i ponawiania prób potrzebnymi na potrzeby odpornego połączenia.
Skalowanie jest ważne dla warstwy urządzenia i bramy. Aby skalować tę warstwę:
Użyj bram jako jednostek skalowania. Jeśli rozwiązanie dodaje urządzenia lub zasoby IoT (na przykład serwery OPC UA ) w czasie, użyj większej liczby bram brzegowych do pozyskiwania danych z tych serwerów.
Przeprowadź ocenę skalowania dla wszystkich warstw nadrzędnych, w tym bram w chmurze i usług w chmurze. Aby dowiedzieć się więcej na temat używania wielu centrów IoT jako jednostek skalowania dla rozwiązania IoT, zobacz Jak aprowizować urządzenia w centrach IoT.
Uruchamianie obciążeń na urządzeniach brzegowych
W zależności od ograniczeń systemowych, takich jak przepływność sieci lub opóźnienie, rozważ uruchomienie niektórych obciążeń na brzegu sieci. Rozdziel obciążenia według ograniczeń czasu oraz wymaganych opóźnień i czasów odpowiedzi. Użyj lokalnych obliczeń w przypadku scenariuszy o małych opóźnieniach i sporadycznie połączonych scenariuszach. Uruchamianie obciążeń na dużą skalę w chmurze.
Na krawędzi użyj kolejek priorytetów, aby wysyłać różne strumienie danych w wymaganej kolejności. W przypadku kolejek priorytetowych komunikaty są wysyłane w kolejności priorytetu, ale Azure IoT Hub nadal przechowuje komunikaty na podstawie kolejności paragonu.
Optymalizowanie łączności urządzeń
Rozważ następujące kwestie, aby zoptymalizować łączność urządzeń:
Użyj usług IoT Hub, które mają najmniejsze opóźnienie dla urządzeń. Usługi IoT Hub mogą być potrzebne w wielu regionach, gdy urządzenia muszą łączyć się z różnymi lokalizacjami geograficznymi.
Użyj otwartego połączenia stanowego na potrzeby dwukierunkowej komunikacji między urządzeniami a rozwiązaniem IoT, aby zminimalizować obciążenie związane z konfigurowaniem połączeń.
Nie należy łączyć wszystkich urządzeń jednocześnie, na przykład po regionalnej awarii zasilania. Podczas ponawiania próby należy użyć obcinanego wycofywania wykładniczego z wprowadzonym zakłóceniami.
Optymalizowanie scenariuszy offline
Możesz zapewnić urządzeniom wystarczającą ilość informacji i kontekstu, aby działały bez połączenia w chmurze i przechowywać dane lokalnie, dzięki czemu mogą odzyskiwać dane po rozłączeniu i ponownym uruchomieniu. Następujące strategie obsługują operacje offline:
Upewnij się, że urządzenie może przechowywać dane lokalnie, gdy urządzenie nie jest połączone, w tym dzienniki i buforowane dane telemetryczne zgodnie z priorytetem.
Ustaw czas wygaśnięcia (TTL) danych, aby wygasłe dane zostały automatycznie usunięte.
Odrzuć mniej ważne dane, gdy urządzenie nie jest połączone, aby skrócić wymagany magazyn lokalny i skrócić czas synchronizacji podczas ponownego nawiązywania połączenia z urządzeniem.
Jeśli magazyn urządzeń brzegowych osiągnie pojemność, użyj strategii eksmisji pamięci podręcznej, takiej jak pierwszy na ostatnim out (FIFO), last-in first-out (LIFO) lub oparte na priorytetach.
Rozważ użycie oddzielnego dysku lub kontrolera dysku do przechowywania danych, aby środowisko uruchomieniowe lub aplikacja urządzenia mogły nadal działać, gdy jest mało miejsca w magazynie.
Użyj bliźniaczych reprezentacji urządzeń i bliźniaczych reprezentacji modułów , aby asynchronicznie synchronizować informacje o stanie między urządzeniami a chmurą, nawet jeśli urządzenia nie są obecnie połączone z bramą w chmurze. Bliźniacze reprezentacje urządzeń i modułów zawierają tylko bieżący stan w danym momencie, a nie informacje o historii ani usuniętych informacjach.
Warstwa pozyskiwania i komunikacji
Warstwa pozyskiwania i komunikacji danych wysyła dane z urządzeń do rozwiązania IoT. Wzorce komunikacji między urządzeniami i rozwiązaniem IoT obejmują:
- Komunikaty urządzenie-chmura.
- Komunikaty z chmury do urządzenia.
- Przekazywanie plików.
- Bliźniacze reprezentacje urządzeń.
- Metody bezpośrednie.
Optymalizowanie wydajności obsługi komunikatów
Liczba i rozmiar komunikatów urządzenia do chmury jest ważnym parametrem wydajności rozwiązania IoT. Usługi Azure IoT, takie jak IoT Hub i Azure IoT Central, definiują limity komunikatów na warstwę, co wpływa zarówno na wydajność rozwiązania, jak i koszt.
Rozważ następujące zalecenia dotyczące obsługi komunikatów:
IoT Hub i IoT Central obliczają liczbę dziennych komunikatów o limitach przydziału na podstawie rozmiaru komunikatu o rozmiarze 4 KB. Wysyłanie mniejszych komunikatów pozostawia część nieużywanej pojemności. Ogólnie rzecz biorąc, użyj rozmiarów komunikatów w pobliżu granicy 4 KB. Grupuj mniejsze komunikaty z urządzenia do chmury w większe komunikaty, aby zmniejszyć łączną liczbę komunikatów, ale weź pod uwagę wprowadzone opóźnienie podczas łączenia komunikatów.
Unikaj komunikacji z rozmową. W przypadku komunikacji brzegowej między urządzeniami lub modułami nie projektuj interakcji, które wysyłają wiele małych komunikatów.
Użyj wbudowanego przetwarzania wsadowego komunikatów zestawu AZURE IoT Edge SDK dla protokołu Advanced Message Queuing Protocol (AMQP), aby wysyłać wiele komunikatów telemetrycznych do chmury.
Używanie przetwarzania wsadowego na poziomie aplikacji przez połączenie wielu mniejszych komunikatów na urządzeniu podrzędnym i wysyłanie większych komunikatów do bramy brzegowej. W ten sposób przetwarzanie wsadowe ogranicza obciążenie komunikatów i zmniejsza liczbę zapisów do lokalnego magazynu dysków brzegowych.
Użyj multipleksowania połączeń PROTOKOŁU AMQP, aby zmniejszyć zależność od limitów połączeń protokołu TRANSMISSION Control Protocol (TCP) na klienta zestawu SDK. W przypadku multipleksowania połączeń protokołu AMQP wiele urządzeń może używać jednego połączenia TCP do IoT Hub.
Użyj metod bezpośrednich w przypadku interakcji typu żądanie-odpowiedź, które mogą zakończyć się powodzeniem lub niepowodzeniem natychmiast po upłynął limit czasu określony przez użytkownika. Takie podejście jest przydatne w scenariuszach, w których przebieg akcji różni się w zależności od tego, czy urządzenie odpowiedziało.
Użyj bliźniaczych reprezentacji urządzeń na potrzeby informacji o stanie urządzenia, w tym metadanych i konfiguracji. IoT Hub utrzymuje bliźniaczą reprezentację urządzenia dla każdego połączonego urządzenia.
Omówienie limitów przydziałów obsługi komunikatów i ograniczania przepustowości
Warstwa IoT Hub ustawia limity bramy w chmurze na jednostkę. Limit przydziału obsługi komunikatów definiuje trwałą przepływność i stałe stawki wysyłania dla warstwy. IoT Hub mogą obsługiwać obciążenia powyżej tych limitów przydziału przez krótki czas w celu odpornego obsłużenia serii lub przewyższeń obciążenia.
Innym ważnym limitem jest godzinowe lub dzienne obciążenie usługi lub ograniczenie przepustowości . Limity ograniczania chronią centrum IoT przed zbyt dużym obciążeniem przez zbyt długi czas.
Na poniższych diagramach przedstawiono relację między limitami obciążenia, przydziału i ograniczania przepustowości. Na lewym diagramie przedstawiono, że IoT Hub może obsługiwać trwałe lub stałe wysokie obciążenie do poziomu limitu przydziału dla warstwy IoT Hub. Na prawym diagramie pokazano, że IoT Hub może obsłużyć obciążenie zmieniające się wraz z upływem czasu, o ile nie osiągnie limitu ograniczenia przepustowości i średnio nie przekracza limitu przydziału dla warstwy IoT Hub.
Optymalizowanie przetwarzania komunikatów
Komunikaty z urządzenia lub bramy mogą wymagać tłumaczenia, przetwarzania lub wzbogacania o więcej informacji przed magazynem. Ten krok może być czasochłonny, dlatego ważne jest, aby ocenić wpływ na wydajność. Niektóre zalecenia powodują konflikt, na przykład użycie kompresji do optymalizacji transferu danych w porównaniu z unikaniem przetwarzania w chmurze podczas odszyfrowywania komunikatów. Te zalecenia muszą być zrównoważone i oceniane pod kątem innych filarów architektury i wymagań dotyczących rozwiązań.
Aby zoptymalizować wydajność przetwarzania danych w chmurze:
Zoptymalizuj format danych używany do wysyłania danych do chmury. Porównaj wydajność (i koszt) przepustowości i poprawę wydajności przy mniejszym wymaganym przetwarzaniu danych w chmurze. Rozważ użycie IoT Hub wzbogacania komunikatów w celu dodania kontekstu do komunikatów urządzenia.
Wykonaj przetwarzanie zdarzeń o krytycznym czasie na pozyskanych danych w miarę ich nadejścia, zamiast przechowywać nieprzetworzone dane i wymagać złożonych zapytań w celu uzyskania danych. W przypadku przetwarzania zdarzeń o krytycznym czasie należy wziąć pod uwagę wpływ opóźnionego przybycia i obsługi okien. Oceń w zależności od przypadku użycia, na przykład obsługi alarmów krytycznych i wzbogacania komunikatów.
Wybierz odpowiednią warstwę IoT Hub, Podstawowa lub Standardowa, na podstawie wymagań dotyczących rozwiązania. Należy pamiętać o funkcjach, których warstwa Podstawowa nie obsługuje.
Wybierz odpowiedni rozmiar warstwy IoT Hub, 1, 2 lub 3 oraz liczbę wystąpień na podstawie przepływności danych, przydziałów i ograniczania operacji. W przypadku usługi IoT Central wybierz odpowiednią warstwę: Standardowa 0, Standardowa 1 lub Standardowa 2 na podstawie liczby komunikatów wysyłanych z urządzeń do chmury.
Rozważ użycie Azure Event Grid do routingu zdarzeń publikowania-subskrypcji. Aby uzyskać więcej informacji, zobacz React do IoT Hub zdarzeń przy użyciu usługi Event Grid w celu wyzwalania akcji oraz Porównanie routingu komunikatów i usługi Event Grid dla IoT Hub.
Określanie priorytetów danych
Niektóre dane wysyłane przez urządzenia do chmury mogą być ważniejsze niż inne dane. Klasyfikowanie i obsługa danych na podstawie priorytetu jest dobrą praktyką w zakresie wydajności.
Na przykład czujnik termostatu wysyła temperaturę, wilgotność i inne dane telemetryczne, ale także wysyła alarm, gdy temperatura znajduje się poza zdefiniowanym zakresem. System klasyfikuje komunikat alarmu jako wyższy priorytet i obsługuje go inaczej niż dane telemetryczne temperatury.
Rozważ następujące zalecenia dotyczące klasyfikacji i obsługi danych:
Użyj kolejek IoT Edge priorytetu, aby upewnić się, że ważne dane są priorytetowe podczas wysyłania do IoT Hub. IoT Edge buforuje komunikaty, gdy nie ma łączności, ale po przywróceniu połączenia program wysyła wszystkie buforowane komunikaty w kolejności priorytetowej, a następnie nowe komunikaty.
Użyj IoT Hub routingu komunikatów, aby oddzielić trasy dla różnych priorytetów danych w zależności od przypadku użycia. IoT Hub routing komunikatów dodaje pewne opóźnienie.
Zapisywanie i wysyłanie danych o niskim priorytcie w dłuższych odstępach czasu lub przy użyciu przekazywania wsadowego lub plików. Wykrywanie złośliwego oprogramowania w przekazanych plikach zwiększa opóźnienie.
Rozdziel komunikaty na podstawie ograniczeń czasowych. Na przykład wysyłaj komunikaty do IoT Hub bezpośrednio po ograniczeniu czasu i korzystaj z przekazywania plików za pośrednictwem IoT Hub lub transferu danych wsadowych, takich jak Azure Data Factory, jeśli nie ma ograniczenia czasu. Do przekazywania plików można użyć modułu IoT Edge blob.
Warstwa zarządzania urządzeniami i modelowania
Różne typy urządzeń mogą łączyć się z rozwiązaniem IoT, a rozwiązanie IoT może jednocześnie łączyć się z wieloma urządzeniami i bramami. Oprócz łączenia i konfigurowania urządzeń i bram rozwiązanie IoT musi rozumieć dane przechwytywane i pozyskiwane przez urządzenia i bramy oraz muszą przesyłać i kontekstować te dane.
Składniki IoT mogą używać różnych protokołów, łączności, częstotliwości pozyskiwania danych i wzorców komunikacji. Rozwiązanie IoT musi mieć możliwość zarządzania urządzeniami i bramami, które są połączone i jak są skonfigurowane.
Aby zarządzać urządzeniami i konfiguracjami pod kątem wydajności:
Optymalizowanie rozmiaru na podstawie urządzenia i ładowania komunikatów.
Znajomość liczby komunikatów, które może obsłużyć brama chmury, w zależności od warstwy i liczby jednostek.
Uwzględnianie anomalii w trwałej przepływności spowodowanej rozkładem danych, sezonowością i wzrostem wydajności.
Używanie wielu bram w chmurze, gdy rozwiązanie IoT musi zarządzać milionami urządzeń. Przypisywanie urządzeń do centrów IoT za pomocą usługi DPS.
Aprowizuj urządzenia za pomocą usługi DPS
Użyj usługi DPS, aby skonfigurować połączenie z centrum IoT podczas aprowizacji, gdy połączenie IoT Hub nie jest już dostępne lub podczas ponownego uruchamiania urządzenia.
Użyj zasad równomiernie ważonych dystrybucji usługi DPS, aby dostosować wagę aprowizacji na podstawie przypadku użycia. Aby uzyskać więcej informacji, zobacz How the allocation policy assigns devices to IoT Hubs (Jak zasady alokacji przypisuje urządzenia do usługi IoT Hubs).
Rozważ aprowizowanie urządzeń w rozwiązaniu IoT w okresie, rozproszonych lub w mniejszych partiach, aby zrównoważyć obciążenie i przydział usługi DPS. Podczas dołączania do partii zaplanuj partie i ogólną oś czasu migracji. Uwzględnij limity usługi DPS w zakresie liczby operacji, rejestracji urządzeń i maksymalnej liczby połączeń na minutę, w tym opóźnienia i ponownych prób.
Użyj usługi DPS, aby przydzielić urządzenia do usługi IoT Hubs w różnych regionach na podstawie opóźnienia.
Użyj strategii buforowania dla parametry połączenia usługi DPS, aby zmniejszyć liczbę operacji ponownego nawiązywania połączenia z usługą DPS.
Zarządzanie urządzeniami podrzędnym
Rozwiązanie IoT jest skalowalne w poziomie, jeśli ma wiele bram lub urządzeń brzegowych na lokację lub lokalizację i urządzenia podrzędne, które mogą łączyć się z dowolną z tych bram lub urządzeń brzegowych.
Użyj wielu bram i urządzeń brzegowych w trybie tłumaczenia , gdy liczba urządzeń podrzędnych, ich komunikaty i rozmiary komunikatów zmienią się w czasie, a ich protokół lub komunikat muszą zostać przetłumaczone. Bramy i urządzenia brzegowe w trybie tłumaczenia mogą tłumaczyć protokoły lub komunikaty z urządzeń podrzędnych i z urządzeń podrzędnych, jednak do znalezienia bramy jest podłączone urządzenie podrzędne. W przypadku korzystania z trybu tłumaczenia i buforowania komunikatów na urządzeniu bramy lub urządzenia brzegowego należy uwzględnić dodatkowe tłumaczenie komunikatów.
Użyj wielu bram i urządzeń brzegowych w trybie przezroczystym , aby połączyć podrzędny transport telemetryczny kolejki komunikatów (MQTT) lub urządzenia AMQP, gdy ich liczba może ulec zmianie w czasie na lokację lub lokalizację. Bramy i urządzenia brzegowe w trybie przezroczystym mogą łączyć urządzenia MQTT/AMQP na potrzeby komunikacji dwukierunkowej. W przypadku korzystania z trybu przezroczystego należy uwzględnić dodatkowe buforowanie komunikatów, magazyn i obciążenie związane z konfiguracją na urządzeniu bramy lub urządzenia brzegowego.
Warstwa transportu
Warstwa transportu obsługuje połączenia między urządzeniem a rozwiązaniem IoT, przekształcając komunikaty IoT do pakietów sieciowych i wysyłając je za pośrednictwem sieci fizycznej. Rozwiązania IoT często używają protokołów połączeń AMQP i MQTT.
Optymalizowanie użycia zasobów
Połączenie między urządzeniem a chmurą musi być bezpieczne, niezawodne i skalowalne w celu obsługi docelowej liczby urządzeń i komunikatów.
Użyj otwartego połączenia stanowego z urządzenia do bramy w chmurze. IoT Hub jest zoptymalizowany pod kątem zarządzania milionami otwartych połączeń stanowych przy użyciu protokołów MQTT, AMQP lub WebSocket. Zachowaj otwarte połączenia z urządzeniami, aby zminimalizować nakład pracy związany z uzgadnianiami zabezpieczeń, uwierzytelnianiem i autoryzacją. Ta praktyka poprawia wydajność i znacznie zmniejsza wymaganą przepustowość.
Użyj protokołu AMQP, który obsługuje multipleksowanie wielu kanałów w jednym połączeniu, aby zminimalizować liczbę otwartych połączeń, których wymaga brama w chmurze. Przy użyciu multipleksowania przezroczysta brama może łączyć wiele urządzeń liści przy użyciu własnych kanałów za pośrednictwem jednego połączenia.
Użyj wzorców bramy chmury bliźniaczych reprezentacji urządzenia i modułu, aby asynchronicznie wymieniać informacje o stanie między urządzeniami a chmurą.
Skonfiguruj usługę DPS, aby przenieść stan urządzenia, gdy urządzenie łączy się z inną bramą w chmurze.
Optymalizowanie komunikacji danych
Liczba i rozmiar komunikatów urządzenia w chmurze wpływają na wydajność i koszty. Ocena komunikacji z danymi ma kluczowe znaczenie dla wydajności obciążenia IoT.
Użyj wydajnego formatu danych i kodowania, które nie wykorzystuje dużej przepustowości do wysyłania danych do chmury. W przypadku sieci o niskiej przepustowości należy rozważyć użycie skompresowanego lub binarnego formatu, ale zrozumieć obciążenie związane z usuwaniem lub konwertowaniem danych w chmurze.
Rozważ przechowywanie danych o dużej ilości lokalnie i przekazywanie ich co godzinę lub codziennie.
Grupuj wiele małych komunikatów z urządzenia do chmury w mniej większych komunikatach, aby zmniejszyć łączną liczbę. Nie wysyłaj jednak tylko dużych komunikatów, ale równoważ między średnim rozmiarem komunikatu a przepływnością.
Warstwa magazynu
Różne typy danych zebranych i przywoływane w rozwiązaniu IoT często wymagają typów magazynów, które są wyspecjalizowane i zoptymalizowane pod kątem różnych scenariuszy na urządzeniach, bramach i w chmurze. Dane, które muszą być dostępne w wielu regionach geograficznych globalnie lub lokalnie, a w niektórych przypadkach replikowane w celu zoptymalizowania opóźnienia zwiększa złożoność magazynu IoT.
Użyj bazy danych szeregów czasowych do przechowywania danych szeregów czasowych, które mają sygnatury czasowe i wartości. Wzbogacanie telemetrii danych szeregów czasowych za pomocą kolumn do filtrowania, na przykład CustomerID, RoomID lub innych kolumn specyficznych dla przypadku użycia.
Użyj magazynu urządzenia i bramy do buforowania danych lub zachowaj dane po rozłączeniu. Konto wymaganego miejsca do magazynowania. Nie należy przechowywać wszystkich danych, ale używać próbkowania w dół, przechowywać tylko agregacje ani przechowywać danych przez ograniczony czas.
Rozważ oddzielenie pozyskiwania danych i magazynu przetwarzania zdarzeń od potrzeb magazynu raportowania i integracji.
Użyj typu magazynu danych, który odpowiada potrzebom wymaganej przepływności, rozmiaru, okresu przechowywania, woluminu danych, wymagań CRUD i replikacji regionalnej. Niektóre przykłady to Azure Data Lake Storage, Azure Data Explorer, Azure SQL i Azure Cosmos DB.
Przetwarzanie zdarzeń i warstwa analizy
Dane generowane przez urządzenia można przetwarzać przed wysłaniem ich do lub w rozwiązaniu IoT. Przetwarzanie danych może obejmować tłumaczenie, kontekstowość, filtrowanie i routing lub bardziej zaawansowaną analizę, np. analizę trendu lub wykrywanie anomalii.
Optymalizowanie przetwarzania krawędzi i chmury
Uruchamiaj obciążenia w czasie rzeczywistym i niemal w czasie rzeczywistym lub małe, zoptymalizowane, o małych opóźnieniach z ograniczeniami czasu, na urządzeniach lub na brzegu przy użyciu zasobów obliczeniowych lokalnych. Uruchamiaj większe obciążenia lub inne obciążenia, które dodały lub dane zewnętrzne lub zależności obliczeniowe w chmurze.
Na przykład uruchom algorytm uczenia maszynowego na brzegu, aby zliczyć osoby w strumieniu wideo i wysłać zdarzenie zawierające liczbę do chmury. Użyj chmury, aby porównać trendy między różnymi fabrykami.
Uruchamianie obciążeń analitycznych na brzegu przy użyciu modułu usługi Stream Analytics Edge. Można na przykład uruchomić wykrywanie anomalii na brzegu i oznaczyć zdarzenia wysyłane do chmury za pomocą wykrytej anomalii. Po uruchomieniu analizy na brzegu należy uwzględnić dodatkowe opóźnienia, opóźnione przybycie i wpływ okna.
Należy pamiętać o obciążeniu brzegowym z wieloma połączonymi urządzeniami podrzędnymi. Węzeł brzegowy musi przesyłać dalej lub przetwarzać wszystkie komunikaty i obsługiwać buforowanie wszystkich danych, jeśli występuje sporadyczne połączenie z chmurą. Zweryfikuj wpływ wydajności rozwiązania, testując przy użyciu planowanej maksymalnej liczby urządzeń podrzędnych i komunikatów na węzeł brzegowy. Należy pamiętać o wpływie na wydajność, jaki może mieć tłumaczenie lub wzbogacanie komunikatów na brzegu, IoT Hub lub przetwarzanie zdarzeń w chmurze.
Kategoryzowanie poszczególnych obciążeń
Oddzielne obciążenia według ograniczeń czasu i wymaganych opóźnień i czasów odpowiedzi, na przykład odpowiedzi w ciągu sekund w porównaniu z partią na godzinę. Hybrydowe systemy sprzętowe oparte na mikroukładach (SoCs) mogą obsługiwać obciążenia na poziomie urządzenia.
Na krawędzi użyj kolejek priorytetowych, aby oddzielić różne strumienie danych o różnych priorytetach i czasie wygaśnięcia. Na przykład alarmy powinny być zawsze wysyłane jako pierwsze, ale mają niższy czas wygaśnięcia niż telemetria.
W chmurze można używać grup odbiorców na Azure Event Hubs, aby oddzielić różne strumienie danych i obsługiwać i skalować alarmy inaczej niż dane telemetryczne. Można również użyć IoT Hub tras do oddzielenia różnych strumieni danych z filtrowaniem i oddzielnymi punktami końcowymi. IoT Hub routing komunikatów dodaje pewne opóźnienie. Użyj usługi Event Hubs, Azure Event Grid lub Azure Service Bus do dystrybucji obciążeń, chroniąc jednocześnie przed obciążeniem wstecznym w chmurze.
Nadmiernie złożone reguły routingu IoT Hub mogą mieć wpływ na przepływność, zwłaszcza reguły routingu z filtrami JSON treści komunikatów, gdzie każdy komunikat musi być deserializowany i skanowany.
Obsługa danych w chmurze o dużej ilości
Aby zoptymalizować wydajność danych w chmurze o dużej ilości:
Użyj gotowej integracji usługi między miejscami docelowymi IoT Hub i danymi, takimi jak Azure Data Lake Storage i Azure Data Explorer, które są już zoptymalizowane pod kątem wysokiej wydajności przepływności.
Użyj zestawu SDK usługi Event Hubs, aby utworzyć niestandardowe pozyskiwanie z centrum IoT z dołączonym procesorem zdarzeń. Procesor zdarzeń może ponownie równoważyć urządzenia i hosty.
Użyj odpowiedniej liczby partycji IoT Hub i grup odbiorców dla liczby równoczesnych czytników danych i wymaganej przepływności.
Rozdziel magazyn wymagany do pozyskiwania danych i przetwarzania zdarzeń z magazynu wymaganego do raportowania i integracji.
Użyj magazynu danych, który odpowiada potrzebom na podstawie wymaganej przepływności, rozmiaru, okresu przechowywania, woluminu danych, wymagań CRUD i replikacji regionalnej. Przykłady to Azure Data Lake Storage, Azure Data Explorer, Azure SQL lub Azure Cosmos DB. Aby uzyskać więcej informacji, zobacz Wybieranie magazynu danych platformy Azure dla aplikacji.
Warstwa integracji
Warstwa integracji łączy rozwiązanie IoT z innymi usługami i aplikacjami biznesowymi.
Oddziel potok pozyskiwania rozwiązania IoT od przetwarzania integracji. Upewnij się, że złożone zapytania lub obciążenia z warstwy integracji nie wpływają na wydajność pozyskiwania danych.
Użyj dobrze zdefiniowanych i w wersji interfejsów API, aby uzyskać dostęp do danych i poleceń IoT.
Unikaj narzędzi dla użytkowników końcowych do tworzenia zapytań zdefiniowanych przez użytkownika względem magazynu danych IoT. Rozważ użycie oddzielnych magazynów danych na potrzeby integracji i raportowania.
Warstwa DevOps
Użyj następujących mechanizmów DevOps, aby zmaksymalizować wydajność:
Połączony rejestr na potrzeby lokalnego buforowania i wdrażania obrazów kontenerów.
IoT Hub zaktualizować wdrożenia do wielu urządzeń jednocześnie, w tym urządzeń i bram.
Bliźniacze reprezentacje urządzeń i bliźniacze reprezentacje modułów w celu zaktualizowania konfiguracji urządzeń w skalowalny i wydajny sposób.
Testowanie wydajności, w tym testy obciążenia i obciążenia w celu replikowania środowiska produkcyjnego, takich jak lokalizacja i urządzenia heterogeniczne.
Monitorowanie
Usługa Azure Monitor służy do zbierania metryk IoT Hub z alertami dotyczącymi metryk krytycznych. Skonfiguruj alerty usługi Azure Monitor na podstawie bieżących limitów skalowania, takich jak urządzenia do komunikatów w chmurze wysyłanych na sekundę. Ustaw alert na wartość procentową limitu, na przykład 75%, w celu wcześniejszego powiadomienia o zbliżających się limitach skalowalności. Skonfiguruj również alerty usługi Azure Monitor dla dzienników i metryk, takich jak liczba błędów ograniczania przepustowości.
Ustaw alerty usługi Azure Service Health, aby wyzwalać powiadomienia po zmianie stanu IoT Hub.