Multi-Tenant CQRS Architettura
-
10-10-2019 - |
Domanda
La mia squadra sta cominciando implementazione di un'applicazione greenfield, con un requisito per il multi-tenancy. Ho fatto una grande quantità di ricerche su modelli per il semplice scalabilità, in particolare sulle infrastrutture cloud-based distribuito, e CQRS sembra essere la parola d'ordine del giorno (arrivando persino essere chiamato "Crack per l'architettura Addicts" che trovo abbastanza divertente ). Vantaggi e le insidie ??a parte, è abbastanza difficile trovare qualcuno oltre Greg Young che ha utilizzato questa idea ampiamente (o affatto) in applicazioni di produzione e in grado di fornire una guida nel mondo reale per esso.
Così qui sono le mie domande: 1. Se un'architettura CQRS ospitare l'applicazione tipica multi-tenant, o è meglio adatti per le applicazioni aziendali interne su scala più grande. 2. Se si consiglia che è usato in questa situazione, si può fornire un orientamento da-the-trincee su approcci - soprattutto sulle cose da ottenere destra nella fase iniziale, quindi cosa aspetti dovrebbero essere evoluta organicamente. 3. Se qualcuno ha provato e l'ho trovato troppo difficile o non realizzate i benefici, o ha forti argomenti contro di essa (e raccomandare attaccare a CRUD e la progettazione a più livelli), vorrei sapere di quelle esperienze pure.
Per riferimento, l'applicazione sarà scritto in .NET e il front-end sarà inizialmente basato sul web (ASP.NET MVC), potenzialmente esteso a clienti di telefonia mobile e di spessore. Concorrenza, l'attività transazionale, e il volume di dati sono tutti destinati a restare relativamente bassi per tutta la durata della vita della domanda (rispetto alle applicazioni finanziarie ad alto volume e simili). Per le infrastrutture, abbiamo intenzione di utilizzare Azure.
Soluzione
Ho esaminato lo stesso punto di partenza me stesso, dal punto di vista esplorativo prima di intraprendere il progetto vero e proprio (siamo ancora in attesa del finanziamento di business). In questo, la mia ricerca e di opinione formato da essa è che l'asse multi-tenant dell'architettura è in gran parte ortogonale per l'utilizzo del CQRS per la progettazione interna di un servizio di grana grossa. Le multi-tenant luoghi requisito aggiuntivo vincoli generali di tutto come l'applicazione segrega gli inquilini da un titolo, i dati, la presentazione / personalizzazione, implementazione / provisioning e scalabilità punto di vista. CQRS realtà non rendere questo meglio o peggio e, secondo me ha ancora un valore nell'affrontare le sfide architettonici di pregio per i Servizi. Detto questo, non tutti i servizi che vagamente collaborano per fornire la necessità dell'applicazione di seguire il modello CQRS sia, a condizione che l'architettura debolmente accoppiato scelto non vietare l'uso.
Altri suggerimenti
- Multi-tenancy cambieranno un po 'di lettura CQRS lato. Avrete bisogno di visualizzazioni filtrate e dati relativi inquilino di ritorno solo. E si dovrà affrontare gli stessi problemi con qualsiasi altro architettura.
- Suggerirei CQRS perché renderà l'applicazione di una task-based (non un CRUD base). Essa significa che si avrà comandi ricevuti dall'interfaccia utente e saranno più significativo di DTOs. Se si desidera scrivere il vostro core con principi DDD poi cercare di evitare Anemic Domain Model ( http://martinfowler.com /bliki/AnemicDomainModel.html ). Approccio per fare questo - spostare ogni logica di dominio specifico per oggetti di dominio. I gestori comando dovrebbe essere molto semplice (autenticazione, caricare radice di aggregazione, tradurre oggetto comando per chiamata di metodo, se sono stati gettati senza eccezioni - applicare le modifiche). Vale la pena di guardare il record di Greg classe (6 ore e mezza): http://cqrsinfo.com/video/ Come Michael Shimmins detto che se si prevede di utilizzare Azure come piattaforma - vale la pena di guardare ai progetti Lokad.CQRS. L'ho usato per implementare uno dei nostri progetti.
- CQRS non si adatta se si ha realmente bisogno di semplice applicazione CRUD (non task-based). CQRS richiedono più tempo per capire che è principi per i nuovi arrivati. D'altra parte essa permetterà di compiti dev separati tra programmatori dominio-core e meno esperti Visualizza-> dto-> ui programmatori.
Non credo multi-tenant è affatto più duro / più semplice utilizzando CQRS. Lei ha diversi vantaggi se si utilizza messaggistica: è possibile incorporare l'identificazione inquilino in comandi e gli eventi come dati di intestazione, selezionare un eventstore basato sull'identificazione, unire multi-tenant con multi-istanza. Eppure, chiedetevi se il vostro dominio è altamente collaborativo e hanno un esperto di dominio a vostra disposizione ... altrimenti si finisce con il comando / evento-CUD; -)