2023. 2. 22. 20:40ㆍSpring Micro Services/event driven architecture
간단한 주문서비스를 Axon Framwork + Axon Server + Saga pattern을 이용하여서 구현하도록 해보고자 한다. 구현에 앞서 Axon Framwork + Axon Server + Saga pattern 에 대해 알아보고 구현을 해보자.
Axon Framework + Axon Server
Axon Server는 필수 사항은 아니다. Axon Server 대신에 Kafka도 많이 사용하는듯 하다. 예제도 Axon Framework + Kafka로 구현한 예제도 있는 것을 보았다.
Axons Server vs Kafka의 차이는 다음과 같다.
https://www.axoniq.io/blog/axon-and-kafka 사이트에서 정의한 내용은 아래와 같다.
Kafka - Event Streaming, not Event Sourcing
EventSouring
이벤트 소싱은 애플리케이션의 상태가 발생한 일련의 이벤트에서 파생되는 디자인 패턴입니다. 이 패턴에서는 엔터티의 현재 상태를 저장하는 대신 엔터티에 대한 모든변경 사항이 일련의 이벤트로 기록됩니다.
이러한 이벤트는 영구 데이터 저장소에 저장되며 언제든지 엔터티 상태를 재구성하는 데 사용할 수 있습니다.
이벤트 소싱은 발생한 모든 변경 사항에 대한 전체 기록을 제공하므로 변경 사항의 감사 및 추적 가능성이 중요한 복잡한 비즈니스 애플리케이션에서 자주 사용됩니다.
EventStreaming
이벤트 스트리밍은 이벤트 스트림을 실시간으로 지속적으로 처리하는 메커니즘입니다. 여기에는 하나 이상의 소스에서 이벤트 스트림을 캡처하고 이벤트를 처리 및 보강한다음 결과를 데이터 저장소에 기록하거나 추가 작업을 트리거하는 작업이 포함됩니다.
이벤트 스트리밍은 실시간 분석, 사기 탐지 및 IoT 데이터 처리와 같이 실시간 처리가 필요한 시나리오에서 자주 사용됩니다.
Saga 패턴
Saga 패턴은 long-lived 트랜잭션을 관리하는데 사용되는 디자인 패터입니다. long-lived 트랜잭션은 여러 단계가 포함되며 각 단계는 시스템의 다른 서비스 또는 구성 요소에 의해 수행됩니다.
Saga 패턴의 사용하는 주된 목적은 부분적인 실패에도 불구하고 트랜잭션이 안정적이고 일관되게 실행되도록 하는 것입니다.
Saga 패턴은 일련의 로컬 트랜잭션을 사용하여 트랜잭션 관리를 제공합니다. 로컬 트랜잭션은 Saga 참가자가 수행하는 원자성 작업입니다. 각 로컬 트랜잭션은 데이터베이스를 업데이트하고 메시지 또는 이벤트를 게시하여 Saga에서 다음 로컬 트랜잭션을 트리거합니다. 로컬 트랜잭션이 실패하면 Saga는 이전 로컬 트랜잭션에 의해 변경된 내용을 실행 취소하는 일련의 보상 트랜잭션을 실행합니다.
Saga Orchestration
오케스트레이션은 중앙 집중식 컨트롤러가 Saga 참가자에게 실행할 로컬 트랜잭션을 알려주는 Saga 조정 방법입니다. Saga 오케스트레이터는 모든 트랜잭션을 처리하고 이벤트에 따라 수행할 작업을 참가자에게 알려줍니다. 오케스트레이터는 Saga 요청을 실행하고, 각 작업의 상태를 저장 및 해석하며, 보상 트랜잭션을 사용하여 오류 복구를 처리합니다.
참고사이트
https://learn.microsoft.com/ko-kr/azure/architecture/reference-architectures/saga/saga
'Spring Micro Services > event driven architecture' 카테고리의 다른 글
주문 서비스 예제 (0) | 2023.02.22 |
---|