Event Driven Architecture란
MSA가 적용된 시스템을 보완하는 아키텍처로
Event Driven Architecture란 이벤트의 생산, 갑지, 소비 및 반응 또는 시스템 상태의 중대한 변화를 지원하는 소프트웨어 모델 또는 아키텍처의 패러다임이다.
분산 아키텍처 환경에서 이벤트를 생성하고 발행된 이벤트를 수신자에게 전송하는 구조로 수신자는 그 이벤트를 처리하는 방식으로, 상호 간 결합도를 낮추기 위해 비동기 방식으로 메시지를 전달하는 패턴이다.
각 마이크로서비스는 함께 작동하지만 서로 다른 비즈니스 로직을 적용하고 자체 출력 이벤트를 보낼 수 있으며
주로 Message Broker ( Kafka, RabbitMQ) 와 결합하여 구성된다.
이벤트는 형식을 제외하고 서로에 대해 알 필요는 없다.
Event 란
메시지나 알림을 뜻하는 이벤트가 아니다.
이벤트는 프로그램에 의해 감지되고 처리될 수 있는 동작이나 사건을 말한다.
Event Driven Architecture 필수 구성 요소
1. Even Generator (Publisher, Producer, Creater)
- 표준화된 형식의 이벤트를 생성하고 생성된 이벤트는 Event channel 로 전송한다.
2. Event Channel (Bus)
- 이벤트를 필요로 하는 시스템까지 발송하는 역할이다.
3. Event Processing Engine (Consumer, Processor)
- 수신한 이벤트를 식별/처리 하는 역할을 한다. 처리 결과에 따라 새로운 이벤트를 생성할 수 있는데
Consumer 는 이벤트의 송신자에 대한 정보를 알 필요가 없다.
Event Driven Architecture 동작 방식
1. Message (Publish / Subscribe)
- 이벤트가 생성되면 Subscrive(수신자) 에게 전달한다.
이벤트는 반복되어 전달되지 않으며, 수신자는 송신자의 정보를 알 필요 없다.
2. Event Source
- Event Processor 에게 이벤트를 전달하는 역할이다
Event Source 는 1개 이상일 수 있으며, 1개 이상의 Event Proceesor 에게 전달한다.
3. Event Processor
- 수신된 이벤트에 대한 여러 action 을 수행하는 역할이다.
4. Event Consumer
- 이벤트에 대한 처리를 한다. 실질적인 Biz Logic 을 수행한다.
Event Bus (Store)
Queue 처리 방식으로는 대표적으로 ActiveMQ, RabbitMQ 가 있으며 메시지 모델로는 Apache Kafka를 많이 활용한다.
Event Driven Architecture 장단점
장점
1. Loosely Coupling
- 분산 시스템간 느슨한 결합도를 제공한다.
2. 분산된 시스템간의 의존성 배제
- 약속된 메시지를 통해 통신하게 때문에 다른 시스템의 정보 알 필요가 없다.
3. 확장성, 탄력성 향상
단점
1. Broker Dependency
- 시스템 간 의존도 낮아지고 메시지 브로커에 대한 의존성 발생한다.
2. Transction 단위 분리
- 장애나 이슈 발생 시 Retry / Rollback 에 대한 고려가 필요하다.
3. 시스템 Flow 파악 어려움
4. 디버깅 어려움
Event Driven Architecture 선택 시 고려사항
마이크로 서비스 또는 분리된 구성요소를 사용하는 애플리케이션에는 적합하지만
이벤트 기반 아키텍처를 사용하기 위해선 다음과 같은 고려사항이 필요하다.
1. 지속 가능하고 안정적인 이벤트 소스여야 한다.
2. 시스템 성능이 전역 범위 또는 비탄력적 데이터베이스에 의존하지 않아야 된다.
3.코드 분석을 사용한 정적 추적은 지원하지 않는다.
4. 데이터의 중복 삭제 및 순서 지정 방법을 고려해야 한다.
참고
https://docs.microsoft.com/ko-kr/azure/architecture/guide/architecture-styles/event-driven
https://cloud.google.com/eventarc/docs/event-driven-architectures?hl=ko
https://softobiz.com/understanding-the-event-driven-architecture/
'공부' 카테고리의 다른 글
[window] WSL2 Ubuntu 구동 시 Error: 0x800701bc WSL 2 (0) | 2022.04.28 |
---|---|
메시지 브로커 / 이벤트 브로커 (0) | 2022.04.26 |
MSA 설계 시 참고 툴 (2) | 2022.04.21 |
[php] 출력문 비교 - echo, print, print_r, var_dump (0) | 2022.04.21 |
Reactive Programming (0) | 2022.04.12 |