분산형 스케줄링 서비스 설계
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
DevOps
대상자
소프트웨어 엔지니어, DevOps 프로페셔널, 자동화 플랫폼 개발자
난이도: 중급 이상 (분산 시스템 설계, 고가용성 아키텍처 이해 필요)
핵심 요약
- 고가용성(High Availability): Redis 분산락과 MongoDB 복제 세트를 통해 단일 고장 지점 제거
- 수평 확장성(Horizontal Scalability): 노드 추가로 처리량 증가,
NodeJS - TypeScript
비동기 I/O 활용 - 일관성(Consistency):
Redis Redlock 알고리즘
과MongoDB 강력한 일관성 모델
결합
섹션별 세부 요약
1. 고가용성 문제 해결
- 복제 세트 기반 MongoDB로 데이터 복제 및 고가용성 보장
- Redis 분산락으로 중복 작업 방지
- 노드 고장 시 다른 노드 자동 대체
2. 기술 스택 구성
- MongoDB: 유연한 스키마, 복제 세트 지원
- Redis: 분산락, 가벼운 큐 처리
- NodeJS - TypeScript: 비동기 I/O, 타입 안전성 제공
3. 시스템 레이어 구조
- 스케줄링 레이어: 리더 선출(Leader Election)으로 스케줄링 결정
- 실행 레이어: 워커 노드가 잠금 획득 후 작업 실행
- 회복 레이어: 일일 검증 스윕, 지수 백오프 재시도, 수동 오버라이드
4. 핵심 설계 패턴
- 리더-팔로워 모델: ZooKeeper/etcd 또는 Redis 기반 리더 선출
- 최종 일관성(Eventual Consistency): 장애 발생 시 일관성 복구
- 인터페이스 정의:
IDistributedCronService
를 통한 컴포넌트 간 계약 정의
5. 작업 처리 흐름
- 시간 창 검사(Hourly Window Check): MongoDB에서 다음 1시간 내 작업 추출
- 작업 실행: Redis 잠금 획득 후
postToSocialMedia()
호출 - 재시도 메커니즘: 3회 즉시 재시도, 1s/5s/10s 지수 백오프
결론
- 기존 서비스 활용: Redis, MongoDB 등 기존 서비스를 사용해 복잡한 조정 로직 구현
- 최종 일관성 수용: 완전한 일관성 필요 시점이 아닌 경우 최종 일관성 전략 적용
- 장애 대비 설계: 모든 레이어(네트워크, 노드, 외부 API)에서 실패 대비 전략 고려
- 확장성 보장: 워커 노드 수평 확장으로 수백만 개 스케줄링 처리 가능