Rzeczywisty limit wydajności Home Assistant jest zwykle wyznaczany przez najwolniejszą wymaganą zależność na ścieżce od zdarzenia do rezultatu, a nie przez średnie wykorzystanie hosta.
Automatyzacja ruchu może zależeć od sieci radiowej, koordynatora, brokera, integracji, pętli zdarzeń, bazy danych, sieci, urządzenia docelowego i aktualizacji widocznej dla klienta. Szybszy procesor lub większa ilość pamięci RAM pomaga tylko wtedy, gdy ogniwem ograniczającym są obliczenia lub pamięć. Aby znaleźć limit, trzeba zmierzyć całą ścieżkę, a następnie rozdzielić jej etapy przy tym samym powtarzalnym obciążeniu i w tych samych warunkach.
Limit wyznacza ścieżka krytyczna
Wydajność Home Assistant to zachowanie całościowe, a nie pojedynczy parametr serwera. Wyzwalacz może dotrzeć szybko, podczas gdy polecenie czeka w brokerze, sieci radiowej, interfejsie chmurowym lub urządzeniu docelowym. Najwolniejszy wymagany etap dominuje nad widocznym rezultatem, natomiast zajętość etapów spoza tej transakcji nie musi wyznaczać jej limitu.
Rzeczywiste dyskusje o czasie działania automatyzacji pokazują, dlaczego same specyfikacje hosta nie wystarczają do wyciągnięcia wniosków. W jednym z badań opóźnień Home Assistant uczestnicy oddzielają opóźnienie brokera i Zigbee od przetwarzania przez Home Assistant, pokazując, że modernizacja procesora nie usunie czasu spędzanego poza aplikacją.
Zdefiniuj mierzony rezultat, zanim uporządkujesz zależności. Czas od zdarzenia do uruchomienia automatyzacji, od wysłania polecenia do zmiany stanu urządzenia, ładowania pulpitu i gotowości po restarcie obejmuje różne ścieżki. Komponent ograniczający zapytania do historii nie musi ograniczać lokalnego sterowania oświetleniem, dlatego cała instalacja nie ma jednego uniwersalnego limitu.
Baza danych i pamięć masowa ograniczają operacje zależne od stanu
Zapis do Rejestratora, zapytania do historii, widoki dziennika, statystyki, kopie zapasowe i odzyskiwanie po uruchomieniu zależą od pamięci masowej. Często raportujące encje zwiększają liczbę transakcji i pracę indeksów, a wolne lub przeciążone urządzenie podnosi opóźnienia każdej operacji zależnej od pamięci masowej. Limit jest najbardziej widoczny, gdy pulpity intensywnie odczytujące dane nakładają się na ciągłe zapisy lub prace konserwacyjne.
Dostrajanie bazy danych zaczyna się od zmierzenia, które encje generują największy wolumen, zamiast traktowania pliku bazy jako jednego nieprzejrzystego obciążenia. Aktualny poradnik dotyczący optymalizacji bazy danych Home Assistant łączy często raportujące encje z wolumenem zapisów, obciążeniem pamięci masowej i potrzebą wykonania pomiarów przed czyszczeniem.
Pamięć masowa wyznacza limit, gdy głębokość kolejki lub opóźnienie rośnie wraz z wolniejszym rezultatem, a wynik poprawia się po ograniczeniu tego samego obciążenia wejścia-wyjścia. Sam rozmiar bazy danych nie jest dowodem. Retencja, struktura indeksów, zakres zapytania, zachowanie systemu plików i konkurencyjne zadania hosta decydują o ilości pracy wymaganej przez każdą widoczną akcję.
Integracje mogą zajmować ścieżkę aplikacji
Integracje tłumaczą zewnętrzne protokoły, odpytują punkty końcowe, przetwarzają wywołania zwrotne i udostępniają encje. Wolna integracja podczas uruchamiania opóźnia gotowość, a blokująca lub zbyt częsta praca może zmniejszać margines czasowy planowania aplikacji. Niestandardowy kod dodaje kolejną zależność, której zachowanie może zmieniać się niezależnie od jądra Home Assistant i hosta.
Czas uruchamiania sprawia, że koszt integracji staje się mierzalny, a nie tylko hipotetyczny. W jednym z przeglądów czasów uruchamiania integracji Home Assistant stwierdzono duże różnice między integracjami i usunięto nieużywane wykryte komponenty, pokazując, dlaczego całkowita liczba encji jest słabszym predyktorem niż zachowanie konkretnych zależności.
Integracja wyznacza limit, gdy czas jej wywołania zwrotnego, odpytywania lub inicjalizacji odpowiada opóźnionemu rezultatowi, a jej wyłączenie zmienia ten sam pomiar. Długi wpis podczas uruchamiania nie wyjaśnia automatycznie opóźnień sterowania w czasie działania. Dopasuj obserwowaną fazę integracji do testowanej ścieżki wydajności.
Brokerzy, sieci radiowe i siatki dodają własne kolejki
Wiele urządzeń dociera do Home Assistant przez brokera MQTT, koordynator Zigbee lub Z-Wave, proxy Bluetooth, router brzegowy Thread albo bramę dostawcy. Każdy most ma bufory, zasady ponawiania, limity czasu antenowego i ograniczenia wynikające z rozmieszczenia urządzeń. Aplikacja nie może przetworzyć zdarzenia, które nie przeszło jeszcze przez te etapy.
Wydajność sieci radiowej może być ograniczana przez zakłócenia i topologię, nawet gdy serwer jest bezczynny. Szczegółowy poradnik optymalizacji sieci Zigbee łączy rozmieszczenie koordynatora, zakłócenia USB, urządzenia routujące i planowanie kanałów ze stabilnym dostarczaniem danych, a nie z wydajnością procesora Home Assistant.
Te zależności wyznaczają limit, gdy znaczniki czasu pokazują opóźnienie przed dotarciem zdarzenia do Home Assistant lub po opuszczeniu go przez polecenie. Ważniejsze od płynności pulpitu są głębokość kolejki brokera, ponowienia transmisji radiowej, jakość połączenia urządzenia i logi koordynatora. Przetestuj jeden lokalny przewodowy lub wirtualny punkt końcowy jako element kontrolny, aby oddzielić aplikację od sieci fizycznej.
Zależności sieciowe i chmurowe narzucają zmienne opóźnienia ogona
Nawet lokalne integracje zależą od przełączników, punktów dostępowych, DNS, routingu i odpowiedzi urządzeń. Integracje chmurowe dodają dostęp do internetu, obciążenie zdalnej usługi, uwierzytelnianie, limity zapytań i awarie dostawcy. Etapy te często powodują zmienne opóźnienia ogona: większość żądań jest szybka, ale niewielka część czeka wystarczająco długo, by zdominować doświadczenie użytkownika.
Ciągłe pomiary ścieżki mogą ujawnić zmienność ukrytą przez średnie. Monitoring opóźnień i utraty pakietów prowadzony przez jednego z użytkowników Home Assistant rejestruje wiele punktów końcowych, pokazując, jak mierzyć kondycję sieci niezależnie od wykonywania aplikacji.
Sieć lub usługa chmurowa wyznacza limit, gdy sterowanie lokalne mieści się w założonym czasie, ale równoważna akcja zależna od zdalnej usługi już nie. Nie zakładaj, że każda integracja chmurowa spowalnia pętlę zdarzeń. Zanim przypiszesz wąskie gardło, odizoluj zewnętrzne żądanie, jego limity czasu i zachowanie ponawiania oraz lokalną ścieżkę awaryjną.
Klient lub urządzenie docelowe może być ostatnim ograniczeniem
Pomyślne wywołanie usługi Home Assistant nie jest tym samym co widocznie zakończone działanie. Urządzenie docelowe może potwierdzać powoli, a frontend musi odebrać stan, ocenić karty, wyrenderować wykresy i zaktualizować ekran. Starsze tablety ścienne i złożone pulpity mogą pozostawać wolne, podczas gdy automatyzacje po stronie serwera kończą się szybko.
Ograniczenia po stronie klienta widać, gdy ten sam pulpit zachowuje się inaczej na różnych urządzeniach. Opis wolnego pulpitu ściennego Home Assistant przedstawia rosnące obciążenie kartami i wyskakującymi oknami na starszym tablecie, pokazując limit, którego dodatkowa moc serwera może nie usunąć.
Ta granica zapobiega błędnej decyzji o modernizacji. Jeśli znaczniki czasu zdarzeń i stan urządzenia docelowego są prawidłowe, ale piksele pojawiają się z opóźnieniem, zmierz wykonywanie skryptów w przeglądarce, renderowanie, pamięć i transfer sieciowy. Jeśli sam stan urządzenia docelowego dociera późno, cofnij się przez ścieżkę polecenia. Traktuj zakończenie po stronie serwera i zakończenie widoczne dla człowieka jako osobne progi.
Zbuduj drabinę zależności i zmieniaj jeden szczebel naraz
Wybierz jedną powtarzalną transakcję i oznacz czas utworzenia wyzwalacza, odebrania go przez Home Assistant, rozpoczęcia automatyzacji, wysłania polecenia, potwierdzenia przez zależność, potwierdzenia stanu oraz renderowania przez klienta. Wykonaj co najmniej pięć prób po rozgrzaniu systemu i pięć prób podczas podejrzanego obciążenia konkurencyjnego. Używaj mediany i najwolniejszego wyniku, ponieważ sporadyczne opóźnienia ogona mogą mieć większe znaczenie niż średnia.
Limity wydajności ujawniają się dzięki kontrolowanym zmianom, a nie dzięki zajętemu ekranowi monitorowania. Analiza Google dotycząca opóźnień ogona w łańcuchach usług wyjaśnia, dlaczego niewielkie prawdopodobieństwo spowolnienia w zależnych komponentach staje się widoczne na poziomie całego systemu.
Zmień tylko szczebel z największym zmierzonym opóźnieniem, a następnie powtórz te same próby. Skorzystaj z granicy niezawodności ZimaSpace w przypadku danych Home Assistant na udziale sieciowym, gdy pamięć masowa jest rozproszona między hostami. Zachowaj zmianę tylko wtedy, gdy poprawią się jednocześnie ten szczebel i wynik całościowy, bez przenoszenia awarii poza akceptowany próg.
Centrum Technologii i Sztucznej Inteligencji
Więcej do przeczytania

Dlaczego Home Assistant ponownie przetwarza istniejące dane po aktualizacji?
Home Assistant może ponownie przetworzyć istniejące dane po aktualizacji, aby dostosować zapisany stan, indeksy, pamięci podręczne i integracje do nowego kodu.

Sieciowanie Home Assistant: jak wykrywanie, DNS i routing zapewniają dostępność
Osiągnięcie dostępności Home Assistant wymaga wykrywania, prawidłowego rozpoznawania nazw, poprawnej trasy, dozwolonego ruchu oraz nasłuchującego punktu końcowego.

Home Assistant dla rodzin: jak tożsamość i uprawnienia kształtują korzystanie z systemu
Korzystanie z Home Assistant przez rodzinę zależy od tego, kogo zidentyfikowano, co każde konto może robić i widzieć oraz od tego, gdzie sposób prezentacji...

