CQRS (rozdzielenie zapisu i odczytu)
Podział systemu na stronę zapisu, która zmienia dane, i osobną stronę odczytu ułożoną pod zapytania, synchronizowane zdarzeniami.
Polecenia przechodzą przez model domeny, który sprawdza reguły i zapisuje zmianę razem ze zdarzeniem w jednej transakcji (wzorzec outbox). Przekaźnik publikuje zdarzenie, a projekcja aktualizuje bazę do odczytu ułożoną pod ekrany i raporty, które jej potrzebują; zapytania w ogóle nie dotykają modelu domeny. Cena to drugi model do utrzymania i strona odczytu, która spóźnia się za zapisem, więc użytkownik może nie zobaczyć od razu własnej zmiany (spójność ostateczna). CQRS nie wymaga event sourcingu; te dwa wzorce często się myli.
Powiązane hasła
- Event sourcing: Zapisywanie każdej zmiany jako zdarzenia w dzienniku, do którego tylko się dopisuje, i odtwarzanie bieżącego stanu przez ich odtworzenie, zamiast trzymać tylko ostatni stan.
- Wzorzec outbox (transactional outbox): Zapisanie zdarzenia w tabeli outbox w tej samej transakcji bazy co sama zmiana, a potem osobne opublikowanie go w brokerze.
- Spójność ostateczna (eventual consistency): Gwarancja, że kopie danych zgodzą się ze sobą, gdy przestaną napływać zmiany, ale w międzyczasie mogą chwilowo pokazywać różne wartości.
- Baza danych na serwis (database per service): Każdy serwis jest właścicielem swoich danych i żaden inny nie czyta jego tabel bezpośrednio; pozostałe korzystają z jego API albo zdarzeń.
