피드로 돌아가기
Cloudflare BlogBackend
원문 읽기
Durable State 기반 Saga Pattern 도입을 통한 분산 트랜잭션 무결성 보장
How we built saga rollbacks for Cloudflare Workflows
AI 요약
Context
분산 시스템의 다단계 프로세스 수행 중 특정 단계 실패 시 이전 단계의 작업이 부분적으로 반영되는 데이터 불일치 발생. 기존에는 개발자가 직접 try-catch 블록 내에서 성공/실패 상태를 추적하고 수동으로 보상 트랜잭션을 구현해야 하는 운영 오버헤드 존재.
Technical Solution
- step.do() API 내 rollback 핸들러를 직접 정의하는 선언적 Saga Pattern 구조 채택
- Persisted Start Order를 기준으로 역순 실행하는 LIFO(Last-In-First-Out) 기반의 Unwinding 메커니즘 구현
- 외부 시스템의 부분적 성공 상태를 처리하기 위해 rollback 핸들러에 output 인자를 전달하고 undefined 케이스를 처리하는 유연한 인터페이스 설계
- Rollback 프로세스를 일반 Workflow Step과 동일한 Durable Machinery에 통합하여 Retry, Timeout, Lifecycle Event 적용
- Idempotency Key 활용을 강제하여 보상 트랜잭션의 중복 실행 방지 및 멱등성 보장
실천 포인트
1. 분산 트랜잭션 설계 시 각 step의 forward 작업과 1:1 매칭되는 보상 로직을 정의했는지 확인
2. Rollback 핸들러 내에서 외부 API 호출 시 Idempotency Key를 사용하여 중복 처리 가능성을 차단했는지 검토
3. Step 실패 시 output 값이 undefined일 수 있는 엣지 케이스에 대한 예외 처리 로직 포함 여부 확인
4. 보상 트랜잭션 자체의 실패 가능성을 고려하여 Retry 전략 및 최종 Error state 전이 경로 설계