💸 Xử lý giao dịch: validation và tính nhất quán

By Everwise Intern

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ằng i64 theo đơn vị nhỏ nhất, không dùng f64.
  • from != to, và hai account phải tồn tại, cùng Currency.
  • 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