피드로 돌아가기
Dev.toBackend
원문 읽기
Trupe 프로젝트가 Actor System에 Supervisor 패턴 구현으로 예외 발생 시 자동 재시작 및 장애 격리 메커니즘 제공
Trupe: Implementando Supervisor
AI 요약
Context
Actor System에서 개별 액터의 예외 처리와 장애 복구는 시스템 안정성의 핵심 요소이다. 액터가 메시지 처리 중 예외를 발생시켰을 때 이를 적절히 감시하고 대응하는 메커니즘이 필요하다.
Technical Solution
- Strategy 열거형으로 감시 전략 정의: OneForOne(실패한 액터만 재시작) 및 AllForOne(모든 자식 액터 재시작) 두 가지 구현
- FailureAction 열거형으로 실패 대응 방식 정의: Restart, Stop, Escalate, Resume 네 가지 액션 제공
- RestartPolicy 열거형으로 재시작 정책 분류: Permanent(항상 재시작), Transient(비정상 종료 시만 재시작), Temporary(재시작 안 함)
- ISupervisor 인터페이스와 IChildSpecification으로 감시 계층 구조 정의: 자식 액터 컬렉션 관리 및 메타데이터 추적
- Child 메타데이터 클래스로 재시작 횟수, 최종 재시작 시간, 사용자 정의 메타데이터 저장: 재시작 정책 판단 기초 제공
- Supervisor 기본 클래스(전정적 감시자): 초기화 시 자식 정의, MaxRestarts=3 및 RestartWindow 설정으로 재시작 제한
- DynamicSupervisor 클래스: 초기화 이후 동적으로 자식 액터 추가/제거 가능, OneForOne 전략만 지원
- PartitionSupervisor 클래스: 고정 크기 워커 풀 생성(기본값: Environment.ProcessorCount), 파티션 키 기반 해시로 메시지 라우팅
- RootSupervisor 클래스: 최상위 감시자로 작동, 상위 감시자가 없으므로 항상 재시작하며 Escalate하지 않음
Key Takeaway
Actor System의 장애 허용성은 다층 감시 전략(One-For-One vs All-For-One)과 정책 기반 재시작(Permanent/Transient/Temporary)을 조합하여 구현되며, 각 감시자 유형(정적/동적/파티션)이 서로 다른 사용 사례를 해결한다.
실천 포인트
분산 시스템에서 Actor Model을 사용하는 개발자는 Supervisor를 계층적으로 배치하고, 각 감시자에 적절한 재시작 전략과 정책을 설정함으로써 부분 장애가 전체 시스템으로 확대되는 것을 방지할 수 있다. PartitionSupervisor를 통한 워커 풀과 해시 기반 라우팅을 도입하면 메시지 순서 보장이 필요한 파티션별 처리에서 일관성을 유지할 수 있다.