Khôi phục bản đồ mongodb
Thiết kế và thao tác với cơ sở dữ liệu như thế nào luôn là một vấn đề vô cùng khó khăn khi bạn thực hiện một dự án Microservice. Ở bài viết này, mình sẽ phân tích các pattern để thiết kế cơ sở dữ liệu cùng với ưu nhược điểm của mình Show Hãy tưởng tượng, bạn xây dựng một hệ thống thương mại điện tử (viết thế cho oách) với Microservice Architecture. Ta cần có một cơ sở dữ liệu ở định dạng như sau. Lão Văn Tuấn @kaitou229 Theo dõi 1. 3K 59 13 Đã đăng vào ngày 8 tháng 19 năm 2019 6. 17 CH 12 phút đọc 10. 2k 1 17 Tìm hiểu về Microservices - Phần 3. Quản lý cơ sở dữ liệu trên Microservices
Thiết kế và thao tác với cơ sở dữ liệu như thế nào luôn là một vấn đề vô cùng khó khăn khi bạn thực hiện một dự án Microservice. Ở bài viết này, mình sẽ phân tích các pattern để thiết kế cơ sở dữ liệu cùng với ưu nhược điểm của mình Hãy tưởng tượng, bạn xây dựng một hệ thống thương mại điện tử (viết thế cho oách) với Microservice Architecture. Ta cần có một cơ sở dữ liệu ở định dạng như sau. 1. Request
2. cơ sở dữ liệu dùng chungĐây là dạng Cơ sở dữ liệu được chia sẻ cho nhiều dịch vụ. Các dịch vụ được tự do truy cập các bảng của nhau để đảm bảo giao dịch ACID Ví dụ. OrderService và CustomerService tự do truy cập các bảng của nhau. OrderService có thể sử dụng giao dịch ACID sau khi đảm bảo rằng một đơn đặt hàng mới sẽ không vi phạm giới hạn tín hiệu của khách hàng
Lợi ích
Un mode
3. Cơ sở dữ liệu cho mỗi dịch vụĐây là dạng Cơ sở dữ liệu dành riêng cho mỗi máy chủ. Các dịch vụ khác nếu muốn thao tác với DB này thì cần phải thông qua API của dịch vụ quản lý DB đó With ví dụ ban đầu, ta có sơ đồ cho cấu trúc của mẫu này như sau. Cơ sở dữ liệu của dịch vụ là một phần của việc triển khai dịch vụ đó. Nó không thể truy cập trực tiếp bởi các dịch vụ khác Có một số cách khác nhau để giữ DB của mỗi dịch vụ là riêng tư. Bạn không cần phải cung cấp cơ sở dữ liệu máy chủ cho mỗi dịch vụ. Ví dụ đối với SQL
Bảng riêng cho mỗi dịch vụ và lược đồ cho mỗi dịch vụ sẽ có chi phí thấp nhất và việc sử dụng lược đồ cho mỗi dịch vụ tốt hơn vì nó làm cho quyền sở hữu trở nên rõ ràng. Trong khi đó, một số dịch vụ có lượng truy cập cao sẽ cần có máy chủ cơ sở dữ liệu của riêng nó (Database-server-per-service) Lợi ích
Un mode
Có nhiều mô hình/giải pháp khác nhau để giải quyết các truy vấn thanh toán và giao dịch trên nhiều dịch vụ
4. mô hình sagaĐối với các hệ thống lựa chọn mô hình Cơ sở dữ liệu cho mỗi Dịch vụ, mỗi dịch vụ sẽ có một Cơ sở dữ liệu riêng. Tuy nhiên, một số giao dịch cần trải rộng trên nhiều dịch vụ. You need a machine to ensure the best system of data on the serivces Giải pháp được đưa ra như sau. Ta sẽ coi mỗi trải nghiệm giao dịch trên nhiều dịch vụ là một Saga. Và mỗi một Saga là một chuỗi các bộ giao dịch cục bộ trên từng dịch vụ khác nhau. Nếu một bộ giao dịch cục bộ thất bại, Saga sẽ thực hiện một loạt các giao dịch để khôi phục các thay đổi đã được thực hiện trước đó. Có 2 cách để phát triển Saga a. Câu chuyện dựa trên sự kiện/vũ đạoDịch vụ đầu tiên thực hiện giao dịch và sau đó xuất bản một sự kiện. Sự kiện này được lắng nghe bởi một hoặc nhiều dịch vụ thực hiện các giao dịch cục bộ và xuất bản (hoặc không) các sự kiện mới Phân tán giao dịch kết thúc khi dịch vụ cuối cùng thực hiện bộ cục bộ giao dịch của nó và không xuất bản bất kỳ sự kiện nào hoặc sự kiện được xuất bản không được nghe thấy bởi bất kỳ dịch vụ nào của saga Trong ví dụ này, hệ thống thương mại điện tử sẽ tạo ra đơn đặt hàng như sau
Trong trường hợp trạng thái của đơn hàng cần cập nhật liên tục thì Order Service sẽ lắng nghe tất cả các sự kiện và cập nhật trạng thái cho đơn hàng Trong trường hợp xảy ra lỗi trong chuỗi giao dịch cục bộ. You must rollback những gì đã thay đổi. Ví dụ như một lỗi trong Stock Service
Mô hình này thực sự rất dễ hiểu và các dịch vụ có sự kết nối là vô cùng chậm chạp. Nếu giao dịch của bạn chỉ có từ 2 đến 4 bước thì đây sẽ là sự lựa chọn tuyệt vời. Tuy nhiên, chúng sẽ trở nên khó khăn khi bạn muốn bổ sung, mở rộng giao dịch. Nó cũng gây khó khăn cho việc kiểm tra vì bạn phải chạy tất cả các dịch vụ b. Câu chuyện dựa trên chỉ huy/dàn nhạcSẽ có một dịch vụ mới chịu trách nhiệm điều phối logic của Saga. Nó chịu trách nhiệm duy nhất là nói cho mỗi dịch vụ phải làm gì và khi nào. Dịch vụ Saga giao tiếp với từng dịch vụ theo kiểu lệnh/trả lời để cho họ biết thực hiện thao tác nào. Trong ví dụ này, hãy cùng tìm hiểu cách hệ thống thương mại điển tự hoạt động với Command/Orchestration
Việc khôi phục lại Saga trở nên dễ dàng hơn nhiều khi bạn có một Dàn nhạc điều khiển mọi thứ.
Rõ ràng cách tiếp cận này tốt hơn vì nó tập trung vào việc điều phối các giao dịch phân tán, làm giảm sự phức tạp của các dịch vụ vì chúng chỉ cần quan tâm đến việc thực thi/trả lời các lệnh. Họ cũng đang làm công việc triển khai, thử nghiệm hay quản lý rollback trở nên dễ dàng hơn. Đồng thời làm giảm mức độ phức tạp khi bạn muốn thêm các bước mới vào giao dịch Chúng ta đã tìm hiểu cách thiết kế và thao tác với cơ sở dữ liệu đối với một hệ thống áp dụng kiến trúc microservices. Hi vọng bài viết này sẽ giúp các bạn có cái tổng quan cũng như hiểu hơn về cách hoạt động của các hệ thống nhìn microservices |