1. Trang chủ
  2. » Tất cả

Đồ án 2 tìm hiểu event sourcing

30 3 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

TP HỒ CHÍ MINH, THÁNG 12 NĂM 2022 ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA CÔNG NGHỆ PHẦN MỀM ĐỒ ÁN 2 TÌM HIỂU EVENT SOURCING GIẢNG VIÊN HƯỚNG DẪN ThS NGUYỄN CÔNG HOAN S[.]

ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA CÔNG NGHỆ PHẦN MỀM ĐỒ ÁN TÌM HIỂU EVENT-SOURCING GIẢNG VIÊN HƯỚNG DẪN ThS NGUYỄN CÔNG HOAN Sinh viên thực hiện: Nguyễn Đức Phúc - 17520906 TP HỒ CHÍ MINH, THÁNG 12 NĂM 2022 LỜI CẢM ƠN Em xin gửi lời cảm ơn chân thành tri ân đến thầy Nguyễn Công Hoan hướng dẫn, tạo điều kiện cho em hoàn thành đồ án – Tìm hiểu chủ đề Event Sourcing Trong khoảng thời gian thực đồ án, em học hỏi thêm nhiều kiến thức, kinh nghiệm, biết thêm nhiều công nghệ Trong thời gian học đề tài, em vận dụng kiến thức tảng tích lũy đồng thời kết hợp với việc học hỏi nghiên cứu kiến thức Từ đó, em vận dụng tối đa thu thập để hoàn thành báo cáo đồ án tốt Tuy nhiên, q trình thực hiện, em khơng tránh khỏi thiếu sót Chính vậy, em mong nhận góp ý từ phía Cơ nhằm hồn thiện kiến thức mà em học tập hành trang để em thực tiếp đề tài khác tương lai Xin chân thành cảm ơn Thầy Thành phố Hồ Chí Minh, tháng 12 năm 2022 Nguyễn Đức Phúc NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN Tp.HCM, ngày tháng 12 năm 2022 GVHD ThS Nguyễn Công Hoan Mục Lục Tổng quan I Giới thiệu Event I.1 I.1.1 Event gì? I.1.2 Events thay đổi I.1.3 Event xảy lần I.1.4 Events xảy Giới thiệu Event-Sourcing I.2 I.2.1 I.3 Event Sourcing gì? Domain Events gì? II Cách thức hoạt động Event Sourcing 10 III Khả ứng dụng 14 IV Event Sourcing: Xây dựng Event Storage 14 V Ứng dụng demo minh họa 17 VI Tổng kết 29 Tài liệu tham khảo 30 I Tổng quan I.1 Giới thiệu Event I.1.1 Event gì? Một event trình phát triển phần mềm xảy xung quanh chúng ta, thứ mà chọn để đưa vào hệ thống, hay nói cách khác thứ quan trọng đáng ý Các ví dụ phổ biến bao gồm: • Lưu trữ event cho việc phân tích • Hỗ trợ việc giao tiếp service cách xuất event ứng dụng • Sử dụng Event Sourcing để cung cấp nguồn trạng thái liệu Event buiding block mà trở nên phổ biến cho nhiều trường hợp sử dụng Nhiều sản phẩm phần mềm dựa thiết kế event core buiding block Giống buiding block khác định nghĩa phần quan trọng để nhận tất event tương đương Đầu tiên xem thuộc tính event phổ biến trường hợp sử dụng sản phẩm liên quan I.1.2 Events thay đổi Khi điều xảy giới xung quanh thực tế Chúng ta thay đổi lịch sử việc mang thừa nhận đến thiết kế phần mềm điều quan trọng phát triển hệ thống Bạn mơ hình hóa giới cách lắp ráp chúng lại với để làm nhận thức giới xung quanh Những điều xảy liên tục khơng phải thứ nắm bắt chúng Hệ thống phần mềm hỗ trợ ghi lại nhớ điều quan trọng điều lý event mơ hình tuyệt vời I.1.3 Event xảy lần Một event xảy lần Nếu điều tương tự xảy lần coi event khác định nghĩa event xảy sau event Khi bạn đến thăm nhà bạn bè bạn bấm chng ba lần họ mở cửa chậm chễ có lần xảy event tiếng chng kêu Đơi khi, mặt kỹ thuật chọn tổng hợp nhiều event chi tiết thành event lớn lý hiệu suất đơn giản có ý nghĩa hợp lý ứng dụng mà phát triển Về mặt logic, khởi đầu tốt để tách event làm cho chúng rõ ràng tốt I.1.4 Events xảy Một event luôn miêu tả xảy thực tế Điều hàm ý nhìn event thấy xảy khứ điều lý viết event khứ (past tense) Nó thực hành tốt để giới hạn naming convention event dễ dàng nhầm lẫn với request đến hệ thống Request bị từ chối thường không lưu trữ lịch sử request trừ cho mục đích phân tích Kỹ thuật triển khai Một event tập hợp liệu, điều cốt lõi Event khơng nắm giữ hành động yêu cầu framework định Để sử dụng event bạn cần xếp theo thứ tự/ không theo thứ tự liệu từ serializable format chúng gửi lưu trữ kho lưu trữ bền vững Một lựa chọn tốt điểm JSON dễ đàng đễ đọc, phần ngắn format nói chung hỗ trợ tất ngơn ngữ lập trình Về mặt cơng nghệ, liệu event nên bao gồm timstamp để đánh dấu event xảy liệu JSON nó, định danh (kiểu UUID lựa chọn tốt) để phân định event với Triển khai event sử dụng JSON giống bên dưới: I.2 Giới thiệu Event-Sourcing I.2.1 Event Sourcing gì? Event Sourcing nắm bắt tất thay đổi trạng thái ứng dụng dạng chuỗi kiện Chúng ta truy vấn trạng thái ứng dụng để tìm trạng thái điều giúp trả lời nhiều câu hỏi Tuy nhiên, có lúc khơng muốn xem đâu mà cịn muốn biết đến cách nào.Nó đảm bảo tất thay đổi trạng thái ứng dụng lưu trữ dạng chuỗi kiện Chúng tơi khơng truy vấn kiện mà cịn sử dụng nhật ký kiện để tái tạo lại trạng thái khứ làm sở để tự động điều chỉnh trạng thái để đối phó với thay đổi có hiệu lực từ trước Ý tưởng Event Sourcing đảm bảo thay đổi trạng thái ứng dụng ghi lại đối tượng kiện, thân đối tượng kiện lưu trữ theo trình tự mà chúng áp dụng thời gian tồn trạng thái ứng dụng I.3 Domain Events gì? Domain Events khái niệm quan trọng bên Domain-Driven Design Tuy nhiên, khái niệm Domain Events chưa đưa vào sách tuyệt vời Eric Evan Domain-Driven Design lần xuất thêm lần sau, điều giải thích cách tập trung xung quanh event khác với cách sử dụng để thiết kế hệ thống Domain Events phần Domain Model, để định nghĩa xác, ta phải đưa bối cảnh Trong Domain-Driven Design tạo model hợp lệ bên Bounded Context Bối cảnh giải pháp cho vấn đề cụ thể mà cần giải quyết, subsystem microservice nguyên ứng dụng Nguyên tắc cốt lõi Domain Model giống – hợp lệ bên bối cảnh Câu hỏi định nghĩa Domain Events: • Các bên liên quan/business có quan tâm đến khơng ? • Nó định hệ thống hay hệ thống khác ? • Nó có gói gọn lý đằng sau thay đổi không ? Aggregates tạo Domain Events Một Domain Events event, sản sinh từ model kết việc định bên domain Bên model, Aggregates có vai trị bảo trì business rule nơi triển khai điểm định model, Aggregates có trách nhiệm cho việc tạo Domain Events Ảnh giúp ta hình dung Domain Events phần Domain Model Chúng không gửi từ hệ thống khác user gửi đến hệ thống thực hành động Trong thuật ngữ kỹ thuật, gọi message commands Kỹ thuật triển khai Domain Events có số triển khai chung cho kiểu event khác Vì cần có aggregateId, aggregateType, eventType liệu để hỗ trợ nơi sử dụng xử lý chúng Dữ liệu nên serializable giống kiểu event khác bạn không nên định nghĩa object Domain Event với references nhiều cấp Khi Domain Event? Để đủ điều kiện Domain Events event nên có ý nghĩa sâu quan trọng đến business hệ thống Mọi thứ xảy xung quanh miêu tả event khơng có nghĩa cần triển khai thứ xảy hệ thống phần mềm Những ví dụ sau khơng thích hợp để coi Domain Events: • Một vài kỹ thuật (click button, throw exception, ) xảy muốn ghi lại xử lý khơng miêu tả ubiquitous language lĩnh vực xây dựng • Một số điều xảy bên ngồi bounded context Có thể Domain Event hệ thống khác bounded context khác biệt • Request tới hệ thống, nên định nghĩa Commands events chúng bị từ chối hệ thống Bắt đầu nào? Bắt đầu với Domain Events thử thách lớn kiến trúc hệ thống Nếu bạn thiết kế ứng dụng sử dụng Domain-Driven Design (DDD), bạn bắt đầu việc lưu events với trạng thái ứng dụng phần Khi bạn bắt đầu thêm Domain Events tới ứng dụng bạn quan tâm đến Event Sourcing, nơi mà Domain Events trung tâm thơng tin Lập trình với events build clock thời gian để bắt đầu việc học thường có giá trị theo thời gian bạn nhận thấy rắc rối phục vụ nhu cầu người kinh doanh với liệu Bạn sử dụng Event Sourcing để bắt đầu sử dụng Domain Events Domain Events Event Sourcing có liên quan? Event Sourcing architectural pattern, áp dụng bên Bounded Context để cung cấp nguồn liệu thời điểm Có nhiều cách hiểu khác Event Sourcing, hiểu đơn giản: Event Sourcing bạn sử dụng Domain Events để lưu trữ trạng thái Aggregate bên Bounded Context Sai lầm cạm bẫy phổ biến Bắt đầu với Domain Events cảm thấy lúng túng, khó khăn có vài điều cần nhớ để ln hướng với mơ hình hóa bạn Domain Events mang giá trị thực đến thiết kế phần mềm bạn Cố gắng mơ hình hóa thứ Domain Model nên hữa ích với vấn đề mà bạn giải Model để bắt buộc business rule mà bạn có tốt kiến trúc nên cung cấp hỗ trợ tích hợp đủ đơn giản cho bạn kết nối ứng dụng với hệ thống khác, nghĩa khơng cần thứ khơng liên quan đến cốt lõi business Một cạm bẫy phổ biến mà lập trình viên hay mắc phải cố gắng model thứ liên quan đến vấn đề Đây nơi mà phân biệt Domain Event events khác trở nên hữu ích nhiều events khác xảy (kỹ thuật ngoại vi) coi event ghi nhật ký mà lưu trữ cho mục đích phân tích Khơng khởi tư CRUD Một sai lầm phổ biến bắt đầu với Domain Events DomainDriven Design nói chung khơng hết tồn đường tìm thực diễn domain Mọi người thường dễ dàng rơi vào cạm bẫy việc đặt tên tất events: SomethingCreated, SomethingUpdated SomethingDeleted Mặc dù thân việc khơng phải vấn đề khơng tận dụng sức mạnh ý nghĩa bối cảnh thực tế mà Domain Event mang lại Bạn đánh ý định thực event việc đọc nhật ký event sau khơng mang lại nhiều giá trị Domain Events có điểm chung với Event Sourcing ? Chắc chắn từ "event" tên chúng Nhưng ra, nói kiến trúc nhà nhà phát triển dự án, hội nghị đào tạo, thường nghe domain event phù hợp với event sourcing event sourcing ý tưởng nguồn domain events Trong viết tơi mong muốn tóm lược cá nhân tơi khơng đồng tình với quan điểm Trước tiên tơi tranh luận không chia sẻ cách nhìn này, tơi muốn đảm bảo cách hiểu đầy đủ domain events event sourcing II Cách thức hoạt động Event Sourcing Hãy xem xét ví dụ đơn giản để thực với thông báo giao hàng Trong ví dụ này, có nhiều tàu biển cả, cần biết họ 10 • Lưu trữ danh sách aggregate (đối tượng gây kiện) hệ thống • Mỗi aggregate kèm với Version aggregate Version sử dụng để check concurrency conflict • Cột Type: lưu kiểu aggregate Hoạt động Các bảng Event Log, Aggregate hỗ trợ hoạt động chính: • SELECT tất kiện diễn AggregateID Khi tiến hành SELECT cần đảm bảo ghi lấy theo trình tự thời gian kiện diễn hệ thống • INSERT kiện diễn aggregate vào bảng EVENT_LOG Q trình INSERT application code Stored Procedure Nếu dùng Stored Procedure bạn tham khảo đoạn pseudo-code sau: • Với đoạn lệnh Stored Procedure trên, trước tiên hệ thống check xem bảng AGGREGATES có tồn aggregate với ID bạn muốn tìm khơng Nếu khơng có, hệ thống INSERT ghi vào bảng AGGREGATE với version = Sau đó, hệ thống tiến hành kiểm tra concurrency conflict: Nếu version aggregate mà bạn update khác với version aggregate bảng AGGREGATES, hệ thống thông báo lỗi concurrency conflict Nếu version khớp nhau, hệ thống chạy vòng lặp qua events INSERT event vào bảng EVENT_LOG, event có version độc tăng dần Cuối cùng, hệ thống cập nhật version aggregate bảng AGGREGATES Snapshots Với Snapshot, sau chuỗi n events xảy với aggregate, 16 replay events xảy ra, qua dựng lại trạng thái aggregate thời điểm khứ, sau lưu trạng thái vào bảng Snapshot: Snapshot sử dụng để tránh trường hợp phải liên tục replay lại từ đầu tất event xảy aggregate Để tạo Snapshot, ta sử dụng background process; background process tiến hành check định kỳ aggregate: aggregate trải qua số lượng events vượt số lượng định (tùy vào yêu cầu application) tạo Snapshot Quy trình diễn sau: • JOIN bảng Aggregate Snapshot theo AggregateID • Sử dụng điều kiện WHERE: (Version bảng Aggregate - Version bảng Snapshot) > số định tùy theo yêu cầu application • Sau lấy aggregate thỏa mãn điều kiện WHERE trên, ta sử dụng background process để tạo Snapshot cho aggregates Các Snapshot tạo lưu vào bảng Snapshot V Ứng dụng demo minh họa Tên demo: Tracking Ships Ngôn ngữ: C# Domain model tàu chở hàng hóa di chuyển cảng Có bốn loại event model: Arrival: tàu cập cảng Departure: tàu rời cảng 17 Load: hàng hóa chất lên tàu Unload: dỡ hàng khỏi tàu Hãy lấy ví dụ đơn giản việc di chuyển tàu xung quanh class Tester 18 Để test hoạt động, cần kiện đến Bộ xử lý kiện đơn giản Mỗi kiện có phương pháp xử lý Arrival event cần nắm bắt liệu phương thức xử lý để chuyển tiếp kiện đến đối tượng miền thích hợp Vì vậy, kiện thực logic lựa chọn xử lý Việc xử lý miền logic tàu thực 19 Sự kiện khởi hành đặt Ship's port thành trường hợp đặc biệt ta nhận thấy việc chuyển kiện vào đối tượng miền Ở có lựa chọn việc liệu kiện chuyển liệu mà đối tượng miền cần để xử lý hay chuyển vào kiện Bằng cách chuyển kiện, kiện khơng cần biết xác liệu mà logic miền cần Nếu kiện thu liệu bổ sung sau đó, khơng cần cập nhật chữ ký Nhược điểm việc chuyển kiện logic miền biết kiện Trên ví dụ đơn giản Bây ta có ví dụ khác tàu vận chuyển sách xem coi có qua Canada hay khơng Vì hàng hóa di chuyển tàu bốc dỡ, nên hàng hóa cho biết liệu có gặp phải mối nguy hiểm phía bắc hay không Rất may rủi ro xảy thực cảng, cần vùng biển an tồn Vì vậy, kiện đến phải theo dõi điều 20 ... ngày tháng 12 năm 20 22 GVHD ThS Nguyễn Công Hoan Mục Lục Tổng quan I Giới thiệu Event I.1 I.1.1 Event gì? I.1 .2 Events thay đổi I.1.3 Event xảy... I.1.4 Events xảy Giới thiệu Event- Sourcing I .2 I .2. 1 I.3 Event Sourcing gì? Domain Events gì? II Cách thức hoạt động Event Sourcing ... Nguyễn Công Hoan hướng dẫn, tạo điều kiện cho em hoàn thành đồ án – Tìm hiểu chủ đề Event Sourcing Trong khoảng thời gian thực đồ án, em học hỏi thêm nhiều kiến thức, kinh nghiệm, biết thêm nhiều

Ngày đăng: 01/02/2023, 21:12

Xem thêm:

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w