요약
- 배치 시스템 구현
본문
스키마
- Job
- status: SUCCESS, PENDING, FAILED
- success_time
- fail_time
- batch_id: 묶인 batch_id
- max_retry_cnt: 최대 재시도 횟수
- Batch
- status: PENDING, SUCCESS, PROCESSING, S3_UPLOADED, RESULT_READY
- 각 단계별 timestamp
- batch_id: row 식별자 말고 관리할 수 있는 batch_id
- fail_reason
시스템 구성 요소
- 일정시간에 한번 PENDING된 JOB을 하나의 Batch로 묶는 스케줄러
- 한번에 돌때 지금 까지 쌓인 PENDING된 Job들을 batch 단위로 묶어서 실행
- 배치 처리는 다양한 것들을 포함 할 수 있음
- job들을 하나의 batch로 묶고(DB)
- 어떤 데이터들을 전처리/ 외부 API 호출
- 각 단계는 실패할 가능성이 있고, 각 단계가 중요하다면 큐로 처리하거나,
- 배치에는 반드시 job_id들이 포함되어야 함
- 생성된 Batch를 처리하는 외부 워커
- 처리된 결과가 다시 서버에 알려져야함
- callback으로 서버에 알리거나/외부 저장소에 저장
- 서버에 알리는 구현의 경우 작업은 완료되었지만 서버 상태에 따라 알림을 못받는 경우가 생김
- 외부 저장소의 저장 구현의 경우도 동일하게 처리는 완료했지만 저장소 저장에 실패하는 케이스가 생길 수 있음
- 큐에 넣어서 재처리하게끔 할 수 있음(하지만 여전히 처리 완료후 실패하는 케이스가 있을 수 있음)
- 외부 워커는 job_id 별로 성공 및 실패 결과를 반환해야함
- TIMEOUT 처리를 위한 스케줄러
- 처리 실패 후 서버에서 알림을 못 받는 케이스를 위한 처리를 위해 TIMEOUT을 확인/결과 확인 스케줄러를 두어 처리 기간이 오래된 배치들을 TIMEOUT 처리해줌