SlideShare a Scribd company logo
1 of 68
CQRS – COMMAND AND QUERY
RESPONSIBILITY SEGREGATION
ITLC HANOI
MONTHLY PUBLIC MEETUP
“If you can’t split it, you can’t scale it”
(Randy Shoup, Distinguished Architect, eBay)
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
CÁC NỘI DUNG CHÍNH
1. Các yêu cầu về việc xây dựng hệ thống lớn
2. Mô hình CQRS và các khái niệm căn bản
3. Một số phương pháp cơ bản để phân tích thiết kế
phần mềm
4. Cách thức hoạt động của mô hình CQRS
5. Sử dụng pattern Event Sourcing với CQRS
6. Các vấn đề khó khăn khi áp dụng mô hình
CQRS-ES và hướng giải pháp giải quyết
7. Các đòi hỏi về hiệu năng và các hướng giải pháp
giải quyết
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
THÁCH THỨC KHI XÂY DỰNG
 Khả năng mở rộng của hệ thống.
 Tính ổn định
 Tính nhất quán của dữ liệu
 Tranh chấp tài nguyên
 Đòi hỏi hiệu năng cao
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
KHẢ NĂNG MỞ RỘNG
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
KHẢ NĂNG MỞ RỘNG
 Chiều X horizontal duplication: mở rộng bằng cách
nhân bản. Ví dụ thực hiện cân bằng tải nhiều web
application
 Mở rộng theo chiều Y Functional Decomposition:
mở rộng bằng cách chia nhỏ thành nhiều chức
năng. Ví dụ quản lý sản phẩm, quản lý đơn hàng…
Trong quản lý đơn hàng chia tiếp thành thanh toán,
ghi đơn hàng, tìm kiếm đơn hàng…
 Mở rộng theo chiều Z chia nhỏ dữ liệu: sharding
data, partion data…
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
CÁC KHÓ KHĂN
 Sử dụng cùng một model cho tất cả các nghiệp vụ
 Logic phức tạp
 Các nghiệp vụ ghi dữ liệu quan trọng và chặt chẽ
 Các nghiệp vụ đọc dữ liệu thì linh hoạt
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
MÔ HÌNH CRUD
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
MÔ HÌNH CRUD
 Có ba tầng chính: Data Layer, Business Layer,
Presentation
 DAL query giả lại DTO để Presentation hiển thị
 Presentation thay đổi DTO qua DAL lưu vào vào
database
 Model dùng chung cả việc đọc và ghi dữ liệu
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
MÔ HÌNH CRUD
 Ưu điểm: nhanh, không cầu kì thiết kế
 Nhược điểm:
- Model phức tạp do dùng chung cho cả đọc và ghi
dữ liệu
- Tăng tranh chấp dữ liệu giữa đọc và ghi dữ liệu
- Không scale được độc lập yêu cầu hiệu năng cho
cả phần đọc và ghi
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
MÔ HÌNH CQRS
 Người đưa ra: Greg Young – 2006
 CQRS – Command and Query Responsibility
Segregation
 Mục tiêu phân chia các luồng ghi và đọc dữ liệu ra
riêng biệt
 Scale độc lập các thành phần đọc và ghi dữ liệu
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
MÔ HÌNH
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
CÁC THÀNH PHẦN CHÍNH
 Command: lệnh phát sinh xử lý một nghiệp vụ
 Event: báo một quá trình xử lý kết thúc
 Command Bus: đường vận chuyển lệnh command
 Event Bus: đường vận chuyển các event
 Domain Model: mô hình xử lý nghiệp vụ
 DTO: Data Transfer Object
 Query Façade: mô hình query dữ liệu
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
CQRS
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
MÔ HÌNH HOẠT ĐỘNG
 Phát sinh command. Vd: đặt hàng – placeorder
 Command Bus gửi command
 Command Handler nhận command, thực thi xử lý
nghiệp vụ tại domain model
 Phát sinh các Event báo kết thúc quá trình xử lý.
 Event Bus publish các event đi
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
XÉT VÍ DỤ CỤ THỂ
 Xây dựng ứng dụng thương mại điện tử đơn giản:
cho phép người dùng xem và mua hàng
 Sau đặt hàng xong người dùng có thể thanh toán
online
 Sau khi thanh toán online xong, đơn hàng được
xác nhận thì gửi tin nhắn và email xác nhận cho
người dùng
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
PHÂN TÍCH VÀ THIẾT KẾ
 Xác định các phạm vi bài toán nghiệp vụ:
+ Quản lý sản phẩm
+ Đơn hàng
+ Thanh toán
+ Thông báo
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
CONTEXT BOUNDARY
Product
Order
Payment
Notification
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
XÂY DỰNG UBIQUITOUS LANGUAGE
 Nhằm xác định rõ các tính chất của yêu cầu đầu
vào
 Xác định các đối tượng và các hành vi
 Cơ sở để thiết kế các model, command và event
 Đảm bảo một mô hình thống nhất giữa người lập
trình và người phát triển nghiệp vụ
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
XÂY DỰNG UBIQUITOUS LANGUAGE
 Người dùng liệt kê sản phẩm
 Chọn lựa sản phẩm và số lượng mua
 Đặt hàng
 Thanh toán để xác nhận đơn hàng
 Gửi tin nhắn và email báo đã đặt hàng thành công
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
XÁC ĐỊNH CÁC NOUN VÀ VERB
 Phân tích ubiquitous language để xác định các
object và behaviour
 Xác định mối quan hệ giữa các object
 Xây dựng model dựa trên các noun và verb
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
XÁC ĐỊNH CÁC VERB VÀ NOUN
Noun Verb
Product Listing Product
Order Place Order, Confirm Order, Reject
Order
Payment Accept, Reject
Email Send
SMS Send
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
MÔ HÌNH THIẾT KẾ CHO TỪNG BOUNDED
CONTEXT
 Không dùng chung một mô hình thiết kế cho tất cả
 Mỗi context có mô hình xử lý và schema riêng
 Các bounded context kết nối thông qua message
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
PRODUCT, ORDER, PAYMENT, NOTIFICATION
Product Order Payment Notification
Application Service
WriteSide
ReadSide
DDD
Core Domain
CQRS-ES
Core Domain
CQRS
Core Domain
CRUD
None Core Domain
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
PHÂN TÍCH PROCESS ORDER VÀ PAYMENT
Ubiquitous Language:
 Người dùng gửi lệnh đặt hàng – Place Order
 Hệ thống tạo đơn hàng – Create Order
 Chờ thanh toán để xác nhận – Wait Payment
Accepted
 Nhận được xác thức thanh toán – Payment
Accepted
 Xác nhận đơn hàng thành công – Confirm Order
 Gửi email cho người dùng – Send Email
 Gửi SMS cho người dùng – Send SMS
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
AGGREGATE
 Có định danh duy nhất trong hệ thống
 Được lưu trữ trong hệ thống
 Chứa các business logic
 Có dữ liệu và hành vi
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
ORDER AGGREGATE
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
PHÂN TÍCH COMMAND VÀ EVENT
Command Event
PlaceOrder
CreateOrder OrderCreated
SubmitOrder OrderSubmited
SendSMS
SendEmail
PaymentAccepted
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
KẾT HỢP CÁC BOUNDED CONTEXT
Order
Process
Manager
PlaceOrder
OrderCreated
ConfirmOrder
OrderConfirm
PaymentAccpetd
SendSMS
SendEmail
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
PROCESS MANAGER PATTERN
 Giới thiệu lần đầu 2004 trong cuốn:
Enterprise Integration Patterns: Designing, Building,
and Deploying Messaging Solutions
(Gregor Hohpe - Bobby Woolf )
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
ORDER PROCESS MANAGER
Order
OrderProcesManager
Payments Notifications
Command
Event
1. PlaceOrder
2. CreateOrder 3. OrderCreated
4. PaymentAccepted
5. ConfirmOrder
7. SendEmail
6. SendSMS
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
PLACEORDER COMMAND
Command Bus
Web Application
1. PlaceOrder Command
Process
Manager
CommandHandler
Receive Command
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
CHANGE STATE, SAVE AND SEND COMMAND
 Order Process Manager nhận PlaceOrder
Command
 Change to CreateOrder State
 Save state and Send CreateOrder Command
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
ORDERPROCESS MANAGER
OrderProcessManager
Database
Command Bus
Save To DB Send CreateOrder to Command Bus
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
HANDLE CREATEORDER COMMAND
Command Bus
ProcessManage
r
2. CreateOrder Command
Order Aggregate
CommandHandler
Receive Command
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
ORDERCOMMAND HANDLER
HANDLE CREATEORDER COMMAND
 Receive CreateOrder Command
 Get Order Aggregate
 Process Create Order Logic
 Save Order and Publish OrderCreated Event
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
ORDERCOMMAND HANDLER
HANDLE CREATEORDER COMMAND
Order
Database
Event Bus
Save To DB Send OrderCreated Event to Event Bus
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
HANDLE ORDERCREATED EVENT
Event Bus
ProcessManager Order Aggregate
OrderCreated
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
HANDLE ORDERCREATED EVENT
 Change to WaitPaymentAccepted State
 Save and Wait PaymentAccepted Event
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
HANDLE PAYMENTACCEPTED EVENT
 Change to Confirmed State
 Save state and send commands:
- Send ConfirmCommand to Order
- Send SendEmail to Notification Domain
- Send SendSMS to Notification Domain
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
HANDLE PAYMENTACCEPTED EVENT
OrderProcessManager
Event Bus Command Bus
Payment Order
PaymentAccept
ed
ConfirmOrder
SendEmail
SendSMS
Email
ConfirmOrder
SendEmail SendSMS
SMS
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
ORDER AGGREGATE
HANDLE CONFIRMORDER COMMAND
 Update to Confirmed State
 Save and Publish OrderConfirmed Event
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
READ SIDE
HANDLE ORDERCONFIRMED EVENT
 Receive OrderConfirmed Event
 Update Read Database
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
READ SIDE
HANDLE ORDERCONFIRMED EVENT
Order
Read DBEvent Bus
Publish OrderCreated
OrderReadDBHandler
Update DB
Query Data
Thin Data Layer
Read SideWrite Side
Receive Event
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
CÁC ƯU ĐIỂM CỦA CQRS
 Các logic thực thi rõ ràng
 Phân tách thành các quá trình xử lý độc lập
 Dễ dàng scale độc lập từng thành phần
 Sử dụng tài nguyên tính toán hiệu quả hơn
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
NHẬN XÉT
 Tất cả các thay đổi của object đều có event tương
ứng
 Quá trình cập nhật read side tương ứng với các sự
kiện phát ra
 Có thể sử dụng event để tái tạo lịch sử object.
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
EVENT SOURCING PATTERN
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
EVENT SOURCING PATTERN
 Lưu trữ trạng thái của object là danh sách sự kiện
thay đổi trạng thái của object
 Lưu stream event của object
 Load event stream để tái tạo tất cả trạng thái của
object
 Replay lại các event để xác định lịch sử thay đổi
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
ÁP DỤNG EVENT SOURCING CHO CQRS
 Tất cả các tác động làm thay đổi trạng thái đơn
hàng được coi là chuỗi các sự kiện
 Thay đổi cấu trúc class nhưng không thay thế cấu
trúc model
 Thay đổi data context để lưu trữ event
 Giữ nguyên toàn bộ cấu trúc của phần mềm
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
THAY ĐỔI CẤU TRÚC CLASS
 Mỗi hành vi của object sẽ phát sinh một event
tương ứng
 Mỗi event sẽ được handle bởi một hàm update
trạng thái của object
 Khi khởi tạo object load lại toàn bộ event và thực
thi
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
THAY ĐỔI CẤU TRÚC CLASS
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
THAY ĐỔI CẤU TRÚC CLASS
base.Handles<OrderPlaced>(this.OnOrderConfirmed);
…
Public void ConfirmOrder(ConfirmOrder cmd)
{
this.Update(new OrderConfirmed());
}
….
private void OnOrderPlaced(OrderConfirmed e)
{
//….
}
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
THAY ĐỔI DATA LAYER/DATA CONTEXT
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
CHUYỂN ĐỔI CQRS-ES
Application Application
Order For CQRS Order For ES
OrderRepository
For CQRS
OrderRepository
For ES
DDD/CQRS:
Business Logic không thay đổi
Application Logic không thay đổi
Chỉ thay đổi cấu trúc lưu trữ
CRUD:
Rất khó khăn để làm tương tự
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
ƯU ĐIỂM CỦA EVENT SOURCING PATTERN
 Lưu trữ được lịch sử thay đổi của một đối tượng
 Cho phép dễ dàng playback lại các sự kiện để xác
định các vấn đề trong hệ thống
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
DEMO
 Các tính năng cũ vẫn giữ nguyên
 Có thể theo dõi được lịch sử đơn hàng
 Không cần thêm phần log history nữa
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
CÁC VẤN ĐỀ KHÓ KHĂN
 Hệ thống monitor
 Việc gửi và nhận message ổn định
 Chống trùng lặp việc xử lý message
 Eventually consistency giữa read side và write side
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
GỬI MESSAGE ỔN ĐỊNH
 Không có transaction giữa database và message
queue
Giải pháp:
 Lưu state và các message chưa gửi đi trong một
transation
 Gửi message và xóa các message
 Thiết lập chế độ chống trùng message trong
message queue
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
GỬI MESSAGE ỔN ĐỊNH
Undispatched
Message
States
Message Queue
Transaction
Save Send
Delete Undispatched Messages
Lưu ý: cần phải chống trùng lặp message
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
IDEMPOTEMCY FILTERING
 Lưu giữ message id nhận được
 Kiểm tra trạng thái xử lý message khi nhận được
message
 Thiết lập chế độ chống gửi trùng message nếu
message queue hỗ trợ.
 Thiết kế logic để việc xử lý không bị ảnh hưởng bởi
trung lặp message
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
EVENTUALLY CONSISTENCY GIỮA WRITE SIDE
VÀ READ SIDE
 Dữ liệu giữa read side và write side bị lệch
Giải pháp:
 Đánh version tăng dần cho dữ liệu
 Kiểm tra version hiện tại khi submit:
submited version = current version
 Đánh version bằng timespan
 Phải có giải pháp trong trường hợp bắt buộc dữ
liệu giữa write side và read side phải strong
consistency
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
VẤN ĐỀ CONCURRECY
 Hai tác nhân cùng thay đổi trạng thái của hệ thống
 Sử dụng cơ chế optimistic lock bằng timestamp
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
CÁC ĐIỂM THẮT CỔ CHAI
 Giới hạn throughput của đường bus
 Giới hạn của database
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
CÁC GIẢI PHÁP
 Tăng số làn bus – partition bus
 Sharding database – horizontal scaling
 Non Blocking IO Programming
 Using Priority Queue pattern
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
GIẢI QUYẾT VẤN ĐỀ THẮT CỔ TRAI
Message Bus
Message Bus
Message Bus
Message Bus
Worker
Worker
Worker
….
Shardlet
Shardlet
Shardlet
Sharding dataMultiple Worker
Partition
Message
Queue
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
UBER ARCHITECTURE
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
THANK YOU
 Lê Minh Nghĩa
 Facebook: https://www.facebook.com/NghiaLeMinh
 Email: nghia.fit@gmail.com
 Phone: 0936 073 986
Shared to be Share!
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
Q&A
ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia

More Related Content

Viewers also liked

Distributed Transaction in Microservice
Distributed Transaction in MicroserviceDistributed Transaction in Microservice
Distributed Transaction in MicroserviceNghia Minh
 
High performance web sites with multilevel caching
High performance web sites with multilevel cachingHigh performance web sites with multilevel caching
High performance web sites with multilevel cachingDotnet Open Group
 
ITLCHN 18 - Automation & DevOps - Automic
ITLCHN 18 -  Automation & DevOps - AutomicITLCHN 18 -  Automation & DevOps - Automic
ITLCHN 18 - Automation & DevOps - AutomicIT Expert Club
 
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015IT Expert Club
 
IM Group hợp tác Haravan - slide nền tảng tổng thể haravan
IM Group hợp tác Haravan - slide nền tảng tổng thể haravanIM Group hợp tác Haravan - slide nền tảng tổng thể haravan
IM Group hợp tác Haravan - slide nền tảng tổng thể haravanDuc Nguyen Minh
 
Nghiên cứu luật kết hợp áp dụng xây dựng mạng chia sẻ đồ vật MiGi
Nghiên cứu luật kết hợp áp dụng xây dựng mạng chia sẻ đồ vật MiGiNghiên cứu luật kết hợp áp dụng xây dựng mạng chia sẻ đồ vật MiGi
Nghiên cứu luật kết hợp áp dụng xây dựng mạng chia sẻ đồ vật MiGiNghia Minh
 
Building Bizweb Microservices with Docker
Building Bizweb Microservices with DockerBuilding Bizweb Microservices with Docker
Building Bizweb Microservices with DockerKhôi Nguyễn Minh
 
Towards the Cloud: Architecture Patterns and VDI Story
Towards the Cloud: Architecture Patterns and VDI StoryTowards the Cloud: Architecture Patterns and VDI Story
Towards the Cloud: Architecture Patterns and VDI StoryIT Expert Club
 
Building .NET Microservices
Building .NET MicroservicesBuilding .NET Microservices
Building .NET MicroservicesVMware Tanzu
 
Căn Hộ Cao Cấp Vincom Đồng Khởi - Vincom Dong Khoi Luxury Apartment - Hotline...
Căn Hộ Cao Cấp Vincom Đồng Khởi - Vincom Dong Khoi Luxury Apartment - Hotline...Căn Hộ Cao Cấp Vincom Đồng Khởi - Vincom Dong Khoi Luxury Apartment - Hotline...
Căn Hộ Cao Cấp Vincom Đồng Khởi - Vincom Dong Khoi Luxury Apartment - Hotline...VINGROUP - Vietnam
 
Trung thu 2013 ho so tai tro- cungthieunhi hanoi & iLIGHTIS
Trung thu 2013   ho so tai tro- cungthieunhi hanoi & iLIGHTISTrung thu 2013   ho so tai tro- cungthieunhi hanoi & iLIGHTIS
Trung thu 2013 ho so tai tro- cungthieunhi hanoi & iLIGHTISLe Xu Li
 
Hồ sơ năng lực Company Profile AluKing International
Hồ sơ năng lực Company Profile AluKing InternationalHồ sơ năng lực Company Profile AluKing International
Hồ sơ năng lực Company Profile AluKing InternationalAluKing International
 
Job hunting - Cambridge Professional English
Job hunting - Cambridge Professional EnglishJob hunting - Cambridge Professional English
Job hunting - Cambridge Professional EnglishNgovan93
 
Mobileadstrend 2012-2013
Mobileadstrend 2012-2013Mobileadstrend 2012-2013
Mobileadstrend 2012-2013Le Xu Li
 
google project glass technology
google project glass technologygoogle project glass technology
google project glass technologymahesh b
 
iLIGHTIS profile
iLIGHTIS profileiLIGHTIS profile
iLIGHTIS profileLe Xu Li
 
UX Designer Skills
UX Designer SkillsUX Designer Skills
UX Designer SkillsPhowr Quang
 

Viewers also liked (19)

Distributed Transaction in Microservice
Distributed Transaction in MicroserviceDistributed Transaction in Microservice
Distributed Transaction in Microservice
 
High performance web sites with multilevel caching
High performance web sites with multilevel cachingHigh performance web sites with multilevel caching
High performance web sites with multilevel caching
 
ITLCHN 18 - Automation & DevOps - Automic
ITLCHN 18 -  Automation & DevOps - AutomicITLCHN 18 -  Automation & DevOps - Automic
ITLCHN 18 - Automation & DevOps - Automic
 
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015
 
IM Group hợp tác Haravan - slide nền tảng tổng thể haravan
IM Group hợp tác Haravan - slide nền tảng tổng thể haravanIM Group hợp tác Haravan - slide nền tảng tổng thể haravan
IM Group hợp tác Haravan - slide nền tảng tổng thể haravan
 
Graph ql
Graph qlGraph ql
Graph ql
 
Nghiên cứu luật kết hợp áp dụng xây dựng mạng chia sẻ đồ vật MiGi
Nghiên cứu luật kết hợp áp dụng xây dựng mạng chia sẻ đồ vật MiGiNghiên cứu luật kết hợp áp dụng xây dựng mạng chia sẻ đồ vật MiGi
Nghiên cứu luật kết hợp áp dụng xây dựng mạng chia sẻ đồ vật MiGi
 
Building Bizweb Microservices with Docker
Building Bizweb Microservices with DockerBuilding Bizweb Microservices with Docker
Building Bizweb Microservices with Docker
 
Towards the Cloud: Architecture Patterns and VDI Story
Towards the Cloud: Architecture Patterns and VDI StoryTowards the Cloud: Architecture Patterns and VDI Story
Towards the Cloud: Architecture Patterns and VDI Story
 
Migrating to aws
Migrating to awsMigrating to aws
Migrating to aws
 
Building .NET Microservices
Building .NET MicroservicesBuilding .NET Microservices
Building .NET Microservices
 
Căn Hộ Cao Cấp Vincom Đồng Khởi - Vincom Dong Khoi Luxury Apartment - Hotline...
Căn Hộ Cao Cấp Vincom Đồng Khởi - Vincom Dong Khoi Luxury Apartment - Hotline...Căn Hộ Cao Cấp Vincom Đồng Khởi - Vincom Dong Khoi Luxury Apartment - Hotline...
Căn Hộ Cao Cấp Vincom Đồng Khởi - Vincom Dong Khoi Luxury Apartment - Hotline...
 
Trung thu 2013 ho so tai tro- cungthieunhi hanoi & iLIGHTIS
Trung thu 2013   ho so tai tro- cungthieunhi hanoi & iLIGHTISTrung thu 2013   ho so tai tro- cungthieunhi hanoi & iLIGHTIS
Trung thu 2013 ho so tai tro- cungthieunhi hanoi & iLIGHTIS
 
Hồ sơ năng lực Company Profile AluKing International
Hồ sơ năng lực Company Profile AluKing InternationalHồ sơ năng lực Company Profile AluKing International
Hồ sơ năng lực Company Profile AluKing International
 
Job hunting - Cambridge Professional English
Job hunting - Cambridge Professional EnglishJob hunting - Cambridge Professional English
Job hunting - Cambridge Professional English
 
Mobileadstrend 2012-2013
Mobileadstrend 2012-2013Mobileadstrend 2012-2013
Mobileadstrend 2012-2013
 
google project glass technology
google project glass technologygoogle project glass technology
google project glass technology
 
iLIGHTIS profile
iLIGHTIS profileiLIGHTIS profile
iLIGHTIS profile
 
UX Designer Skills
UX Designer SkillsUX Designer Skills
UX Designer Skills
 

ITLC - Hanoi - CQRS - ES - 22-10 - 2015

  • 1. CQRS – COMMAND AND QUERY RESPONSIBILITY SEGREGATION ITLC HANOI MONTHLY PUBLIC MEETUP
  • 2. “If you can’t split it, you can’t scale it” (Randy Shoup, Distinguished Architect, eBay) ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 3. CÁC NỘI DUNG CHÍNH 1. Các yêu cầu về việc xây dựng hệ thống lớn 2. Mô hình CQRS và các khái niệm căn bản 3. Một số phương pháp cơ bản để phân tích thiết kế phần mềm 4. Cách thức hoạt động của mô hình CQRS 5. Sử dụng pattern Event Sourcing với CQRS 6. Các vấn đề khó khăn khi áp dụng mô hình CQRS-ES và hướng giải pháp giải quyết 7. Các đòi hỏi về hiệu năng và các hướng giải pháp giải quyết ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 4. THÁCH THỨC KHI XÂY DỰNG  Khả năng mở rộng của hệ thống.  Tính ổn định  Tính nhất quán của dữ liệu  Tranh chấp tài nguyên  Đòi hỏi hiệu năng cao ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 5. KHẢ NĂNG MỞ RỘNG ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 6. KHẢ NĂNG MỞ RỘNG  Chiều X horizontal duplication: mở rộng bằng cách nhân bản. Ví dụ thực hiện cân bằng tải nhiều web application  Mở rộng theo chiều Y Functional Decomposition: mở rộng bằng cách chia nhỏ thành nhiều chức năng. Ví dụ quản lý sản phẩm, quản lý đơn hàng… Trong quản lý đơn hàng chia tiếp thành thanh toán, ghi đơn hàng, tìm kiếm đơn hàng…  Mở rộng theo chiều Z chia nhỏ dữ liệu: sharding data, partion data… ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 7. CÁC KHÓ KHĂN  Sử dụng cùng một model cho tất cả các nghiệp vụ  Logic phức tạp  Các nghiệp vụ ghi dữ liệu quan trọng và chặt chẽ  Các nghiệp vụ đọc dữ liệu thì linh hoạt ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 8. MÔ HÌNH CRUD ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 9. MÔ HÌNH CRUD  Có ba tầng chính: Data Layer, Business Layer, Presentation  DAL query giả lại DTO để Presentation hiển thị  Presentation thay đổi DTO qua DAL lưu vào vào database  Model dùng chung cả việc đọc và ghi dữ liệu ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 10. MÔ HÌNH CRUD  Ưu điểm: nhanh, không cầu kì thiết kế  Nhược điểm: - Model phức tạp do dùng chung cho cả đọc và ghi dữ liệu - Tăng tranh chấp dữ liệu giữa đọc và ghi dữ liệu - Không scale được độc lập yêu cầu hiệu năng cho cả phần đọc và ghi ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 11. MÔ HÌNH CQRS  Người đưa ra: Greg Young – 2006  CQRS – Command and Query Responsibility Segregation  Mục tiêu phân chia các luồng ghi và đọc dữ liệu ra riêng biệt  Scale độc lập các thành phần đọc và ghi dữ liệu ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 12. MÔ HÌNH ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 13. CÁC THÀNH PHẦN CHÍNH  Command: lệnh phát sinh xử lý một nghiệp vụ  Event: báo một quá trình xử lý kết thúc  Command Bus: đường vận chuyển lệnh command  Event Bus: đường vận chuyển các event  Domain Model: mô hình xử lý nghiệp vụ  DTO: Data Transfer Object  Query Façade: mô hình query dữ liệu ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 15. MÔ HÌNH HOẠT ĐỘNG  Phát sinh command. Vd: đặt hàng – placeorder  Command Bus gửi command  Command Handler nhận command, thực thi xử lý nghiệp vụ tại domain model  Phát sinh các Event báo kết thúc quá trình xử lý.  Event Bus publish các event đi ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 16. XÉT VÍ DỤ CỤ THỂ  Xây dựng ứng dụng thương mại điện tử đơn giản: cho phép người dùng xem và mua hàng  Sau đặt hàng xong người dùng có thể thanh toán online  Sau khi thanh toán online xong, đơn hàng được xác nhận thì gửi tin nhắn và email xác nhận cho người dùng ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 17. PHÂN TÍCH VÀ THIẾT KẾ  Xác định các phạm vi bài toán nghiệp vụ: + Quản lý sản phẩm + Đơn hàng + Thanh toán + Thông báo ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 18. CONTEXT BOUNDARY Product Order Payment Notification ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 19. XÂY DỰNG UBIQUITOUS LANGUAGE  Nhằm xác định rõ các tính chất của yêu cầu đầu vào  Xác định các đối tượng và các hành vi  Cơ sở để thiết kế các model, command và event  Đảm bảo một mô hình thống nhất giữa người lập trình và người phát triển nghiệp vụ ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 20. XÂY DỰNG UBIQUITOUS LANGUAGE  Người dùng liệt kê sản phẩm  Chọn lựa sản phẩm và số lượng mua  Đặt hàng  Thanh toán để xác nhận đơn hàng  Gửi tin nhắn và email báo đã đặt hàng thành công ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 21. XÁC ĐỊNH CÁC NOUN VÀ VERB  Phân tích ubiquitous language để xác định các object và behaviour  Xác định mối quan hệ giữa các object  Xây dựng model dựa trên các noun và verb ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 22. XÁC ĐỊNH CÁC VERB VÀ NOUN Noun Verb Product Listing Product Order Place Order, Confirm Order, Reject Order Payment Accept, Reject Email Send SMS Send ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 23. MÔ HÌNH THIẾT KẾ CHO TỪNG BOUNDED CONTEXT  Không dùng chung một mô hình thiết kế cho tất cả  Mỗi context có mô hình xử lý và schema riêng  Các bounded context kết nối thông qua message ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 24. PRODUCT, ORDER, PAYMENT, NOTIFICATION Product Order Payment Notification Application Service WriteSide ReadSide DDD Core Domain CQRS-ES Core Domain CQRS Core Domain CRUD None Core Domain ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 25. PHÂN TÍCH PROCESS ORDER VÀ PAYMENT Ubiquitous Language:  Người dùng gửi lệnh đặt hàng – Place Order  Hệ thống tạo đơn hàng – Create Order  Chờ thanh toán để xác nhận – Wait Payment Accepted  Nhận được xác thức thanh toán – Payment Accepted  Xác nhận đơn hàng thành công – Confirm Order  Gửi email cho người dùng – Send Email  Gửi SMS cho người dùng – Send SMS ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 26. AGGREGATE  Có định danh duy nhất trong hệ thống  Được lưu trữ trong hệ thống  Chứa các business logic  Có dữ liệu và hành vi ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 27. ORDER AGGREGATE ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 28. PHÂN TÍCH COMMAND VÀ EVENT Command Event PlaceOrder CreateOrder OrderCreated SubmitOrder OrderSubmited SendSMS SendEmail PaymentAccepted ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 29. KẾT HỢP CÁC BOUNDED CONTEXT Order Process Manager PlaceOrder OrderCreated ConfirmOrder OrderConfirm PaymentAccpetd SendSMS SendEmail ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 30. PROCESS MANAGER PATTERN  Giới thiệu lần đầu 2004 trong cuốn: Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions (Gregor Hohpe - Bobby Woolf ) ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 31. ORDER PROCESS MANAGER Order OrderProcesManager Payments Notifications Command Event 1. PlaceOrder 2. CreateOrder 3. OrderCreated 4. PaymentAccepted 5. ConfirmOrder 7. SendEmail 6. SendSMS ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 32. PLACEORDER COMMAND Command Bus Web Application 1. PlaceOrder Command Process Manager CommandHandler Receive Command ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 33. CHANGE STATE, SAVE AND SEND COMMAND  Order Process Manager nhận PlaceOrder Command  Change to CreateOrder State  Save state and Send CreateOrder Command ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 34. ORDERPROCESS MANAGER OrderProcessManager Database Command Bus Save To DB Send CreateOrder to Command Bus ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 35. HANDLE CREATEORDER COMMAND Command Bus ProcessManage r 2. CreateOrder Command Order Aggregate CommandHandler Receive Command ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 36. ORDERCOMMAND HANDLER HANDLE CREATEORDER COMMAND  Receive CreateOrder Command  Get Order Aggregate  Process Create Order Logic  Save Order and Publish OrderCreated Event ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 37. ORDERCOMMAND HANDLER HANDLE CREATEORDER COMMAND Order Database Event Bus Save To DB Send OrderCreated Event to Event Bus ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 38. HANDLE ORDERCREATED EVENT Event Bus ProcessManager Order Aggregate OrderCreated ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 39. HANDLE ORDERCREATED EVENT  Change to WaitPaymentAccepted State  Save and Wait PaymentAccepted Event ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 40. HANDLE PAYMENTACCEPTED EVENT  Change to Confirmed State  Save state and send commands: - Send ConfirmCommand to Order - Send SendEmail to Notification Domain - Send SendSMS to Notification Domain ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 41. HANDLE PAYMENTACCEPTED EVENT OrderProcessManager Event Bus Command Bus Payment Order PaymentAccept ed ConfirmOrder SendEmail SendSMS Email ConfirmOrder SendEmail SendSMS SMS ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 42. ORDER AGGREGATE HANDLE CONFIRMORDER COMMAND  Update to Confirmed State  Save and Publish OrderConfirmed Event ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 43. READ SIDE HANDLE ORDERCONFIRMED EVENT  Receive OrderConfirmed Event  Update Read Database ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 44. READ SIDE HANDLE ORDERCONFIRMED EVENT Order Read DBEvent Bus Publish OrderCreated OrderReadDBHandler Update DB Query Data Thin Data Layer Read SideWrite Side Receive Event ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 45. CÁC ƯU ĐIỂM CỦA CQRS  Các logic thực thi rõ ràng  Phân tách thành các quá trình xử lý độc lập  Dễ dàng scale độc lập từng thành phần  Sử dụng tài nguyên tính toán hiệu quả hơn ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 46. NHẬN XÉT  Tất cả các thay đổi của object đều có event tương ứng  Quá trình cập nhật read side tương ứng với các sự kiện phát ra  Có thể sử dụng event để tái tạo lịch sử object. ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 47. EVENT SOURCING PATTERN ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 48. EVENT SOURCING PATTERN  Lưu trữ trạng thái của object là danh sách sự kiện thay đổi trạng thái của object  Lưu stream event của object  Load event stream để tái tạo tất cả trạng thái của object  Replay lại các event để xác định lịch sử thay đổi ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 49. ÁP DỤNG EVENT SOURCING CHO CQRS  Tất cả các tác động làm thay đổi trạng thái đơn hàng được coi là chuỗi các sự kiện  Thay đổi cấu trúc class nhưng không thay thế cấu trúc model  Thay đổi data context để lưu trữ event  Giữ nguyên toàn bộ cấu trúc của phần mềm ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 50. THAY ĐỔI CẤU TRÚC CLASS  Mỗi hành vi của object sẽ phát sinh một event tương ứng  Mỗi event sẽ được handle bởi một hàm update trạng thái của object  Khi khởi tạo object load lại toàn bộ event và thực thi ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 51. THAY ĐỔI CẤU TRÚC CLASS ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 52. THAY ĐỔI CẤU TRÚC CLASS base.Handles<OrderPlaced>(this.OnOrderConfirmed); … Public void ConfirmOrder(ConfirmOrder cmd) { this.Update(new OrderConfirmed()); } …. private void OnOrderPlaced(OrderConfirmed e) { //…. } ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 53. THAY ĐỔI DATA LAYER/DATA CONTEXT ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 54. CHUYỂN ĐỔI CQRS-ES Application Application Order For CQRS Order For ES OrderRepository For CQRS OrderRepository For ES DDD/CQRS: Business Logic không thay đổi Application Logic không thay đổi Chỉ thay đổi cấu trúc lưu trữ CRUD: Rất khó khăn để làm tương tự ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 55. ƯU ĐIỂM CỦA EVENT SOURCING PATTERN  Lưu trữ được lịch sử thay đổi của một đối tượng  Cho phép dễ dàng playback lại các sự kiện để xác định các vấn đề trong hệ thống ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 56. DEMO  Các tính năng cũ vẫn giữ nguyên  Có thể theo dõi được lịch sử đơn hàng  Không cần thêm phần log history nữa ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 57. CÁC VẤN ĐỀ KHÓ KHĂN  Hệ thống monitor  Việc gửi và nhận message ổn định  Chống trùng lặp việc xử lý message  Eventually consistency giữa read side và write side ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 58. GỬI MESSAGE ỔN ĐỊNH  Không có transaction giữa database và message queue Giải pháp:  Lưu state và các message chưa gửi đi trong một transation  Gửi message và xóa các message  Thiết lập chế độ chống trùng message trong message queue ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 59. GỬI MESSAGE ỔN ĐỊNH Undispatched Message States Message Queue Transaction Save Send Delete Undispatched Messages Lưu ý: cần phải chống trùng lặp message ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 60. IDEMPOTEMCY FILTERING  Lưu giữ message id nhận được  Kiểm tra trạng thái xử lý message khi nhận được message  Thiết lập chế độ chống gửi trùng message nếu message queue hỗ trợ.  Thiết kế logic để việc xử lý không bị ảnh hưởng bởi trung lặp message ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 61. EVENTUALLY CONSISTENCY GIỮA WRITE SIDE VÀ READ SIDE  Dữ liệu giữa read side và write side bị lệch Giải pháp:  Đánh version tăng dần cho dữ liệu  Kiểm tra version hiện tại khi submit: submited version = current version  Đánh version bằng timespan  Phải có giải pháp trong trường hợp bắt buộc dữ liệu giữa write side và read side phải strong consistency ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 62. VẤN ĐỀ CONCURRECY  Hai tác nhân cùng thay đổi trạng thái của hệ thống  Sử dụng cơ chế optimistic lock bằng timestamp ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 63. CÁC ĐIỂM THẮT CỔ CHAI  Giới hạn throughput của đường bus  Giới hạn của database ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 64. CÁC GIẢI PHÁP  Tăng số làn bus – partition bus  Sharding database – horizontal scaling  Non Blocking IO Programming  Using Priority Queue pattern ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 65. GIẢI QUYẾT VẤN ĐỀ THẮT CỔ TRAI Message Bus Message Bus Message Bus Message Bus Worker Worker Worker …. Shardlet Shardlet Shardlet Sharding dataMultiple Worker Partition Message Queue ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 66. UBER ARCHITECTURE ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  • 67. THANK YOU  Lê Minh Nghĩa  Facebook: https://www.facebook.com/NghiaLeMinh  Email: nghia.fit@gmail.com  Phone: 0936 073 986 Shared to be Share! ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia