작동 여부를 확인하고 계획을 검토합니다.이벤트 소싱이없는 cqrs 및 LMAX 스타일 단일 스레드 설계 검토
임 RDBMS를 사용하고 이벤트 소싱없이 CQRS를 사용할 계획입니다. 나는 이벤트 소싱이 약간의 시도로 진행되었다고 생각하며 나는 RDBMS를 사용해야 만한다.
작업 기반 UI는 대부분의 응답이 필요하지 않은 많은 명령으로 구성됩니다.
아키텍처
/---- RDBMS (EF)
IO ops \
| \
Single threaded Domains Fascade(DTO) Queries
| /
Event/Command Dispatcher/
\ /
MVC client
단일 스레드 도메인이 서로 대화하지 않는 기본적으로 그들은 교란 물질 (기본적으로 버퍼 링)을 통해 외부 세계에 이야기.
명령 디스패처는 외부 이벤트와 명령을 디스크에 복사하고 충돌이 발생하면 다시로드합니다. 완료는 IO Ops에 의해 명시 적으로 표시됩니다.
명령은 기본적으로 (명령의 트랜잭션 범위로) 지속되며 IO Ops 계층은 모든 이벤트를 가져 와서 처리하고 1 트랜잭션에서 명령 완료를 표시합니다. (명령은 도메인이 아닌 저널 서비스를 통해 지속되지만 명령에 대한 작업과 일치하는 IO opps와 대화 함). 명령이 실패하고 표시가 지속되면 (모두가 아닐 수도 있음) 명령을 다시 실행할 수 있습니다. 명령이 있고 DoTransation 메시지를 받았을 때만 명령을 지속합니다.
명령 발송자는 방해 요소를 통해 도메인에 연결합니다.
질문
- 내가 메모리에 전체 도메인을로드해야 하는가? - DB를 업데이트 한 후 (약 300 500 멕)과 그 실행 분명히 도메인에만 업데이트 할 것입니다.
외부 이벤트를 명령 디스패처에 다시 섞어도 상관 없으므로 (따라서 단일 스레드에서 처리하여 처리됩니다). 예를 들어 이벤트가 명령이됩니다.
최소한 작업중인 프로토 타입에서 도메인과 사용자 코드를 코딩하는 것이 간단 해 보이며 멋진 리치 도메인을 얻습니다. 그렇지? 도메인이 IO 작업을 수행 할 때
는 그들은 교란에 메시지를 보내고 하나
- 명령 GUID를 지정하고 명령을
- 완료 가정 (촬영을하고기도)를 거래와 일치됩니다
- 은 명령 디스패처로 전달 된 콜백 명령을 제공 한 다음 도메인에 다시 나타납니다. IO 메시지가 생성 된 후 시스템은 현재 명령을 에서 계속하거나 완료하여 다음 명령을 수신 할 수 있습니다.
충분합니까?
시스템은 하나의 프로세스와 공유 메모리에서 실행되지만 도메인 리소스는 자체적으로 액세스 할 수 있고 스레드는 하나만 액세스 할 수 있습니다. 이거 괜찮아?
실험용 메쉬 메쉬입니다. 이견있는 사람?