본문 바로가기

Business Data

[업무지식] EDA (Event Driven Architecture) 이해하기

반응형

안녕하세요 서후아빠입니다. ^_^

이번 세션은 MSA(MicroService Architecture)와 관계된 EDA에 대해서 업무적으로 필요한 최소한의 개념에 대해서 간단히 정리해 보았습니다. 


Event Driven (예전부터 존재한 용어, 최근 재주목)

[Event Driven]

A서비스에서 B서비스가 관심을 가질 수 있는 일부 작업을 수행할 때 A서비스는 이벤트(작업의 기록) 생성

B 서비스는 A서비스의 이벤트들을 전달받고 필요시 자체 작업을 수행

REST와는 달리 느슨한 구조로 요청을 생성하는 A 서비스는 요청을 소비하는 B 서비스의 세부 정보를 알 필요가 없음

Event Driven 다이어그램은 큰 틀에서 비교하면 "https://sh-t.tistory.com/122"의 MQ와 동일한 구조입니다.

EDA (Event Driven Architecture)  정의

분산된 시스템 간에 생성된 이벤트를 필요로하는 수신자에게 전송하고, 수신자는 이벤트를 처리하는 형태의 아키텍쳐

  - Event Driven Pattern : 특정 행동이 자동으로/순서에 따라 발생하는 것이 아닌 어떤 일에 대한 반응으로 동작

  - IO Event : 컴퓨터 회로를 구동시키기 위해 발생하는 일  (ex : 마우스 클릭, 키보드 타이핑, 모바일 터치 등)

  - IOT 기기 등의 센서로부터 유입되는 데이터 스트리밍 기반의 동작

  - 시스템의 내/외부에서 발생한 주목할 만한 상태의 변화

프로그래밍 관점뿐만 아니라 다방면에서 적용 가능한 아키텍처

복잡성/역동성에 가장 효율적으로 대응 가능한 아키텍처

이벤트를 통해 데이터간 연결이 생성된다는 점이 가장 중요하므로 EDA에는 고정된 구조가 없음

EDM (Event Driven Microservice)  : MSA가 적용된 시스템에서 이벤트 발생시 해당 이벤트 로그를 보관(ex : github)하고 이를 기반으로 동작하며, 비동기 통신을 통해 시스템 내 통합(integration)을 수행하는 아키텍처 
  - MSA 내부통신 방식 : REST(동기), message queue(비동기, 추천)
  - 신뢰성 문제점 : Backing Service(MQ, Kafka 등) 도입 필요
    1) 메시지 여러번 전달로 인한 데이터 정합성 문제(멱등설계 or exactly once) 
    2) 스케일링된 동일 서비스에서 하나의 메시지를 경쟁적으로 구독하는 구조

EDA  구성요소 ("Event Driven" 이미지 참조)

Event Generator (producer, publisher, creater, 발행자) : 표준화된 형식의 이벤트 생성(발행) 

Event Bus (channel) : 이벤트를 필요로하는 시스템까지 발송

Event Processing Engine (consumer, subscriber, processor, 구독자) : 수신 이벤트를 식별/처리, 비지니스 로직 수행

  - 수신 이벤트를 처리하는 방법 

     1) Simple Event Processing : 각 이벤트가 매핑된 액션으로 처리, 실시간 처리 시, 시간/비용 손실 적음

     2) Enent Stream Processing : 이벤트 우선순위로 처리, 실시간 처리 시 (ex: 기업에서 신속한 의사 결정)

     3) Complex Event Processing : 일상적인 이벤트 패턴 감지하여 더 복잡한 이벤트 추론 (ex : 주식 등락 통한 투자 적기)

     4) Online Event Processing : 비동기 분산 이벤트 로그를 사용하여 복잡한 이벤트를 처리하며 지속적으로 데이터 관리,  높은 확정성과 일관성, 처리 시간 보장 안됨

EDA  특징

Multicast 통신 : 한개의 이벤트 publisher는 여러 개의 subscriber에게 이벤트 전달 가능

실시간 전송 : 실시간 발생하는 이벤트 처리 가능

비동기 통신 : publisher는 subscriber의 처리 결과에 대해서 대기 불필요

세밀한 통신 : 한 덩어리의 큰 이벤트(데이터)보다 작고 자세한 이벤트로 통신 발생

이벤트 온톨로지 : 이벤트들은 확실하게 구분, 이벤트에 상응하는 subscriber에게 전달

자유로운 배포 : 느슨할 결합도 제공하므로 새로운 서비스의 배포 자유로움

EDA  장단점

구분 내용
장점 시스템간 느슨한 결합 가능하므로 분산시스템에서 시스템간 의존성 배제 가능
다른 시스템의 정보 알 필요 없음
마이크로 서비스 단위로 시스템 분리 등 확장성, 탄력성 고려하기 쉬움
단점 Event Bus에 대한 의존성, Event Bus 장애 시 전체 장애로 이어질 수 있음
Transaction 단위가 격리되기 때문에 서비스 장애 발생시 retry/rollback 고려
시스템 전체 Flow 파악의 어려움 : 명확한 Flow를 보기 위해서 시스템 모니터링 필요
디버깅 어려움

정확하지 않지만 대략적으로 위와 같은 트랜잭션 처리 과정을 가정한 경우
  - 결재까지 완료하고, 음료를 생성하려는데 재고가 부족(오류 발생)하면 환불 및 주문 폐기(rollback) 과정이 발생
  - 내부 통신은 파악이 어렵고, 그로 인해 디버깅도 어려울 수 있습니다.

참고 URL

https://medium.com/dtevangelist/event-driven-microservice-%EB%9E%80-54b4eaf7cc4a

반응형