CQRS (Command Query Responsibility Segregation) tách biệt model cho write (Command) và read (Query).
Kafka là event bus lý tưởng để kết nối hai side:
- Command side: nhận command (CreateOrder), validate, update write model (DB), publish event (OrderCreated) lên Kafka;
- Event consumer: subscribe Kafka topic, xử lý event để update read model (search index, cache, materialized view phù hợp cho query);
- Query side: đọc từ read model đã được optimize (Elasticsearch cho full-text search, Redis cho low-latency lookup, PostgreSQL view cho reports)
Lợi ích: write và read model có thể scale độc lập; read model optimize cho access pattern cụ thể; dễ add thêm read model mới mà không ảnh hưởng write side. Nhược điểm: eventual consistency — sau khi write, read model chưa update ngay (thường < 100ms nhưng phải communicate với user).
Cần careful UX: sau khi user tạo order, show optimistic UI thay vì đọc lại từ DB ngay.