Wyłącznik obwodu ogranicza awarię zewnętrznego narzędzia, zatrzymując powtarzające się wywołania, zwracając kontrolowany wynik i sprawdzając możliwość przywrócenia działania przed ponownym dopuszczeniem normalnego ruchu.
Lokalny agent może zależeć od modelu chmurowego, interfejsu wyszukiwania, usługi powiadomień lub zdalnego mostu inteligentnego domu, podczas gdy reszta jego przepływu pracy działa prawidłowo. Bez granicy izolującej jedna wolna zależność może pochłonąć cały budżet czasowy agenta i wywołać kolejne ponowienia prób. Wyłącznik obwodu zamienia niepewny stan zdalnej usługi w jawny stan lokalny, który orkiestrator może analizować.
Wyłącznik znajduje się między wyborem narzędzia a wykonaniem zewnętrznym
Agent zwykle wybiera narzędzie, sprawdza jego argumenty i przekazuje wywołanie wykonawcy, natomiast wyłącznik obwodu dodaje w tym ostatnim punkcie opakowanie przechowujące stan. Nie zmienia tego, czego zażądał model; decyduje, czy wykonawca powinien skontaktować się z zależnością, lokalnie odrzucić próbę czy dopuścić ograniczoną próbę przywracającą działanie.
Opakowanie obserwuje zakończone wywołania i klasyfikuje wyniki, takie jak powodzenie, przekroczenie czasu, błąd transportu, ograniczenie liczby żądań lub inny skonfigurowany sygnał awarii. Konwencjonalny wzorzec wyłącznika obwodu opakowuje zdalne wywołania, śledzi awarie, otwiera obwód po przekroczeniu progu, a później zezwala na żądania testowe, pozostawiając ocenę kondycji zależności poza osądem modelu na poziomie promptu.
Bezpośrednim wynikiem nie jest więc tylko wyjątek narzędzia. To ustrukturyzowany rezultat orkiestracji zawierający stan wyłącznika, informację o tym, czy podjęto próbę wykonania, oraz wskazujący dozwolone ścieżki kontynuacji.
Niedawne awarie są kompresowane do zmiany stanu
Gdy obwód jest zamknięty, wyłącznik przepuszcza wywołania i rejestruje tylko wyniki istotne z punktu widzenia swojej polityki, dlatego pojedyncze przekroczenie czasu nie musi wyłączać użytecznego narzędzia. Implementacje zwykle analizują niedawną liczbę zdarzeń, ich odsetek lub okno czasowe i otwierają obwód dopiero wtedy, gdy lokalne dane przekroczą skonfigurowany próg awarii lub wolnych wywołań.
Próg zamienia wiele zakłóconych zdarzeń w jedną stabilną decyzję sterującą. Próg odsetka błędów może ograniczyć lawinowe ponawianie połączeń podczas awarii sieci, zamiast pozwalać, aby każda żądana operacja ustanawiała kolejne skazane na niepowodzenie połączenie.
To, co uznaje się za awarię, musi odpowiadać umowie narzędzia. Odmowa uwierzytelnienia, nieprawidłowe argumenty i trwale niedostępny zasób zwykle wymagają innego postępowania niż opóźnienie, tymczasowa niedostępność lub ograniczenie liczby żądań.
Próg procentowy również wymaga odpowiedniej liczby obserwacji. Otwarcie obwodu po jednej awarii czyni rzadko używane narzędzie niestabilnym, natomiast oczekiwanie na dużą próbkę może pozostawić często zawodną zależność aktywną zbyt długo, dlatego okno próbkowania i minimalna liczba wywołań powinny należeć do polityki wyłącznika, a nie do modelu językowego.
Otwarty obwód zamienia zdalne oczekiwanie w lokalną awarię
Po otwarciu obwodu wykonawca przestaje kontaktować się z daną zależnością na określony czas chłodzenia, więc nowe próby kończą się lokalnie, zamiast ponownie oczekiwać na zdalne przekroczenie czasu. Zdrowe lokalne narzędzia, etapy pobierania danych i kolejne kroki rozumowania mogą działać dalej bez przejmowania opóźnienia niesprawnej zależności.
Ta ścieżka szybkiej porażki ogranicza zarówno presję na zasoby, jak i opóźnienia, ponieważ powtarzające się zdalne wywołania mogą podczas oczekiwania zajmować gniazda, miejsca w puli pracowników, pamięć lub zadania w kolejce. Odrzucanie operacji przed przydzieleniem kolejnych zasobów do zewnętrznych wywołań ogranicza wyczerpanie zasobów podczas trwałej awarii.
Izolacja jest selektywna, a nie globalna. Wyłącznik powinien być zwykle przypisany do jednej zależności, a często także do jednej klasy operacji, ponieważ odczyty i zapisy mogą wiązać się z różnymi kosztami awarii.
Ponowienia prób i limity czasu zmieniają to, co obserwuje wyłącznik
Ponowienie próby obsługuje awarię uznaną za przejściową, podczas gdy wyłącznik obwodu zapamiętuje, że awarie stały się na tyle trwałe, aby przestać próbować, dlatego ich kolejność zmienia dane obserwowane przez wyłącznik. Ponowienia wewnątrz jednego chronionego wykonania mogą być liczone jako jedno logiczne wywołanie, natomiast ponowienia poza wyłącznikiem mogą każde dodawać kolejną próbkę awarii.
Limity czasu określają również, kiedy wolne wywołanie staje się próbką awarii. Wzorce odporności rozdzielają limity czasu, ponowienia prób i wyłączniki obwodu, ponieważ każdy z tych mechanizmów odpowiada za inną granicę awarii.
To rozdzielenie staje się kluczowe, gdy narzędzie wywołuje nieidempotentne skutki uboczne. Te same pętle powtarzających się wywołań narzędzi mogą wynikać z decyzji modelu lub warstw ponawiania poniżej modelu, a wyłącznik nie może stwierdzić, czy zapis, którego wykonanie przekroczyło limit czasu, zdążył już zmienić system zewnętrzny.
Bezpieczna ścieżka wykonania rejestruje więc osobno budżet ponowień i stan wyłącznika, aby orkiestrator mógł wyjaśnić, czy działanie nigdy nie zostało podjęte, podjęto je raz, czy też zostało zablokowane po wielokrotnych awariach zależności.
Plany awaryjne zachowują znaczenie przepływu bez udawania, że narzędzie zadziałało
Otwarcie obwodu odpowiada tylko na pytanie, czy podstawowe narzędzie może zostać uruchomione, podczas gdy orkiestrator nadal potrzebuje polityki kontynuacji zachowującej intencję użytkownika. W zależności od zadania może zwrócić częściowe wyniki, użyć danych odczytanych z pamięci podręcznej, przełączyć dostawcę, dodać zadanie do kolejki, poprosić o weryfikację człowieka albo przerwać działanie.
Plan awaryjny musi zawierać metadane degradacji, zamiast udawać oryginalny wynik. Kolejne etapy mogą ograniczać działania o dużym wpływie, gdy opierają się na nieaktualnych danych z pamięci podręcznej lub zastępczych dowodach.
Niektóre wywołania nie mają bezpiecznego planu awaryjnego. Powiadomienie można dodać do kolejki, ale polecenia sterowania drzwiami nie należy zastępować odgadniętym stanem, a usunięcia kopii zapasowej nie wolno wywnioskować ze zbuforowanego wykazu.
Próby w stanie półotwartym przywracają dostęp bez uwalniania fali ponowień
Otwarty obwód nie może pozostawać na zawsze zamknięty dla ruchu, ponieważ zewnętrzne narzędzie może odzyskać sprawność, dlatego po upływie czasu chłodzenia wyłącznik dopuszcza tylko niewielką liczbę prób testowych. Normalne obciążenie pozostaje zablokowane, dopóki próby te nie dostarczą dowodów, że zależność może bezpiecznie ponownie przyjmować ruch.
Udane próby przesuwają wyłącznik w kierunku stanu zamkniętego, natomiast nieudane ponownie go otwierają i rozpoczynają okres oczekiwania od nowa. Monitorowanie stanów wyłącznika obwodu uwidacznia powtarzające się otwarcia i długie okresy przywracania działania, zamiast ukrywać je wewnątrz błędów narzędzia.
Udana próba kontrolna nie jest automatycznie bezpiecznym powtórzeniem wcześniejszego zapisu. Zależność może odpowiedzieć na sprawdzenie odczytu, podczas gdy wcześniejszy skutek uboczny pozostaje niejednoznaczny, dlatego klucze idempotencji, punkty kontrolne, uzgadnianie i granice zatwierdzania nadal określają, czy przerwane działania można wznowić.
Dopuszczanie prób jest celowo węższe niż normalny ruch, ponieważ dowody odzyskania sprawności są mniej użyteczne, jeśli setki oczekujących żądań trafią do zależności jednocześnie. Ograniczenie liczby równoczesnych prób zapobiega temu, by sam wyłącznik wywołał skok obciążenia, przez który świeżo odzyskane narzędzie znów zacznie wyglądać na niesprawne.
Centrum Technologii i Sztucznej Inteligencji
Więcej do przeczytania

Stan bieżący a stan trwały w Home Assistant: co musi przetrwać ponowne uruchomienie?
Home Assistant nie zachowuje trwale każdej bieżącej wartości; konfiguracja, rejestry, wybrane przywracane stany, historia i dane wdrożeniowe pełnią różne funkcje podczas ponownego uruchamiania.

Jak Home Assistant uwierzytelnia sesje lokalne i zdalne?
Lokalne i zdalne sesje Home Assistant korzystają z tego samego modelu tożsamości po stronie serwera; zdalny dostęp zmienia trasę i granicę TLS, ale nie...

Dlaczego zapytania do historii Home Assistant mogą zwalniać w miarę przyrostu danych rejestratora?
Wzrost liczby rekordów może zwiększyć koszt zapytań do historii, gdy żądany zakres obejmuje więcej wierszy, rośnie liczba chybień pamięci podręcznej lub operacje na pamięci...

