Jaki jest dobry sposób na utrzymanie stanu podczas restartowania awarii?Jak mogę przywrócić stan procesu po awarii?
Mam superwizora w aplikacji OTP, który obserwuje kilka "podsystemów" gen_servers.
Na przykład, jeden jest podsystemem "pogodowym", który generuje nowy stan pogody co 15 minut i obsługuje zapytania dotyczące aktualnego stanu pogody. (Pomyśl o stoliku z lemoniadą)
Jeśli ten gen_server się zawiesza, chcę go zrestartować, ale powinien zostać uruchomiony ponownie z najnowszym stanem pogody, a nie jakimś arbitralnym stanem zakodowanym w init(). Nie byłoby sensu, by stan symulacji nagle przeszedł z "burzy gradowej" na "przyjemny i przewiewny" właśnie z powodu wypadku.
Waham się używać mnesii lub ETS do przechowywania stanu po każdej aktualizacji ze względu na dodatkową złożoność; Czy istnieje prostszy sposób?
Osoba nadzorująca powinna zawierać mniej informacji logicznych, jak to tylko możliwe i ponosić odpowiedzialność tylko za ponowne uruchomienie. Pojedynczy błąd w tej logice może doprowadzić do awarii całego poddrzewa. –