2 điểm bởi GN⁺ 2023-12-18 | 1 bình luận | Chia sẻ qua WhatsApp

Hướng dẫn chuyển đổi từ dữ liệu quan hệ sang sự kiện

  • Trong thế giới event sourcing, dữ liệu nghiệp vụ được bảo toàn dưới dạng sự kiện mà không bị mất mát.
  • Sự kiện thể hiện những gì đã xảy ra và được lưu sau mỗi thao tác.
  • Luồng sự kiện là danh sách của mọi sự kiện đã được ghi lại, có tính bất biến, và các sai sót trong quá khứ có thể được sửa bằng cách thêm sự kiện mới.

1. Tìm các cột trạng thái

  • Giá trị của cột trạng thái có thể phản ánh các giai đoạn trong vòng đời của dữ liệu.
  • Ví dụ, một đơn hàng có thể được khởi tạo, được giao đi và được thanh toán.
  • Những trạng thái này có thể được chuyển thành các sự kiện như Order Initiated, Order Shipped, Order Paid.

2. Kiểm tra các cột ngày tháng

  • Các cột ngày tháng có thể cung cấp thông tin về những sự kiện quan trọng trong quy trình.
  • ShipmentDate, DeliveryDate, OrderPlacementDate v.v. có thể cho biết các thuật ngữ nghiệp vụ và giúp đưa vào các sự kiện mới.

3. Phân tích tính chọn lọc của cột

  • Các cột có thể nhận giá trị rỗng có thể được cung cấp về sau hoặc là tùy chọn.
  • Các cột bắt buộc nên được cung cấp ngay trong sự kiện Order Initiated đầu tiên.

4. Tìm bảng có nhiều quan hệ 1-nhiều nhất

  • Trong event sourcing, dữ liệu được nhóm quanh quy trình nghiệp vụ để hướng tới xử lý hiệu quả.
  • Những bảng có nhiều quan hệ 1-nhiều có thể là ứng viên cho kiểu stream.

5. Đưa vào các sự kiện tường minh

  • Khi di chuyển dữ liệu quan hệ sang sự kiện, không nên tái sử dụng các sự kiện mới phát hiện trong lúc import; cần cung cấp tường minh sự kiện Order Imported.

6. Thử nghiệm và kiểm chứng

  • Hãy thử prototype trong môi trường an toàn, so sánh kết quả với kỳ vọng, và lặp lại một cách thận trọng, không vội vàng.

Ý kiến của GN⁺

  • Điều quan trọng nhất trong bài này là tầm quan trọng của một cách tiếp cận mới nhằm bảo toàn dữ liệu nghiệp vụ trong quá trình chuyển từ cơ sở dữ liệu quan hệ sang event sourcing.
  • Bài viết này thú vị vì nó đưa ra một cách để hiểu và tận dụng vòng đời dữ liệu tốt hơn, vượt ra ngoài phương thức quản lý dữ liệu truyền thống.
  • Event sourcing không chỉ hữu ích từ góc độ kỹ thuật mà còn có thể giúp xây dựng sự thấu hiểu chung giữa nhóm nghiệp vụ và nhóm kỹ thuật.

1 bình luận

 
GN⁺ 2023-12-18
Ý kiến trên Hacker News
  • Khuyến nghị dùng PostgreSQL và công cụ báo cáo FOSS

    • Nếu ứng dụng đã dùng PostgreSQL, nên lưu dữ liệu sự kiện vào PostgreSQL và sử dụng các công cụ báo cáo FOSS như Apache Superset, Metabase.
    • Dùng PostgreSQL cho đến khi dữ liệu đạt khoảng 2TB, sau đó quyết định liệu có cần 2TB dữ liệu online hay chỉ cần bản tóm tắt theo ngày/giờ.
    • Trong một trường hợp khách hàng, hệ thống đang xử lý hơn 10TB dữ liệu và 1.500 sự kiện mỗi giây; dữ liệu chi tiết được giữ online trong 2 ngày, phần còn lại được tổng hợp rồi chuyển sang S3 để có thể truy vấn qua Athena SQL.
    • Sử dụng AWS RDS multi-AZ để hỗ trợ tự động failover, và một kỹ sư duy nhất quản lý toàn bộ với dưới 5 giờ mỗi tháng.
    • PostgreSQL cung cấp một hệ thống duy nhất để lưu trữ dữ liệu ở một nơi, học, quản trị và mở rộng.
    • Ngay cả nhân sự không kỹ thuật cũng có thể dễ dàng tạo biểu đồ trong các hệ thống như Metabase hoặc Preset.
    • PostgreSQL đang cải thiện qua từng năm, và khi cần có thể mở rộng thêm thông qua các hệ thống tương thích PostgreSQL như Aurora, TimescaleDB, CitusDB.
  • Khi nào nên dùng kiến trúc hướng sự kiện

    • Nếu khách hàng thực hiện một hành động cụ thể và mong đợi phản hồi, đó không phải hướng sự kiện mà là mô hình request/response.
    • Hướng sự kiện có nghĩa là xảy ra trong những tình huống không được dự đoán trước. Ví dụ, khi bạn push code lên GitHub và một bản build được kích hoạt.
  • Chia sẻ trải nghiệm hoài nghi về event sourcing

    • Một nhóm từng cân nhắc event sourcing, nhưng cuối cùng quyết định không dùng vì không thấy lợi ích rõ ràng và vì rủi ro của việc thử thứ mới.
    • Họ không tiếc vì đã bỏ lỡ cơ hội học hỏi, và xem việc không lao vào một bài toán phức tạp khi chưa cần là điều tích cực.
  • Tính hữu ích của mô hình hóa domain event

    • Mô hình hóa domain event hữu ích để giao tiếp với các chuyên gia miền đang tìm cách giải quyết vấn đề.
    • Khi triển khai hệ thống cần cung cấp audit trail cho state machine kéo dài trong thời gian dài, tốt hơn nên dùng các công cụ như Temporal.io/durable functions.
    • Các công cụ này dùng event sourcing ở bên trong và buộc bạn viết code có tính đến de-duplication và idempotency.
  • Câu hỏi về cách triển khai event sourcing

    • Thiếu giải thích về cách tái dựng trạng thái hiện tại một cách hiệu quả từ event stream và cách mô hình hóa event stream trong cơ sở dữ liệu.
  • Bottom-up so với top-down, tùy biến so với phổ dụng

    • Cách tiếp cận top-down bắt đầu từ miền nghiệp vụ rồi ánh xạ việc triển khai theo công nghệ, công cụ và vendor sẵn có.
    • Cách tiếp cận bottom-up bắt đầu từ công nghệ, công cụ và vendor sẵn có rồi ghép lại thành một giải pháp hoạt động được.
    • Cách tiếp cận tùy biến bao gồm DDD, CQRS/ES, Sagas, TBUI, GraphQL, kiểu dữ liệu đại số, v.v.
    • Cách tiếp cận phổ dụng bao gồm RDBMS, CRUD, REST, giao dịch ACID, CDC, UI quản trị phổ dụng, no-code/low-code, kiểu bị giới hạn/phổ dụng, v.v.
  • Ủng hộ và phê bình kiến trúc dựa trên sự kiện

    • Có sự ủng hộ đối với kiến trúc dựa trên sự kiện, nhưng bài viết đó đã thất bại trong việc truyền đạt rõ ràng luận điểm của mình.
    • Nếu tập trung vào khác biệt giữa quan hệ dữ liệu và hành vi nghiệp vụ, việc rời xa kho dữ liệu quan hệ vận hành sẽ trở nên rõ ràng hơn.
  • Event sourcing và nhu cầu về tính quan hệ

    • Dù event sourcing có nhiều ưu điểm, vẫn cần đến tính quan hệ.
    • Nếu toàn bộ tính quan hệ chỉ được ngầm thể hiện trong code ở tầng ứng dụng thì điều đó là không thể chấp nhận.
    • Cần có cách truy vấn tính quan hệ hoặc duy trì các view quan hệ luôn được cập nhật.
  • Ủng hộ dữ liệu quan hệ

    • Quyết định tránh độ phức tạp và trung thành với dữ liệu quan hệ truyền thống.
  • Nhận thức mới về thiết kế hướng sự kiện

    • Gần đây có người mới biết đến thiết kế hướng sự kiện, và trong lúc cân nhắc cấu trúc dữ liệu tối ưu trong một thế giới do AI chi phối, họ đã đi đến kết luận tương tự.
    • Họ cho rằng thiết kế hướng sự kiện sẽ có giá trị nếu nó giúp quản lý độ phức tạp và thực sự cho phép tận dụng dữ liệu.
    • Họ dự đoán trong vài năm tới, khi AI có thể truy vấn với tri thức về mọi sự kiện nghiệp vụ, thiết kế hướng sự kiện sẽ trở nên phổ biến.