2010-12-15 7 views
11

Mój zespół rozpoczyna wdrażanie aplikacji greenfield z wymogiem wielokrotnej dzierżawy. Przeprowadziłem wiele badań na temat wzorców zapewniających prostą skalowalność, w szczególności w przypadku rozproszonej infrastruktury opartej na chmurze, a CQRS wydaje się być modnym hasłem (do tej pory nazywa się "Crack for Architecture Addicts", co uważam za zabawne). Korzyści i pułapki na bok, dość trudno jest znaleźć kogokolwiek oprócz Grega Younga, który użył tego pomysłu szeroko (lub w ogóle) w aplikacjach produkcyjnych i może dostarczyć wskazówek na ten temat w świecie rzeczywistym.Multi-Tenant CQRS Architecture

Oto moje pytania: 1. Czy architektura CQRS uwzględnia typową aplikację dla wielu dzierżawców, czy jest lepiej dostosowana do wewnętrznych aplikacji korporacyjnych na dużą skalę. 2. Jeśli zalecisz, aby był on wykorzystywany w tej sytuacji, możesz podać wskazówki dotyczące podejścia z wykopów na temat podejść - szczególnie w odniesieniu do spraw, które należy podjąć od samego początku, oraz jakie aspekty należy rozwinąć organicznie. 3. Jeśli ktoś próbował i stwierdził, że jest zbyt trudny lub nie zdaje sobie sprawy z korzyści, lub ma mocne argumenty przeciwko niemu (i zaleca trzymanie się CRUD i warstwowego projektu), chciałbym również wiedzieć o tych doświadczeniach.

Dla odniesienia aplikacja będzie napisana w języku .NET, a interfejs będzie początkowo oparty na Internecie (ASP.NET MVC), potencjalnie rozszerzony na klientów mobilnych i grubych. Współbieżność, aktywność transakcyjna i wolumen danych powinny pozostać na stosunkowo niskim poziomie przez cały czas życia aplikacji (w porównaniu do aplikacji finansowych o dużej skali i podobnych). W przypadku infrastruktury planujemy korzystać z platformy Azure.

+0

(Użycie tego jako komentarza, a nie jako odpowiedzi, ponieważ tak naprawdę nie odpowiada ono konkretnemu pytaniu). Jeśli jeszcze tego nie zrobiłeś, sugeruję przeczytanie wyjaśnionego tutaj artykułu Udi CQRS: http: // www.udidahan.com/2009/12/09/clarified-cqrs/ i obejrzyj film na jego temat tutaj: http://skillsmatter.com/podcast/open-source-dot-net/udi-dahan-command-query- odpowiedzialność-segregacja/rl-311 –

+2

Specjalnie dla .NET Azure CQRS sprawdź http://abdullin.com/ i projektu Lokad http://code.google.com/p/lokad-cqrs/ –

+0

Michael, dzięki za komentarze. Rzeczywiście przeczytałem i obserwowałem bardzo dużą ilość informacji na temat tego schematu, w tym tych zasobów. To, czego wydaje się brakować, to jakikolwiek głos od ludzi, którzy używali tego przez jakiś czas, lub nawet właśnie wdrażają go teraz. Zanim przejdę do poziomu teoretycznych korzyści, chcę potwierdzić, że towarzyszące im wyzwania w realnym świecie nie są zbyt duże. Jeden z moich ulubionych cytatów mówi: "Teoretycznie teoria i praktyka są takie same, w praktyce rzadko są." – Mafuba

Odpowiedz

6

Sam zbadałem ten sam punkt wyjścia, z perspektywy badawczej, przed rozpoczęciem rzeczywistego projektu (nadal oczekujemy finansowania działalności). W związku z tym moje badania i opinia, z których się wywnioskowałem, wskazują, że oś wielowierszości architektury jest w dużej mierze prostopadła do użycia CQRS do wewnętrznego projektu usługi gruboziarnistej.Wymóg dotyczący wielu dzierżawców nakłada dodatkowe nadrzędne ograniczenia dotyczące tego, w jaki sposób aplikacja oddziela najemców od punktu widzenia bezpieczeństwa, danych, prezentacji/personalizacji, wdrażania/dostarczania i skalowalności. CQRS tak naprawdę nie robi tego lepiej ani gorzej i moim zdaniem wciąż ma wartość w zajmowaniu się cennymi wyzwaniami architektonicznymi dla Usług. To powiedziawszy, nie wszystkie Usługi, które luźno współpracują w celu dostarczenia aplikacji, muszą również stosować się do wzorca CQRS, pod warunkiem, że wybrana luźno powiązana architektura nie zabrania ich używania.

2

Nie sądzę, że multi-tenant jest trudniejsze/łatwiejsze przy użyciu CQRS. Masz różne zalety, jeśli używasz wiadomości: możesz osadzić identyfikację dzierżawcy w poleceniach i wydarzeniach jako dane nagłówka, wybrać magazyn zdarzeń na podstawie identyfikacji, połączyć wielu dzierżawców z wieloma instancjami. Mimo to, należy zadać sobie pytanie, czy domena jest wspólny i mają eksperta domeny do Państwa dyspozycji ... inaczej możesz skończyć z polecenia/imprezy-CUD ;-)

7
  1. Wielu najmu zmieni nieco CQRS czytania side . Będziesz musiał filtrować widoki i zwracać tylko dane dotyczące najemcy. I napotkasz te same problemy przy użyciu dowolnej innej architektury.
  2. Polecam CQRS, ponieważ spowoduje to, że Twoja aplikacja będzie oparta na zadaniach (a nie na CRUD). Oznacza to, że będziesz mieć polecenia otrzymane z interfejsu użytkownika i będą one bardziej znaczące niż DTO. Jeśli chcesz napisać rdzeń z zasadami DDD, spróbuj uniknąć Anemic Domain Model (http://martinfowler.com/bliki/AnemicDomainModel.html). Podejście do tego - przenieś całą logikę domenową do obiektów domenowych. Twoje programy obsługi komend powinny być bardzo proste (uwierzytelnić, załadować agregat root, przetłumaczyć obiekt polecenia na wywołanie metody, jeśli nie zostały wprowadzone wyjątki - zastosować zmiany). Warto obejrzeć nagranie klasy Grega (6 godzin i pół): http://cqrsinfo.com/video/ Jak powiedział Michael Shimmins, jeśli planujesz używać Azure jako swojej platformy - warto przyjrzeć się projektowi Lokad.CQRS. Użyłem go do realizacji jednego z naszych projektów.
  3. CQRS nie pasuje, jeśli naprawdę potrzebujesz prostej aplikacji CRUD (nie opartej na zadaniach). CQRS wymaga więcej czasu, aby zrozumieć zasady dla nowych użytkowników. Z drugiej strony pozwoli to na oddzielenie zadań deweloperów pomiędzy programistami z rdzennymi domenami i mniej doświadczonymi programistami widoków> dto-> ui.
Powiązane problemy