본문 바로가기
개발/MSA

[MSA] 분산된 서비스 간의 WorkFlow(워크플로) 관리 - 오케스트레이션과 코레오그래피

by 궁즉변 변즉통 통즉구 2024. 9. 7.
반응형

분산된 서비스 환경에서 도메인에 특정한 작업을 수행하고, 그와 관련된 부수적인 문제를 처리하기 위해 둘 이상의 분산된 서비스를 하나의 WorkFlow(워크플로)로 조합하는 방법을 알아본다. WorkFlow관리 방법에는 크게 오케스트레이션(Orchestration) 패턴과 코레오그래피(Choreography) 패턴이 있다. MSA에서 보상트랜잭션 관리를 위한 Saga에서 얘기하는 오케스트레이션, 코레오그래피 패턴과 동일하다.

 

1. 오케스트레이션(Orchestration) 패턴

  • 오케스트레이터(중재자)를 활용해서 중앙에서 워크플로 상태, 선택적 로직, 에러 처리, 알림 등 워크플로를 관리하는 방법
  • MSA에서는 워크플로당 오케스트레이터를 하나씩 두는 것이 일반적 임
  • 경계조건과 에러 조건 등이 복잡한 워크플로 모델링 시 적합

출처: 소프트웨어 아키텍처 The Hard Parts

장점 단점
 워크플로 중앙화 - 복잡도가 클수록 상태와 동작을 중앙에서 통합 관리하는 것이 좋음  응답성 - 오케스트레이터가 병목 지점이 될 수 있음
 에러 처리 - 에러 처리를 위한 별도 통신 경로 불필요, 오케스트레이터에서 관리 함  내고장성 - 오케스트레이터가 단일 장애점이 될 수 있음
 복원성 - 상태 모니터링, 재시도 로직 등 처리 가능  확장성 - 코레오그래피 방식보다 조정점이 많아서 확장성 떨어짐
 상태관리 용이 - 상태 중앙 관리  서비스 커플링 - 오케스트레이터와 도메인 서비스간의 커플링 증가

 

2. 코레오그래피(Choreography) 패턴

  • 중앙 중재자가 없는 통신 스타일
  • 정상적인 수행에서는 단순한 워크프로를 가지지만 에러 처리, 조건 처리등으로 복잡도 급격히 증가할 수 있음
  • 워크플로 상태 관장하는 오너가 없음
  • 높은 응답성, 확장성이 필요하고, 에러 발생율이 낮고 에러 시나리오가 복잡하지 않은 경우 적합

워크플로 관리를 위한 중재자가 없음(출처: 소프트웨어 아키텍처 The Hard Parts)

장점 단점
 응답성 - 한 곳에 부하가 몰리지 않고 병렬화 가능  분산 워크플로 - 에러 조건, 경계 조건 관리 어려움, 각 도메인 서비스가 워크플로를 더 많이 자세히 알고 있어야 함
 확장성 - 중앙 중재자 없어 독립적 확장 가능  상태관리 어려움 - 중앙 상태관리가 없어 상태관리 어려움
 내고장성 - 단일 중재자가 없어 내고장성 높음  에러 처리 복잡도 증가 - 에러 처리에 따른 조건 및 별도 통신 경로 필요
 서비스 디커플링 가능  복원성 - 중재자가 없어 재시도 같은 복원 행위 불가

 

코레오그래피에서 WorkFlow(워크플로) 상태 관리하는 방법

1. 프론트 컨트롤러(Front Controller)

  • 워크플로 책임 체인에서 가장 먼저 호출된 서비스가 상태를 관리하는 방법
    장점 단점
      코레오그래피 내부에서 의사(pseudo) 오케스트레이터 생성 - 가장 먼저 호출되는 서비스가 어쨌든 중재자를 역할을 함  도메인 서비스에 워크플로 상태가 추가 됨 - 도메인 서비스 복잡해짐
     상태 조회 용이 - 중재자역할의 서비스를 통해서 조회 가능  통신 오버헤드 증가
       서비스간 성능/확장성 나빠짐

2. 무상태 코레오그래피

  • 각 서비스를 조회해서 실시간 스냅샷을 구축함으로써 워크플로 전이 상태를 유지하지 않는 방법
    장점 단점
     성능/확장성 좋음 - 스냅샷 방식으로 의존성 없음  워크플로 상태가 그때그때 조회되는 상황에 좌우 됨
     완전한 디커플링 가능  워크플로가 복잡해지면 전체 복잡도 증가

 

3. 스탬프(Stamp) 커플링

  • 서비스 간에 전송되는 메시지 계약에 워크플로 상태를 끼워 넣는 방법
  • 각 서비스는 자신의 상태를 업데이트 후, 책임 체인의 다음 서비스 호출 시 상태정보 함께 전달
    장점 단점
     각 도메인 서비스가 상태 오너에 대한 별도 조회없이 워크플로 상태 전달 가능  워크플로 상태를 수용하는 만큼 계약이 더 커짐
     프론트 컨트롤러 불필요  적시 상태 쿼리는 안됨

 

 

 

 

반응형

댓글