나는 최근 에 이벤트 소싱 에 대해 읽고 있었고 그 뒤에있는 아이디어를 정말로 좋아하지만 다음과 같은 문제가 있습니다.
명령 (예 : 웹 서버)을 수신하고 결과적으로 이벤트를 생성하여 중앙 저장소에 저장하는 N 개의 동시 프로세스가 있다고 가정하십시오. 또한 상점에서 이벤트를 순차적으로 적용하여 모든 임시 애플리케이션 상태가 개별 프로세스의 메모리에 유지된다고 가정하십시오.
이제 다음과 같은 비즈니스 규칙이 있다고 가정하겠습니다. 각 개별 사용자마다 고유 한 사용자 이름이 있어야합니다.
두 프로세스가 동일한 사용자 이름 X에 대한 사용자 등록 명령을 수신하면 둘 다 X가 사용자 이름 목록에 없는지 확인하고 규칙은 두 프로세스 모두에 대해 유효성을 검증하고 둘 다 "사용자 이름 X를 가진 새 사용자"이벤트를 상점에 저장합니다. .
비즈니스 규칙을 위반하여 (일명 사용자 이름이 동일한 두 명의 개별 사용자가 있음) 이제 일관성이없는 글로벌 상태가되었습니다.
기존의 N 서버 <-> 1 RDBMS 스타일 시스템에서 데이터베이스는 이러한 불일치를 방지하는 데 도움이되는 중앙 동기화 지점으로 사용됩니다.
제 질문은 이벤트 소스 시스템이 일반적으로이 문제에 어떻게 접근합니까? 그들은 단순히 모든 명령을 순차적으로 처리합니까 (예 : 상점에 쓸 수있는 프로세스의 양을 1로 제한)?