Professional Documents
Culture Documents
Distributed Transaction in Microservice-170114100126
Distributed Transaction in Microservice-170114100126
in Microservice
Lê Minh Nghĩa
Solution Architect at Tiki.Vn
Contents
1. Distributed Transaction Problem.
2. CAP Theorem
3. Replicate Model
5. Implementation
6. Case Study
Phần 1.
Các kiến thức căn bản
Distributed Transaction
Problem
Message External
Database Caching
Queue Service
Transaction
Transaction phải đảm bảo tính ACID:
• Avalaibility
• Partition Tolerant
• Avaialability
• Partition Tolerance
• Luôn đảm bảo ghi log các quá trình thay đổi
Message External
Database Caching
Queue Service
Problems in Microservice
• Tiến hành replicate các thay đổi một cách ổn định tới
các nguồn đích
• Xây dựng cấu trúc log, lưu trữ các thay đổi muốn
gửi đi và gửi bất đồng bộ tới nguồn đích
Service
Message
Queue
BackGround
Business Log Worker
Data Data
Other Data
Sources
2. Event Sourcing Pattern
• Giảm thiểu chi phí maitain khi chỉ cần đảm bảo
message queue available. Các Service không
cần available tại cùng một thời điểm
6. Integration Model
6. Integration Model
Log:
• Đảm bảo các dữ liệu cần gửi đi được lưu trữ ổn định. Đảm bảo business data và log data luôn được lưu trữ
ổn định.
Background Worker:
• Đảm bảo quá trình gửi dữ liệu từ log tới message queue ổn định: chắc chắn gửi được và gửi đúng thứ tự.
Message Queue:
• Đảm bảo các message được delivery đúng thứ tự gửi vào
• Trong trường hợp bắt buộc đòi hỏi Consistency cần phải đánh giá
lại mô hình:
2. Có thể điều chỉnh nghiệp vụ được không? Có trade off được giữa
đòi hỏi tính nhất quán và khả năng mở rộng không?
Order Catalog
Service Service
2. Place Order
3. Gửi một lệnh trừ tồn
4. Nếu không nhận được lệnh trừ tồn thì sau một khoảng
thời gian nhất định thì rollback lại số lượng tồn.
2. Bài toán trừ tiền
Order
Service Catalog
Service
3. Gửi một lệnh trừ tiền
Request Queue
2. Place Order
5. Nếu không nhận được lệnh trừ tiền thì sau một khoảng
thời gian nhất định thì rollback lại tiền cho người dùng
3. Bài toán tính tiền gói hàng
• Kịch bản: giả sử một khách hàng mua 2 sản phẩm trị giá 200k, mỗi món
100k. Đã trả trước 150k, hàng được chia làm hai gói, giao hai lần. Cần
thu khách hàng thêm 50k.
• Lần 1 đi giao món thứ nhất, không phải thu gì. Đã trừ 100k vào số tiền đã
trả. Số tiền khách hàng còn là 50k.
• Điều gì sẽ xảy ra nếu ngay món hàng 2 xuất giao, thì món hàng thứ nhất
bị giao lỗi và phải cập nhật lại số tiền của khách hàng? Kịch bản hợp lý
nhất: khách hàng không phải trả thêm tiền.
• Nếu hệ thống được chia làm hai service: service để quản lý hàng tại trạm
và service quản lý hàng đi giao. Trong trường hợp này handle
consistency kiểu gì?
Analysis
Khó khăn:
• Không đồng thời ghi dữ liệu vào nhiều nguồn khác nhau.
• Lưu trữ log để đẩy các thay đổi một cách ổn định sang các data
source khác
• Nên sử dụng message queue là nền tảng chính cho việc tích hợp
bất đồng bộ giữa các service. Hạn chế sử dụng gọi chéo api.
• Đánh giá việc phân chia service phù hợp với đòi hỏi về consistency
dữ liệu.
Thank you!