Distributed transaction
2024-02-24
transaction micro service
Khái niệm
The dual write problem
Trong một transaction boundary. có thể xảy ra các trường hợp kiểu như
- local-commit-then-publish approach: A commit rồi gửi yêu cầu sang B (qua queue - async). nhưng B chưa commit thì app lỗi
- publish-then-local-commit: gửi sang B trước, rồi A commit. sẽ lỗi hoặc có vấn đề về thời gian khi B ghi trước khi A commit. đây gọi là dual write problem (chưa hiểu chỗ này lắm )
Cách giải quyết
Tên | khái niệm | hạn chế | ví dụ |
---|---|---|---|
modular monolith | dùng chung một runtime, chung db | k scale được, high coupling | |
two-phase commit (2PC) | cho một thằng đứng giữa. thực hiện một thao tác atomic [prepare, synchronous blocking, commit] | k scale, block | Message brokers such as Apache ActiveMQ |
Orchestration | dùng saga Orchestrator. async commit | single point failure | saga |
Choreography | dùng các topic khác nhau để các service tự giao tiếp với nhau (có cả rollback) | khó implement | even sourcing, saga |
Parallel pipelines | null | null | null |