Transcript
Page 1: Distributed Transaction in Microservice

Distributed Transaction in Microservice

Lê Minh NghĩaSolution Architect at Tiki.Vn

Page 2: Distributed Transaction in Microservice

Contents1. Distributed Transaction Problem.

2. CAP Theorem

3. Replicate Model

4. Consistency and Eventually Consistency

5. Implementation

6. Case Study

Page 3: Distributed Transaction in Microservice

Phần 1. Các kiến thức căn bản

Page 4: Distributed Transaction in Microservice

Distributed Transaction Problem

• Là vấn đề đòi hỏi đảm bảo tính nhất quán của dữ liệu trên môi trường phân tán

• Có sự tham gia nhiều hơn một data source vào một quá trình xử lý

Page 5: Distributed Transaction in Microservice

Data Sources

Database

Service

Write

Caching Message Queue

External Service

Các data source đa dạngPhải đảm bảo dữ liệu giữa các nguồn nhất quán

Page 6: Distributed Transaction in Microservice

TransactionTransaction phải đảm bảo tính ACID:• Atomic: phải đảm bảo thực thi tất cả hoặc

không gì• Consistency: đảm bảo nhất quán dữ liệu• Isolation: đảm bảo vấn đề tranh chấp• Duration: dữ liệu phải được lưu trữ ổn định

Page 7: Distributed Transaction in Microservice

Disitributed Transaction in Microservice

• Hệ thống chia nhỏ thành các Microservice rất nhỏ

• Phải đảm bảo dữ liệu tất cả các service phải nhất quán

• Các service hầu hết là các restful service• Microservice là một hệ thống phân tán mức

độ cao• Về cơ bản: không có Transaction trong kiến

trúc Microservice!

Page 8: Distributed Transaction in Microservice

CAP Theorem• Consistency• Avalaibility• Partition Tolerant

Một hệ thống phân tán chỉ có thể đạt được 2 trên ba tính chất trên

Page 9: Distributed Transaction in Microservice

CAP Theorem• Consistency: Đảm bảo dữ liệu giữa các

node là nhất quán• Availabiilty: đảm bảo tính available của hệ

thống khi một số node không available• Partition Tolerance: đảm bảo khả năng

hoạt động khi mạng giữa các node không ổn định

Page 10: Distributed Transaction in Microservice

CAP Theorem in Microservice

Nói chung Microservice chỉ có thể đảm bảo hai tính chất:• Avaialability• Partition Tolerance

Microservice không đảm bảo consistency giữa các node trên toàn bộ hệ thống!

Page 11: Distributed Transaction in Microservice

Consistency vs Eventually Consistency

• Consistency: đảm bảo tính nhất quán của dữ liệu. Tại mọi thời điểm trên hệ thống dữ liệu phải nhìn nhất quán giữa tất cả các node.

• Eventually Consistency: đảm bảo dữ liệu giữa các hệ thống sẽ nhất quán sau một khoảng thời gian nhất định.

• Microservice chỉ có thể đảm bảo dữ liệu là Eventually Consistency

Page 12: Distributed Transaction in Microservice

Microservice

• Đánh đổi Consistency bằng tính chất Avalaibility và Partition Tolerance

• Không consistency nhưng phải đảm bảo là eventually consistency giữa các service

Page 13: Distributed Transaction in Microservice

Phần 2:Giải pháp

Page 14: Distributed Transaction in Microservice

Replicate Model

• Primary Data Backup• State Machine Model

(Active Active Model)

Page 15: Distributed Transaction in Microservice

Replicate Model• VD: để thay đổi dữ liệu tồn kho khi mua

bán và xuất nhập. Ban đầu có 10. Bán đi 2, nhập vào 5, bán đi 7. Cần replicate dữ liệu đi các nguồn:

• Primary Backup: 8, 13, 6• State Machine: -2, + 5, -7

Page 16: Distributed Transaction in Microservice

Replicate Model

• Luôn đảm bảo ghi log các quá trình thay đổi

• Gửi các thay đổi đúng thứ tự và ổn định

Page 17: Distributed Transaction in Microservice

Problems in Microservice

Database

Service

Write

Caching Message Queue

External Service

Không có bất cứ cách nào đảm bảo việc ghi dữ

liệu đồng thời nhiều nguồn dữ liệu thoả mãn

tính chất của một transaction

Page 18: Distributed Transaction in Microservice

Problems in Microservice

• Các kịch bản lỗi:• Ghi dữ liệu nhưng không gọi được service

khác• Gọi được serivce khác nhưng không ghi

được dữ liệu

Page 19: Distributed Transaction in Microservice

Solutions• Đảm bảo chỉ thay đổi dữ liệu bắt đầu ở một

nguồn. Không đồng thời thay đổi dữ liệu của tất cả các nguồn.

• Tiến hành replicate các thay đổi một cách ổn định tới các nguồn đích

• Triển khai hệ thống log để đảm bảo quá trình replicate là ổn định.

• Mục tiêu: đảm bảo dữ liệu giữa các hệ thống là Eventually Consistency

Page 20: Distributed Transaction in Microservice

Phần 3: Implementations

Page 21: Distributed Transaction in Microservice

1. Log• Log là phương thức chính và quan trọng

nhất để giải quyết vấn đề replicate dữ liệu trong hệ thống phân tán

• 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

• Đảm bảo transation giữa business data và log data

• Xoá bỏ log sau khi gửi đi

Page 22: Distributed Transaction in Microservice

1. Log

Service

Business Data

Log Data

Đảm bảo transactio

n

BackGround Worker

Other Service

Caching

Message Queue

Other Data Sources

Page 23: Distributed Transaction in Microservice

2. Event Sourcing Pattern

Lưu trữ các thay đổi dưới dạng log event

Gửi các event tới các nguồn đích

Page 24: Distributed Transaction in Microservice

3. Saga Pattern

Xây dựng cơ chế log để theo dõi các bước thực thiThực hiện roll back khi các bước bị lỗi

Page 25: Distributed Transaction in Microservice

4. CDC Capture Data Change

• Bắt trực tiếp các thay đổi Database để replicate thay đổi tới các data source khác nhau. VD:

• MySQL: decode file binlog• Mongo: sử dụng cơ chế oplog

Page 26: Distributed Transaction in Microservice

5. Message Queue

Page 27: Distributed Transaction in Microservice

5. Message Queue• Sử dụng message queue là nền tảng tích

hợp bất đồng bộ chính cho toàn bộ các service

• Loại bỏ việc gọi api chéo giữa các service• Tăng khả năng availability của hệ thống• 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

Page 28: Distributed Transaction in Microservice

6. Integration Model

Page 29: Distributed Transaction in Microservice

6. Integration ModelLog:

• Đả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 gửi message tới các nguồn dữ liệu đích• Đảm bảo các message được delivery đúng thứ tự gửi vào• Đảm bảo các message được persistent không bị mất• Kafka và Windows Service Bus là các giải pháp tốt nhất

Các Data Source khác:

• Trực tiếp nhận message từ queue• Chú ý việc chống trùng lặp message (Idempotemcy filtering)

Page 30: Distributed Transaction in Microservice

7. Consistency Requirements

• Trong ba yếu tố CAP, liệu AP có thể thoả mãn mọi trường hợp?

• Trong trường hợp bắt buộc đòi hỏi Consistency cần phải đánh giá lại mô hình:

1. Liệu việc chia service đã hợp lý hay chưa? Thông thường sẽ không chia nếu dữ liệu bắt buộc phải strong consistency.

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?

3. Có thể triển khai SOAP để handle distributed transaction không?

4. Có thể cài đặt two phase commit để handle distributed transaction không?

Page 31: Distributed Transaction in Microservice

Phần 4 Một số case study

Page 32: Distributed Transaction in Microservice

1. Đặt hàng• Kịch bản: có hai serivce, catalog service

quản lý dữ liệu sản phẩm, order service quản lý đơn hàng. Khi đặt hàng thì trừ đi một lượng sản phẩm nhất định rồi tạo đơn hàng.

• Risk: có thể trừ số lượng sản phẩm mà không tạo được đơn hàng

Page 33: Distributed Transaction in Microservice

Solution

Order Service

Catalog Service

1. Gửi request giữ tồn (Sync)

Database

2. Place Order

Message Queue

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.

Page 34: Distributed Transaction in Microservice

2. Bài toán trừ tiền

• Kịch bản: có hai service là order service và payment service. Payment service chứa thông tin tiền ảo của người dùng. Tiền ảo trừ được thì đơn hàng được đặt.

• Risk: tiền trừ mà đơn hàng không đặt được

Page 35: Distributed Transaction in Microservice

Solutions

Order Service Catalog

Service

1. Gửi request giữ tiền (Sync)

Database

2. Place Order Request Queue

3. Gửi một lệnh trừ tiền

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

Response Queue 4. Gửi response

Page 36: Distributed Transaction in Microservice

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.

• Lần 2 đi giao nốt món còn lại và thu 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ì?

Page 37: Distributed Transaction in Microservice

AnalysisKhó khăn:

• Muốn consistency phải gộp hai service làm một —> Ảnh hưởng tới thiết kế tổng thể.

• Hệ thống không thể đảm bảo khi quy trình đã không consistency. VD: nhân viên giao nhận thứ nhất vừa về thì nhân viên thứ hai đã đi, cả hai còn chưa kịp cập nhật qua máy tính.

Page 38: Distributed Transaction in Microservice

Solution

• Dùng nghiệp vụ giải quyết: ghi nhận lỗi và hoàn tiền cho khách hàng qua tài khoản ngân hàng

—-> và thống thiết gọi xin lỗi khách hàng :(((

Page 39: Distributed Transaction in Microservice

Conclusions• Khi phân chia hệ thống phải đảm bảo dữ liệu là eventually

consistency• Cơ bản không có transaction giữa các data source khác

nhau• 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.

Page 40: Distributed Transaction in Microservice

Thank you!


Top Related