충돌 한 프로세스를 다시 시작할 때 상태를 유지하는 좋은 방법은 무엇입니까?충돌 후 프로세스 상태를 복원하려면 어떻게해야합니까?
저는 OTP 애플리케이션에서 수퍼바이저가 여러 개의 "서브 시스템"gen_servers를 감시합니다.
예를 들어, 하나는 15 분마다 새로운 날씨 상태를 생성하고 현재 날씨 상태에 대한 쿼리를 처리하는 "날씨"하위 시스템입니다. (레모네이드 스탠드 게임을 생각해보십시오.)
gen_server가 충돌하면 다시 시작하고 싶지만, init()에 하드 코드 된 일부 최신 상태가 아닌 가장 최근의 기상 상태로 재시작해야합니다. 충돌로 인해 시뮬레이션 상태가 갑자기 "우박 폭풍"에서 "쾌적하고 시원한"상태로 바뀌는 것은 당연합니다.
추가 된 복잡성으로 인해 매 업데이트 후에 상태를 저장하기 위해 mnesia 또는 ETS를 사용하기를 주저합니다. 더 쉬운 방법이 있습니까?
관리자는 가능한 한 로직을 적게 포함해야하며 재시작 만해야합니다. 이 논리의 단일 버그로 인해 전체 하위 트리가 충돌 할 수 있습니다. –