CQRS 응용 프로그램에서 Event Sourcing을 사용하지 않아서 읽기 저장소를 업데이트 할 수있는 간단한 이벤트 로그를 소개했습니다.이벤트 소싱이없는 CQRS : 이벤트 로그 오류 처리
- 쓰기 모델 상태 업데이트, 예를 들면 :
이
내 응용 프로그램에 대한 상태 변경은 두 가지 작업으로 구성되어 있음을 의미한다 SQL INSERT - 삽입 이벤트로 이벤트는
모두 작업이 하나 개의 원자 작업으로 발생해야 쓰기 로그인합니다. 불행히도 이벤트 로그는 다른 데이터베이스 내에 있으므로 분산 트랜잭션에 대해 생각해야합니다.
대부분의 CQRS 샘플은 사가 패턴을 처리하며 이벤트 소싱을 사용하는 것으로 보입니다. 따라서 이벤트가 훨씬 간단 해집니다.
내 문제는 '완료되었습니다'상태 변경입니다. 예 :
SQLTransaction.Commit(); // if this fails, all is fine. Nothing to revert
try
{
EventLog.Insert(event);
}
catch(Exception ex)
{
// Try to undo the SQL stuff.
CompensatingSQLTransaction().Commit();
// uh-oh! The commit fails!!
// What now? Do a Retry?
}
도울 수있는 개념이 있습니다
- SQL 삽입
- 이벤트 로그 삽입 나는 보상 SQL 작업 (의사 코드)와 함께 올 수
실패 성공 나 밖으로? 내가 아웃 - 오브 - 동기화 읽기 데이터베이스를 방지하기 위해 다음과 같은 시나리오에 대해 생각 : 읽기 측 복제가 처리되지 않은 이벤트를 감지하면
- 각 이벤트는 일련 번호
- 있다 (예는, 40 수신 42), 이벤트 로그 41에서 이벤트 41을 조회합니다.
- 이벤트 41을 사용할 수없는 경우 시스템은 누군가가 자세히 살펴볼 때까지 이벤트 복제를 중지합니다.
이 작업은 수동 유지 관리가 필요하지만 읽기 db의 동기화가 끊어지는 것을 방지합니다.
실생활 경험이 있습니까?
분산 시스템이란? 얼마나 탄력/확장 성을 원하십니까? –
한 달에 약 10 억 또는 2,000 만 개의 이벤트를 처리 할 수 있어야합니다. 버스 시스템에 연결된 명령 및/또는 이벤트를 처리하는 여러 노드를 활용할 수 있어야합니다. 따라서 이벤트 복제는 여러 노드에서 발생할 수 있습니다. – mbnx