안녕하세요 서후아빠입니다. ^_^
이번 세션은 MSA(MicroService Architecture)와 관계된 EDA에 대해서 업무적으로 필요한 최소한의 개념에 대해서 간단히 정리해 보았습니다.
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
'Business Data' 카테고리의 다른 글
[업무지식] 애자일(Agile), 스크럼(Scrum) 이해하기 - 1편 (0) | 2023.04.28 |
---|---|
[업무지식] 프로젝트 수행에 필요한 8가지 관리 포인트 (0) | 2023.04.27 |
[업무지식] MSA (Micro Service Architecture) 이해하기 (0) | 2023.04.12 |
[업무지식] 신뢰성 지표 (MTTF, MTTR, MTBF) 및 SLA 이해하기 (0) | 2023.04.07 |
[업무지식] 블록체인(BlockChain) 개념 이해하기 (0) | 2023.04.04 |