분산 서버 간 동기화 전략: DB, Redis, Actor 비교
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
분산 시스템, DevOps
대상자
분산 시스템 개발자, Spring Boot 및 Apache Pekko 사용자
핵심 요약
- Actor 기반 동기화는 외부 인프라 없이 고확장성 및 저복잡성의 동기화를 가능하게 함
- DB 락은 높은 DB 부하와 경쟁 조건으로 인한 성능 저하 발생
- Redis 락은 중간 수준의 오류 처리 복잡성과 인프라 의존성 존재
- Actor 모델은
spring-boot-starter-actor
를 통해 단일 액터 인스턴스로 요청을 시퀀셜 처리
섹션별 세부 요약
- 동기화 도전 과제
- 분산 시스템에서 경쟁 조건 및 데이터 불일치 방지를 위한 동기화 필요
- 사용자 요청이 클러스터 내 임의 인스턴스에 도달 가능
- 일반적인 해결책: 비관적 락(DB), 분산 락(Redis)
- DB 락 활용
SELECT ... FOR UPDATE
또는@Lock(PESSIMISTIC_WRITE)
사용- DB 연결 고정 및 경쟁 조건 증가로 인한 성능 저하
- 고부하 DB 환경에서 병목 현상 발생
- Redis 기반 분산 락
- Redis 인프라 필요,
Redlock
알고리즘 활용 - 재시도 로직 및 백오프 처리 필수
- 높은 로드 시 처리량 저하 및 복잡성 증가
- Actor 기반 동기화
spring-boot-starter-actor
라이브러리 활용, Apache Pekko 클러스터 셰딩 통합- 단일 액터 인스턴스 생성, 동일 ID의 요청을 시퀀셜 처리
- 외부 인프라 없이 고확장성 및 저복잡성 달성
- 성능 비교 결과
- 모든 방법에서 최종 카운터 값 9,000 달성
- DB 락: 고부하 DB, Redis 락: 재시도 로직 필요, Actor: 고처리량, 간단한 구현
- Actor 모델은 경쟁 조건 없이 정확한 동기화 보장
- 방법론 비교
| 기능 | DB 락 | Redis 락 | Actor |
|---|---|---|---|
| 외부 인프라 필요 | ✅ | ✅ | ❌ |
| 락 관리 복잡성 | 높음 | 중간 | 낮음 |
| 오류 처리 필요성 | ❌ | ✅ | ❌ |
| 고부하 성능 | 저하 | 중간 | 안정적 |
| 코드 복잡도 | 낮음 | 중간 | 낮음 |
| 수평 확장성 | 제한 | 좋음 | 우수 |
결론
- *Actor 모델은 분산 Spring Boot 시스템에서 저지연 및 운영 부담 없이 높은 확장성과 정확한 동기화를 달성할 수 있는 최적의 선택이다.
spring-boot-starter-actor
라이브러리를 활용하여 단일 액터 인스턴스로 요청을 시퀀셜 처리함으로써, 락 관리 없이** 병목 현상을 방지할 수 있다. GitHub에서 제공하는 예제 및 벤치마크 스크립트를 통해 실무 적용 가능성을 검증할 수 있다.