Triển Khai Giao Dịch Phân Tán Với Mô Hình TCC

Mô hình TCC (Try-Confirm-Cancel) là một trong các cách triển khai giao dịch phân tán

Giai đoạn TRYING chủ yếu thực hiện kiểm tra hệ thống kinh doanh và giữ lại tài nguyên CONFIRMING giai đoạn chủ yếu thực hiện xác nhận và hoàn tất giao dịch, khi giai đoạn TRYING thực hiện thành công và bắt đầu thực hiện giai đoạn CONFIRMING, mặc định giai đoạn CONFIRMING sẽ không xảy ra lỗi. Nghĩa là: chỉ cần TRYING thành công, CONFIRMING chắc chắn sẽ thành công. Giai đoạn CANCELING chủ yếu thực hiện khi có lỗi trong quá trình thực hiện kinh doanh, cần hoàn tác và giải phóng tài nguyên đã giữ lại. Tính toán đệm (idempotency) có nghĩa là kết quả thực hiện của một phương pháp kinh doanh được gọi một lần hoặc gọi nhiều lần là như nhau.

Ví dụ với một dự án thanh toán:

Khi hệ thống thanh toán nhận được yêu cầu thanh toán từ thành viên, cần thực hiện các thao tác: giảm số dư tài khoản thành viên, tăng điểm tích lũy thành viên (giả sử cần đồng bộ), tăng số dư tài khoản đối tác. Giả sử: hệ thống thành viên, hệ thống đối tác, hệ thống tích điểm là ba hệ thống con độc lập, không thể xử lý bằng cách sử dụng giao dịch truyền thống. Giai đoạn TRYING: chúng ta cần giữ lại số tiền trong tài khoản thành viên, tức là đóng băng số tiền (tổng đơn hàng) trong tài khoản thành viên. Giai đoạn CONFIRMING: chúng ta cần tăng số dư điểm tích lũy cho tài khoản thành viên và tăng số dư tài khoản cho đối tác. Giai đoạn CANCELING: giai đoạn này cần thực hiện là mở băng và giải phóng số tiền đã giữ trong tài khoản thành viên

Tất cả các thao tác trên cần đảm bảo tính toán đệm, cách thực hiện tính toán đệm có thể là:

1. Xử lý bằng khóa duy nhất, tức là mỗi lần gọi truyền vào khóa duy nhất, qua khóa này để phán đoán nghiệp vụ đã được thao tác chưa, nếu đã được thao tác thì không thao tác lại 2. Xử lý bằng máy trạng thái, thiết lập trạng thái cho dữ liệu nghiệp vụ, qua trạng thái nghiệp vụ để phán đoán có cần thực thi lại không

Ngoài ra: Bạn cũng có thể xem bài viết này, ở đây lấy hệ thống thanh toán của sàn thương mại điện tử truyền thống làm ví dụ để triển khai xử lý giao dịch phân tán, trình bày cũng khá sâu http://www.roncoo.com/article/detail/124243 TRYING, CONFIRMING, CANCELIING có thể hiểu tương tự như LOCK, COMMIT, ROLLBACK trong giao dịch SQL. Tính toán đệm chủ yếu được sử dụng để ngăn chặn việc gửi lại, vì các vi dịch vụ của giao dịch được triển khai phân tán, ngay cả có hỗ trợ giao dịch, chúng ta cũng không thể đảm bảo quá trình truyền có sẽ bị gián đoạn do mạng hoặc các vấn đề khác (ví dụ: bên nhận đã nhận và cập nhật thành công, nhưng do gián đoạn mạng, bên gửi không nhận được thông báo cập nhật thành công, trong trường hợp này chương trình thường sẽ trả về thông tin không thành công cho người dùng, và nếu người dùng nhầm tưởng rằng không thành công thì sẽ gửi lại yêu cầu, dẫn đến việc gửi lại giao dịch)

Thẻ: giao-dịch-phân-tán mô-hình-tcc tính-toán-đệm Microservices

Đăng vào ngày 30 tháng 5 lúc 16:36