슬슬의 공부

[MSA] EDA (Event Driven Architecture)

seulseul 2023. 1. 17. 23:22

목차

 

    1. MSA (MicroService Architecture)

    MSA (MicroService Architecture) 는 소프트웨어 개발 기법의 하나이다.

    MSA 는 하나의 큰 어플리케이션(Monolithic Application) 을 여러개의 작은 어플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍처이다.

    • 자체 프로세스에서 실행이 되고 느슨한 결합 (loosely coupled) 구조로 만들어진다.
    • 서비스별로 각기 다른 언어 사용 가능 / DB 사용 가능(각 서비스는 api로 추상화)

    2. EDA (Event Driven Architecture)

    • Event Driven Architecture 는 분산 시스템에서 비동기 통신 방식으로 이벤트를 발행/구독하는 아키텍처 이다.
    • 분산된 시스템간에 사용될 수 있는 아키텍처로, 이벤트를 생성(발행) 하고 발행된 이벤트를 수신자에게 전송하는 구조이다.
    • Queue처리 방식으로는 대표적으로 ActiveMQ, RabbitMQ , AWS SQS 가 있다.
    • Event Broker 로는 Apache Kafka 가 대중적으로 쓰인다.

    EDM : Event Driven Architecture를 적용한 MicroService

     

    3. 동기 통신, 비동기 통신 방식 비교

    [출처] https://www.msaschool.io/operation/integration/integration-three/

    요청·응답 모델(Request-Response) vs 발행 - 구독(Pub-Sub)

     

    동기 통신: (RESTful API를 비롯한) API를 통한 요청-응답 방식(peer to peer)

    1. 요청 체인이 길어지면 장애 전파 (Fault Spread) 의 위험성이 있다.
    2. 동기 통신이기 때문에 응답 서비스가 항상 떠있어야한다.
    3. 요청자는 응답자의 주소를 알고 있어야 통신이 가능하다.

     

    비동기 통신: Event Channel(Message Broker, Kafka)를 통한 pub/sub 방식

    1. 이벤트 게시자는 구독자의 주소를 몰라도 된다.
    2. 이벤트를 수신했는지 여부를 파악하지 않아도 되는 Non-Blocking 모델이다.
    3. 이벤트 수신자의 서비스가 항상 떠있지 않아도 게시자는 메시지를 발송할 수 있다.
    4. 이로 인해 장애가 격리 (Fault Isolation) 된다.
    5. 각 MicroService간 느슨한 결합도(Loosely Coupled) 유지 가능

    EDM (Event Driven MicroService) 에서 발생한 이벤트는 이벤트 스토어에 저장(이벤트 로그)

    Transaction Management : Retry, Rollback (보상 Transaction)