피드로 돌아가기
Dev.toInfrastructure
원문 읽기
Bun-Robyn 기반의 Heartbeat 메커니즘으로 12초 내 Backend Auto-Healing 구현
Ditch Electron: Implementing Watchdog Heartbeat & Auto-Healing for Multi-Process Desktop Apps
AI 요약
Context
Bun 마스터 프로세스와 Python(Robyn) 사이드카 프로세스로 구성된 멀티 프로세스 데스크톱 환경 구축. Python 프로세스의 Deadlock, 메모리 위반, OS 강제 종료 시 프론트엔드 UI가 응답 불능 상태에 빠지는 가용성 문제 직면.
Technical Solution
- 비즈니스 로직을 배제한 고우선순위 /ping 엔드포인트를 Robyn Backend에 구현하여 런타임 응답성 확인
- Bun 프로세스 내 3초 간격의 Asynchronous Heartbeat Polling Daemon을 통해 사이드카 상태 상시 감시
- 1초의 Strict Timeout을 설정한 fetch 요청으로 Backend의 런타임 정지 및 네트워크 지연 즉시 감지
- 3회 연속 응답 실패 시 기존 프로세스를 강제 종료(Surgical Termination)하고 새로운 인스턴스를 생성하는 Auto-Healing 파이프라인 설계
- Port 0을 통한 Dynamic Port Allocation 방식을 적용하여 프로세스 재시작 시 포트 충돌 가능성 원천 차단
- 정규표현식을 통한 stdout 파싱으로 런타임에 할당된 동적 포트를 캡처하여 WebView에 즉시 주입
실천 포인트
1. 헬스체크 엔드포인트는 DB 조회 등 무거운 로직을 제거하고 순수 런타임 응답성만 확인하도록 설계할 것
2. 무한 대기를 방지하기 위해 헬스체크 요청에 반드시 짧은 AbortSignal timeout을 설정할 것
3. 프로세스 재시작 시 포트 충돌을 피하기 위해 OS에 포트 할당을 위임하는 Port 0 전략을 검토할 것
4. 일시적 네트워크 글리치를 방지하기 위해 단일 실패가 아닌 n회 연속 실패 시에만 복구 로직을 트리거할 것