WCF 기반 SOA의 일부를 서비스 버스 모델 (아마도 nServiceBus)로 마이그레이션하고 일부 기본 pub-sub를 사용하여 Command-Query Separation 을 달성하는 프로젝트를 고려하고 있습니다.
SOA 나 서비스 버스 모델을 처음 접하는 사람은 아니지만 최근까지 "분리"라는 개념이 최신 데이터베이스 미러링 및 복제로 제한되었다고 고백합니다. 그럼에도 불구하고 궁극적으로 일관된 시스템 의 모든 이점을 제공 하는 동시에 많은 명백한 단점 (대부분 적절한 트랜잭션 지원이 없음)을 회피 하는 것처럼 보이기 때문에이 아이디어에 매료되었습니다 .
나는 기본적으로 ESB 아키텍처 의 전문가 인 Udi Dahan의 주제에 대해 많이 읽었습니다 (적어도 Microsoft 세계에서는).
더 많은 필드를 가진 더 큰 엔터티를 가질수록 더 많은 액터가 같은 엔터티로 작업하게되며, 주어진 시간에 무언가가 어떤 속성에 닿을 가능성이 높아져서 동시성 충돌의 수가 증가합니다.
[...]
CQRS의 핵심 요소는 사용자의 의도를 파악할 수 있도록 사용자 인터페이스 디자인을 재고하는 것입니다. 따라서 고객을 선호하게 만드는 것은 고객이 이사했거나 입수했음을 나타내는 것과 다른 작업 단위가되도록합니다. 기혼. 위에서 본 것처럼 데이터 변경에 Excel과 같은 UI를 사용한다고해서 의도를 파악할 수는 없습니다.
인용문에 설명 된 관점에서 그 논리를 논하기는 어렵습니다. 그러나 SOA와 관련하여 그 결정에 반대되는 것 같습니다. SOA (및 실제로 일반적인 서비스)는 네트워크 채터를 최소화하기 위해 대략적인 메시지 를 처리해야합니다 .
메시지 큐가 훌륭하고 RPC 수하물이없는 분산 시스템이 많을 때 네트워크 채터가 문제가되지 않는다는 것을 알고 있지만 문제를 완전히 해결하는 것이 현명하지 않은 것 같습니다. Udi는 거의 모든 속성 변경 (즉, 필드 업데이트)이 자체 명령이어야한다고 말하고 있습니다. 이는 한 사용자가 수백 또는 수천 개의 결합 된 엔티티와 속성을 종종 기존 방식으로 업데이트 할 수 있다는 맥락에서 상상하기 어렵습니다. 웹 서비스.
SQL Server에서 일괄 처리를 한 번 업데이트하면 매개 변수가 우수한 쿼리, 테이블 반환 매개 변수 또는 준비 테이블에 대한 대량 삽입이 제공 될 때 몇 초의 시간이 걸릴 수 있습니다. 한 번에 이러한 업데이트의 모든 일을 처리하는 속도가 느린, 천천히 천천히 , 그리고 OLTP 데이터베이스 하드웨어가 / 수평 확장 할 모두의 가장 비싸다.
이러한 경쟁 우려를 조정하는 방법이 있습니까? 내가 잘못 생각하고 있습니까? 이 문제에 CQS / ESB 환경에서 잘 알려진 솔루션이 있습니까?
그렇지 않다면, 사령부에서 세분성의 "올바른 수준"이 무엇인지 어떻게 결정합니까? 데이터베이스에서 3NF와 같은 시작점으로 사용할 수있는 "표준"이 있습니까? 신중한 프로파일 링이 잠재적으로 중요한 성능 이점을 제시 할 때만 벗어날 수 있습니까?
아니면 여러 전문가가 표현한 몇 가지 강력한 의견에도 불구하고 실제로 의견의 문제 일 수있는 것 중 하나입니까?