How — Đường đi của một đồng hoàn tiền
Câu hỏi trang này trả lời: một đồng đi từ đâu tới đâu, hệ thống chặn gian lận bằng gì, doanh thu ở đâu, và tuân thủ ra sao.
Đường đi đầy đủ, cả hai nguồn
Sơ đồ: Hai nguồn tiền vào hội tụ về cùng một sổ cái append-only; số dư luôn là tổng của sổ, và tỷ giá bị đóng băng tại thời điểm chi tiền.
Ba điểm cần đọc kỹ trong sơ đồ:
- Cửa sổ đổi trả tra từ cấu hình cửa hàng trong hệ thống, không lấy từ dữ liệu đối tác gửi tới. Nếu lấy từ dữ liệu gửi tới, bên gửi sẽ tự quyết được khi nào tiền của người dùng chín.
- Ghi lượt bấm là bắn-và-quên — không chặn phản hồi cho người dùng, vì đây là bảng ghi nhiều nhất trong hệ.
- Không có mũi tên nào quay ngược vào sổ để sửa. Đảo một khoản là thêm một bút toán mới.
Sổ cái: bốn luật đường tiền
| Luật | Nội dung | Vấn đề nó chặn |
|---|---|---|
| So-sánh-rồi-đặt trong giao dịch | Không hành động dựa trên bản chụp đã đọc. Cập nhật phải kèm điều kiện trạng thái kỳ vọng, rồi kiểm xem có dòng nào bị ảnh hưởng không — không có thì bỏ qua | Tải gộp trên đường tiền nới cửa sổ tranh chấp lên khoảng nghìn lần và gây chi trả hai lần |
| Khoá chống lặp CHUNG cho các đường đối nghịch | "Ghi có" và "thu hồi" dùng chung một khoá | Khoá riêng nghĩa là chúng không chặn được nhau |
| Bất biến phải đến từ hai nguồn độc lập | Tổng nợ bằng tổng có, cộng phép thử ngược, cộng tự gỡ hàng rào xem kiểm thử có đỏ không | Bất biến lấy từ cùng một biến thì không bao giờ sai — một lời nói dối tự đồng ý |
| Rà soát an ninh chạy độc lập | Bắt buộc cho mọi việc chạm sổ cái, chi trả, đăng nhập | Tự rà soát đã từng bỏ sót lỗi chặn thật |
Luật thứ ba là câu về phương pháp, không phải về mã, và nó được dùng như một phép thử chung cho toàn dự án:
Một kiểm thử không đỏ lên khi bạn gỡ bỏ chính hàng rào mà nó nói là đang canh thì đó là một kiểm thử rỗng.
Hiện có 148 hàng rào loại này chạy trực tiếp trên cơ sở dữ liệu, kiểm rằng các ràng buộc thật sự tồn tại và thật sự chặn.
Chống gian lận: có từ mốc đầu, không phải mốc cuối
| Rủi ro | Biện pháp | Trạng thái |
|---|---|---|
| Dùng lại một hoá đơn nhiều lần hoặc trên nhiều tài khoản | Dấu vân ảnh + ràng buộc duy nhất trên bộ ba cửa hàng · tổng tiền · ngày | ✅ Đang chạy |
| Vòng tự giới thiệu — tự mời chính mình qua tài khoản phụ | Phát hiện chu trình trong đồ thị giới thiệu | ✅ Đang chạy |
| Trại tài khoản ảo | Dấu vân thiết bị lúc đăng ký | ✅ Đang chạy |
| Báo về bị gửi lặp từ đối tác | Khoá chống lặp bắt buộc trên mọi báo về; gửi lại đúng báo cáo đó chỉ ghi có một lần | ✅ Có, và được chứng minh bằng kiểm thử ép lặp thật |
| Rút vượt số dư | Số dư là tổng của sổ, không phải một cột có thể lệch | ✅ |
Lý do đặt tất cả ở mốc đầu được ghi thẳng: bị lạm dụng rồi mới làm thì dữ liệu đã bẩn, không dọn được — và vì sổ là append-only, bạn cũng không được phép xoá chúng đi cho gọn.
Kiến trúc: một khối, ba điểm cắm
| Thành phần | Việc |
|---|---|
| Ứng dụng web | Giao diện người dùng và quản trị + các đường API |
| Tiến trình nền | Hàng đợi, việc chạy theo lịch, đối soát — tách khỏi web ngay từ đầu vì nhận báo về không được chạy trong chu kỳ xử lý yêu cầu |
| Gói dữ liệu | Lược đồ và di trú — một nguồn sự thật duy nhất |
| Gói miền nghiệp vụ | Sổ cái, hạng, giới thiệu, luật hoàn tiền |
| Gói tích hợp | Ba điểm cắm |
Ba điểm cắm và lý do tồn tại: nguồn hoàn tiền (liên kết · hoá đơn · thẻ) · bộ chuyển đổi mạng (khu vực, mạng) · nhà cung cấp chi trả (khu vực, kênh). Phần lõi chỉ thấy một hình dạng chung; mỗi bộ chuyển đổi tự lo định dạng riêng của nó. Thêm một mạng, một kênh rút hay một thị trường là thêm file.
Bảng lượt bấm được tách riêng: chỉ ghi thêm · chia mảnh theo tháng · không khoá ngoại, không nối bảng trong đường nóng · quyền ghi cài ở tầng cơ sở dữ liệu chứ không dựa vào mã ứng dụng nhớ làm đúng.
Mô hình doanh thu
Sơ đồ: Doanh thu là phần giữ lại từ hoa hồng, nên tỷ lệ hoàn tiền không bao giờ vượt được hoa hồng nhận về.
| Nguồn | Cơ chế | Giai đoạn |
|---|---|---|
| Giữ lại một phần hoa hồng liên kết | Nguồn chính | Khi mạng đối tác duyệt |
| Hợp tác thương hiệu / chiến dịch | Cửa hàng trả để được đẩy trong danh mục — phải có nhãn | Sau |
| Thẻ liên kết | Chia doanh thu với tổ chức thẻ | Cần hợp đồng |
Ba ràng buộc được ghi trước: tỷ lệ hoàn tiền không thể cao hơn hoa hồng nhận về — hứa cao hơn nghĩa là trợ giá bằng vốn · giới thiệu tối đa hai tầng, không có chuỗi đa cấp · và hiện tại nền tảng chưa có doanh thu từ liên kết, vì chưa mạng nào duyệt hồ sơ.
Tuân thủ và vận hành
| Lĩnh vực | Cách làm |
|---|---|
| Bảo vệ sổ cái | Chặn sửa · xoá · xoá sạch bảng ở tầng cơ sở dữ liệu, đối với mọi vai kể cả vai chủ sở hữu. Không có đường vòng cho quản trị viên |
| Đăng nhập | Mật khẩu + mã một lần qua điện thoại + xác thực hai lớp |
| Chi tiền ra | Hiện duyệt tay — tự động hoá chi tiền trước khi có đối tác thanh toán chính thức là chỗ dễ mất tiền nhất |
| Tỷ giá | Sống cho hiển thị, đóng băng tại thời điểm chi trả |
| Giao diện | Bố cục phải-sang-trái bắt buộc ở tầng quy ước — cấm dùng thuộc tính cố định trái/phải · vùng chạm tối thiểu cho hành động chính · màu không được là kênh thông tin duy nhất · chữ phóng 1,25× ở màn hẹp không được vỡ · mọi màn có dữ liệu phải có đủ ba trạng thái đang tải · rỗng · lỗi |
| Khả năng tiếp cận | Kiểm tự động đạt 0 vi phạm trên 7 màn |
| Khôi phục sau sự cố | Có quy trình riêng được viết thành tài liệu |
Nợ tuân thủ được ghi tên, không giấu: bảng lượt bấm có gắn định danh người dùng · bản chụp yêu cầu từ đối tác là bắt buộc và bị đóng băng · ứng dụng không có đường xoá dữ liệu. Đây là mâu thuẫn thật giữa sổ không sửa được và quyền được xoá, và nó cần một quyết định chính sách — đã được đánh dấu là điều kiện phải xử lý trước khi mở rộng.
Một luật vận hành đắt giá
Được ghi bằng chữ in đậm trong tài liệu dự án, vì đã có tiền lệ phải huỷ cả một cơ sở dữ liệu:
Phép thử phá hoại trên đường tiền — loại cố ý gỡ hàng rào để xem kiểm thử có đỏ không — CHỈ chạy trên cơ sở dữ liệu nháp dùng một lần, tạo mới rồi xoá sạch. KHÔNG BAO GIỜ trên cơ sở dữ liệu phát triển hay dùng chung.
Cùng nhóm còn có: di trú lược đồ phải là mã lệnh được rà bằng mắt và áp bằng công cụ dừng-ngay-khi-lỗi — chế độ đồng bộ tự động bị cấm vì nó nuốt lỗi rồi thoát ra im lặng, tức là hỏng theo kiểu tệ nhất: không ai biết.
Câu chốt: cách vận hành của 9Cashback quy về một câu: mọi thứ chạm vào tiền đều phải để lại dấu vết không xoá được, và mọi hàng rào đều phải chứng minh được là nó thật sự chặn — bằng cách tự gỡ nó ra xem kiểm thử có đỏ lên không.