위의 질문은 아마도 몇 가지 '무엇입니까?'를 제기하지만, 설명하려고 노력할 것입니다.
이벤트 소싱 (DDD- 개념)과 함께 기본적으로 Saga-pattern ( http://www.rgoarchitects.com/Files/SOAPatterns/Saga.pdf ) 과 같은 두 가지 관련 개념을 설명하려고합니다. : http://en.wikipedia.org/wiki/Domain-driven_design )
함께 포장하는 좋은 게시물 : https://blog.jonathanoliver.com/cqrs-sagas-with-event-sourcing-part-ii-of-ii/
나는 잠시 후에 질문에 도달하고 있지만, 내가 이해하는 것을 먼저 요약하려고 노력해야한다고 생각합니다 (잘못 될 수 있으므로 그럴 경우 수정하십시오). 질문으로 시작 :
- Saga 패턴은 특정 활동 (최종 사용자, 자동화 된 등 본질적으로 데이터를 변경하려는 모든 것)이 해당 활동을 비즈니스 활동으로 나누고 각 활동을 메시지로 메시지 버스로 보내는 일종의 브로커입니다. 차례로 관리 할 각 집계 루트로 보냅니다.
- 이러한 집계 루트는 완전히 자율적으로 작동 할 수 있습니다 (문제의 분리, 확장 성 등).
- Saga 인스턴스 자체에는 비즈니스 로직이 포함되어 있지 않습니다. 비즈니스 로직은 활동을 보내는 총계 루트에 포함되어 있습니다. Saga에 포함 된 유일한 'logic'은 '프로세스'-logic (주로 Statemachine으로 구현 됨)으로, 수신 된 작업 (및 후속 이벤트)에 따라 수행 할 작업 (예 : 전송할 활동)을 결정합니다.
- 사가 패턴은 일종의 분산 트랜잭션 패턴을 구현합니다. 즉, 집계 루트 중 하나 (서로 다른 존재를 몰라도 자율적으로 다시 작동)가 실패하면 전체 조치를 롤백해야 할 수도 있습니다.
- 이것은 활동 보고서가 완료되면 사가에게 모든 집계 루트를 갖음으로써 구현됩니다. (오류뿐만 아니라 성공한 경우)
- 모든 집계 루트가 성공을 반환하는 경우 Saga가 다음에 수행 할 작업을 결정하거나 완료 한 경우 내부 상태 시스템
- 실패시, Saga는 마지막 조치에 참여한 모든 집계 루트에 소위 보상 조치, 즉 각 집계 루트가 수행 한 마지막 조치를 실행 취소하는 조치를 발행합니다.
- 액션이 "플러스 1 투표"인 경우 단순히 '마이너스 1 투표'를 수행하는 것일 수도 있지만 블로그 게시물을 이전 버전으로 복원하는 것처럼 더 복잡 할 수 있습니다.
- 이벤트 소싱 (두 가지를 결합한 블로그 게시물 참조)은 각 집계 루트가 중앙 집중식 이벤트 저장소에 수행하는 각 활동의 결과를 외부에 저장하는 것을 목표로합니다 (이 컨텍스트에서는 변경을 '이벤트'라고 함).
- 이 이벤트 저장소는 '진리의 단일 버전'이며 저장된 이벤트를 본질적으로 반복하여 모든 엔티티의 상태를 재생하는 데 사용할 수 있습니다 (기본적으로 이벤트 로그처럼).
- 두 가지를 결합하면 (즉, 집합 루트가 이벤트 소싱을 사용하여 Saga에 다시보고하기 전에 변경 사항을 외부에서 저장하도록 허용) 많은 가능성이 가능합니다.
한 번에 파악하기가 많기 때문에 어깨에서 이것을 벗겨야한다고 생각했습니다. 이 맥락 / 마인드가 주어지면 (다시 잘못하면 정정하십시오)
질문 : 집계 루트가 보상 조치를 수신하고 해당 집계 루트가 이벤트 소싱을 사용하여 상태 변경을 아웃소싱 한 경우 모든 상황에서 보상 조치가 이벤트 저장소의 마지막 이벤트를 삭제하지는 않습니다. 주어진 집계 루트? (지속 구현으로 인해 삭제가 가능하다고 가정)
그것은 나에게 많은 의미가 있으며 (이 조합의 또 다른 큰 이점이 될 것입니다), 내가 말했듯 이이 개념에 대한 잘못 / 불완전한 이해에 근거하여 이러한 가정을 할 수 있습니다.
나는 이것이 오래 걸리지 않기를 바랍니다.
감사.