MSA/Event Driven Architecture

[EDA] 장단점과 적용 사례

개발자 이우진 2024. 6. 29. 23:04

개요

Event Driven Architecture는 MSA에서 Producer가 여러 Consumer 서비스를 직접 호출해야 했던 구조에서 Event Broker 하나에만 이벤트를 전송하면 되는 구조로 개선했다는 것이 가장 큰 특징이다. 이로 인해 서비스가 느슨하게 결합(Loosely Coupled)되고, 결합도가 낮아진다. 다음 문단부터 정리할 EDA의 장단점은 이러한 EDA의 특징 때문에 생기는 것이라고 이해할 수 있다.

An event-driven architecture for an e-commerce site (AWS, 2020)

장점

  • 확장성
    • 시스템에 부하가 증가할 때 Producer와 Consumer를 scale out(수평적 확장) 할 수 있다.
    • Producer가 Counsumer를 직접 호출하지 않기 때문에 시스템을 크게 재설계하지 않아도 된다
  • 유연성
    • 새로운 이벤트나 처리 로직을 추가할 때 기존 컴포넌트에 미치는 영향을 최소화하면서 구현할 수 있다
      • => Loosely Coupled (느슨한 결합) 기반
      • Producer에 Consumer를 호출하는 코드를 추가하지 않아도 된다
  • 복원력
    • 장애 격리
      • Consumer를 직접 호출하는 코드가 없기 때문
      • 한 서비스에서 장애가 발생했을 때 전체 시스템에 미치는 영향을 최소화 할 수 있다
    • 빠른 복구
      • 시스템 다운타임 최소화
      • 전체 시스템 가용성에 영향을 주지 않고도 시스템의 장애 조치 및 업그레이드 가능
        • ex) 이커머스 서비스에서 광고 서비스에 장애가 발생했을 때 주문 서비스는 정상적으로 동작하는 시스템
    • => 가용성 극대화

단점

EDA의 장점과 trade-off 관계

  • 복잡성
    • 비동기적 특성 및 분산으로 인해 구조적, 관리적 복잡성을 띄게 됨
      • 책임, 역할 분리된 서비스가 loosely coupled하게 연결되었기 때문
    • 시스템의 관리 포인트, 디버깅, 모니터링 비용이 동기식 시스템보다 높아진다
    • 분산 아키텍처가 가지는 관리의 어려움, 설계 및 구현 비용 수반
  • 데이터 일관성
    • 여러 서비스에서 데이터 일관성을 보장해야 함
      • 특정 서비스에서는 데이터가 변경되지 않는 문제
    • 이벤트가 순서대로 처리되지 않을 수 있기 때문에 매우 어려운 과제
    • ACID 속성을 EDA에서는 보장할 수 없음
      • 데이터 원자성 등
    •