Xử lý giao dịch: validation và tính nhất quán
Mục tiêu: một lệnh chuyển tiền chỉ được áp dụng đúng một lần
Bài trước bạn đã dựng khung project axum, có router, AppState và handler trả về dữ liệu giả. Giờ ta làm phần khó nhất của một service ngân hàng: nhận lệnh chuyển tiền sao cho tiền chỉ rời khỏi tài khoản nguồn đúng một lần, kể cả khi client retry, load balancer gửi lại, hay hai request chạy song song.
Ở môi trường thật, phần lớn "trừ tiền hai lần" không đến từ code lỗi rõ ràng, mà từ một trong ba thứ: timeout mạng khiến client gửi lại, SELECT balance rồi UPDATE tạo khoảng hở giữa đọc và ghi, và idempotency key được ghi nhận ở ngoài transaction. Ba cạm bẫy đó là toàn bộ nội dung bài này.
Spec: một transfer hợp lệ cần những gì
Chốt spec trước khi viết code. Một lệnh chuyển tiền hợp lệ phải thỏa:
amount_minor > 0, lưu bằngi64theo đơn vị nhỏ nhất, không dùngf64.from != to, và hai account phải tồn tại, cùngCurrency.- Request bắt buộc có
idempotency_key, unique trong hệ thống. - Số dư nguồn đủ tại đúng thời điểm trừ tiền, kiểm tra nguyên tử.
- Toàn bộ claim key, trừ tiền, cộng tiền, ghi receipt nằm trong một DB transaction.
Bắt đầu bằng validation thuần, không chạm DB, để test được bằng cargo test mà không cần Postgres:
In this lesson
- Lộ trình: validation, claim key, trừ tiền, commit
- Nghiệm thu: khi nào coi là xong
- Cạm bẫy khi làm transfer bằng Rust
- Chốt lại
About this course
Part of Rust core cho fintech: nắm ownership để làm codebase tài chính — Khóa học nhanh dành cho lập trình viên đã biết ngôn ngữ khác, đi thẳng vào Rust core (ownership, borrowing, lifetimes, traits) rồi nối sang error handling, concurrency với Tokio và một capstone service ngân hàng bằng axum. Trọng tâm là kinh nghiệm thực chiến và các cạm bẫy khi viết Rust trong môi trường tài chính.
- Language
- Vietnamese
- Focus
- rust core ownership concurrency async error handling safety web api backend
- Practice
- Capstone project
- Time
- ~4.8h
- Voice
- Một kỹ sư senior mentoring intern, chỉ kinh nghiệm thực chiến và các cạm bẫy khi làm Rust trong ngân hàng
This lesson is premium content. Sign in and purchase the course to view the full content. Sign in