분산 시스템 설계: Saga와 트레이드오프
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
DevOps
대상자
분산 시스템을 설계하거나 개선하는 개발자, 기술 리더, DevOps 엔지니어
난이도: 중간
핵심 요약
- Communication은 동기와 비동기 방식으로 나뉘며, 시스템의 가용성과 결합도에 영향을 줌.
- Coordination의 두 가지 주요 패턴은 Orchestration과 Choreography로, 각각 단일 통제자와 이벤트 기반의 자율적 서비스에 해당함.
- Consistency는 Atomic과 Eventual로 나뉘며, 트랜잭션의 일관성과 시간적 지연을 고려해야 함.
섹션별 세부 요약
1. 서비스 상호작용의 세 가지 힘
- 서비스 간 상호작용에 영향을 주는 세 가지 요소는 communication, coordination, consistency이다.
- 이 요소들은 서로 다른 트레이드오프를 가지며, 시스템 설계에 큰 영향을 미친다.
2. Communication
- 동기 통신은 REST 또는 gRPC와 같은 프로토콜에서 사용되며, 요청자는 응답을 기다린다.
- 비동기 통신은 메시지 큐(Kafka, RabbitMQ)를 사용하며, 요청자는 즉시 응답을 받지 않고 작업을 계속한다.
- 동기 통신은 즉각적인 피드백을 제공하지만, 가용성이 낮고 결합도가 높다.
- 비동기 통신은 가용성이 높고 결합도가 낮지만, 즉각적인 피드백이 없고 일관성이 시간에 따라 이루어진다.
3. Coordination
- Orchestration은 중앙 통제자(orchestrator)가 작업을 조정하며, 각 서비스에 명령을 내린다.
- Choreography는 중앙 통제자가 없고, 각 서비스가 이벤트에 반응하며 작업을 수행한다.
- Orchestration은 복잡한 흐름을 쉽게 관리할 수 있지만, 병렬성이 낮고 결합도가 높다.
- Choreography는 결합도가 낮고 유연하지만, 상태 관리가 어려우며 복잡성이 높다.
4. Consistency
- Atomic 트랜잭션은 모든 작업이 성공해야 하며, 전통적인 데이터베이스 트랜잭션에 해당한다.
- Eventual 트랜잭션은 일관성이 시간에 따라 이루어지며, 분산 시스템에서 흔히 사용된다.
- Atomic 트랜잭션은 동기 통신과 orchestration에 의존하지만, eventual 트랜잭션은 비동기 통신과 choreography에 적합하다.
5. Saga 패턴
- Saga는 분산 트랜잭션을 관리하는 패턴으로, Epic Saga, Phone Tag Saga, Fairy Tale Saga 등 여러 유형이 있다.
- 각 패턴은 특정한 트레이드오프와 설계 결정을 반영하며, 주문 처리 흐름과 같은 실제 시나리오에 적용된다.
6. 결론
- 서비스 간의 통신, 조정, 일관성은 서로 트레이드오프가 있으며, 시스템 설계 시에 이러한 요소들을 고려해야 한다.
- 동기 통신은 즉각적인 피드백이 필요할 때 적합하고, 비동기 통신은 가용성과 병렬성에 유리하다.
- Orchestration은 단일 통제자가 흐름을 관리하므로 복잡한 작업에 적합하고, Choreography는 서비스 간 결합도가 낮은 유연한 시스템에 적합하다.
- 분산 시스템 설계 시, 각 패턴의 장단점을 고려해 적절한 트레이드오프를 선택해야 한다.
결론
- 분산 시스템 설계 시 Communication, Coordination, Consistency의 트레이드오프를 고려해야 하며, Saga 패턴을 활용해 복잡한 작업 흐름을 관리할 수 있다.
- 동기 통신은 즉각적인 피드백이 필요한 상황에 적합하고, 비동기 통신은 가용성과 확장성에 유리하다.
- Orchestration은 단일 통제자가 흐름을 관리하므로 복잡한 작업에 적합하고, Choreography는 서비스 간 결합도가 낮은 유연한 시스템에 적합하다.
- 각 패턴의 장단점을 고려해 적절한 트레이드오프를 선택해야 한다.