O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

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

2.302 visualizações

Publicada em

[ITLC HN 12] Chuỗi SA, chủ đề "Ứng dụng mô hình thiết kế CQRS - ES nhằm xây dựng hệ thống có khả năng mở rộng cao" đã diễn ra từ 18:30 đến 22:00 ngày 22/10/2015.

Diễn giả Lê Minh Nghĩa - Trưởng nhóm kiến trúc phần mềm VinEcom (www.adayroi.com) đã chia sẻ "hăng máu" với lý thuyết, demo, kinh nghiệm, thực tế trải nghiệm, ... cùng 85 chuyên gia công nghệ đến từ các doanh nghiệp CNTT.

Xem thêm thông tin: https://www.facebook.com/events/1681302718768299/1685447021687202/
Cập nhật các sự kiện tiếp theo tại : https://facebook.com/itlchanoi

Publicada em: Software
  • DỊCH VỤ THIẾT KẾ POWERPOINT (Thiết kế profile cho doanh nghiệp--- Thiết kế Brochure--- Thiết kế Catalogue--- slide bài giảng--- slide bài phát biểu---slide bài TIỂU LUẬN, LUẬN VĂN TỐT NGHIỆP--- dạy học viên thiết kế powerpoint…)-----(Giá từ 8.000 đ - 10.000 đ/1trang slide)------ Mọi chi tiết vui lòng liên hệ với chúng tôi: điện thoại 0973.764.894 hoặc zalo 0973.764.894 (Miss. Huyền) ----- • Thời gian hoàn thành: 1-2 ngày sau khi nhận đủ nội dung ----- Qui trình thực hiện: ----- 1. Bạn gửi nội dung cần thiết kế về địa chỉ email: dvluanvan@gmail.com ----- 2. DỊCH VỤ THIẾT KẾ POWERPOINT báo giá chi phí và thời gian thực hiện cho bạn ----- 3. Bạn chuyển tiền tạm ứng 50% chi phí để tiến hành thiết kế ----- 4. Gửi file slide demo cho bạn xem để thống nhất chỉnh sửa hoàn thành. ----- 5. Bạn chuyển tiền 50% còn lại. ----- 6. Bàn giao file gốc cho bạn.
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui
  • Ad có slide để down về không cho em xin? :D
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui

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

  1. 1. CQRS – COMMAND AND QUERY RESPONSIBILITY SEGREGATION ITLC HANOI MONTHLY PUBLIC MEETUP
  2. 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. 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. 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. 5. KHẢ NĂNG MỞ RỘNG ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  6. 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. 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. 8. MÔ HÌNH CRUD ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  9. 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. 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. 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. 12. MÔ HÌNH ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  13. 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
  14. 14. CQRS ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  15. 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. 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. 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. 18. CONTEXT BOUNDARY Product Order Payment Notification ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  19. 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. 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. 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. 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. 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. 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. 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. 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. 27. ORDER AGGREGATE ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  28. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 38. HANDLE ORDERCREATED EVENT Event Bus ProcessManager Order Aggregate OrderCreated ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  39. 39. HANDLE ORDERCREATED EVENT  Change to WaitPaymentAccepted State  Save and Wait PaymentAccepted Event ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  40. 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. 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. 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. 43. READ SIDE HANDLE ORDERCONFIRMED EVENT  Receive OrderConfirmed Event  Update Read Database ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  44. 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. 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. 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. 47. EVENT SOURCING PATTERN ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  48. 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. 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. 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. 51. THAY ĐỔI CẤU TRÚC CLASS ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  52. 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. 53. THAY ĐỔI DATA LAYER/DATA CONTEXT ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  54. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 66. UBER ARCHITECTURE ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia
  67. 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
  68. 68. Q&A ITLC Hanoi (https://facebook.com/itlchanoi) - Le Minh Nghia

×