현재 CQRS 및 Event Sourcing 아키텍처를 평가 중입니다. 나는 이런 종류의 디자인을 사용함에 따른 유지 보수의 의미를 이해하려고 노력하고있다. 답변을 찾기 위해 애쓰는 두 가지 질문은 다음과 같습니다.CQRS + Event Sourcing Architecture에서 ViewModel 변경을 관리하는 방법
1) 잠시 애플리케이션을 실행 한 후 실행하면, ViewModel에 추가 필드를 추가해야하는 상황이 발생합니다. ReadModel 데이터베이스? 예를 들어 이전에 CustomerList ViewModel에 Customer Zip Code가 필요하다고 가정 해보십시오. 따라서 추가 열을 ViewModel 데이터베이스에 쉽게 추가 할 수는 있지만 어떻게 채워지나요? 내가 알 수있는 한, 유일한 방법은 읽기 데이터베이스를 지우고 모든 이벤트를 처음부터 재생하여 ReadModel Datbase를 백업하는 것입니다. 그러나 응용 프로그램이 몇 달 또는 몇 년 동안 실행되고 실행 중이면 (원하는대로) 어떻게됩니까? 이는 zipcode 열의 데이터를 추가하기 위해 재생할 수있는 수백만 건의 이벤트 일 수 있습니다.
기술적 이유가 무엇이든간에 ReadModel 데이터베이스가 동기화되지 않았거나 새 ReadModel 데이터베이스를 추가하려는 경우 동일한 우려가 있습니다. 응용 프로그램이 오래되면서 사용 된 것처럼 보입니다. 사용이 많을수록 최신 readmodel을 다시 가져 오는 것이 더 어렵고 비용이 많이 듭니다. 또는 어딘가에서 트릭을 놓치고 있습니까? ReadModel 스냅 샷과 같은 것이 있습니까?
2) 수백만 개의 이벤트가 재생되어 읽기 데이터베이스를 빌드 한 후 일부 데이터가 예상과 일치하지 않으면 (즉, 잘못 보입니다) 어떻게 될까요? 이벤트를 저장하거나 비정규 화하는 루틴의 어딘가에있는 버그가 원인 일 수 있다고 생각됩니다 (그리고 코딩에 의존 할 수있는 것이 있다면 버그입니다). 이것을 디버깅하는 방법! 그것은 불가능한 일처럼 보입니다. 아니면 다시 한 번 트릭을 놓치고 있습니다.
잠시 동안 이와 같은 시스템을 운영 해본 사람이라면 어떻게 유지 보수 및 업그레이드 경로가 효과가 있었는지 들어 주시면 감사하겠습니다.
언제든지 입력 해 주셔서 감사합니다.
답장을 보내 주셔서 감사합니다. 이벤트 재생 시간에 대한 귀하의 의견은 (심지어 수백만 건의 사건이 있더라도) 안심할 수 있습니다. 나는 당신의 블로그를 BTW, 공유 주셔서 감사합니다! – James
잘못 입력하면 뷰 모델 모집단 *이 느려질 수 있으므로 테스트를하고 싶을 것입니다. 빨리하기 위해 약간의 노력이 필요합니다. –
우리는 프로덕션에 이르기까지 매번 읽기 모델을 연습하거나 다시 작성했습니다. 우리는 먼저 데이터를 무대 읽기 모델로 푸시하고 재구성이 성공하면 재 작성을 수행하여 프로덕션 읽기 모델로 푸시합니다. 우리에게는 읽기 모델이 각 릴리스의 이벤트 핸들러에 대한 모든 수정 사항을 반영하도록합니다. –