[Open Source] #67 - Autumn: Hệ thống quản lý Billing & Pricing hiện đại với kiến trúc Event-driven và Redis Lua Scripting
Xây dựng hệ thống thanh toán và quản lý giá (Pricing & Billing) cho các ứng dụng SaaS là một thử thách "cân não". Bạn phải đối mặt với việc tính tiền theo dung lượng (Usage-based), quản lý hạn mức (Quotas) theo thời gian thực, xử lý tính giá chênh lệch khi đổi gói (Proration) và đồng bộ hóa với Stripe. Autumn xuất hiện như một giải pháp hạ tầng mã nguồn mở, giúp tách biệt hoàn toàn logic thanh toán phức tạp ra khỏi ứng dụng chính.
Dưới góc độ kỹ thuật, Autumn là một Case Study tuyệt vời về việc ứng dụng Bun, ClickHouse và Redis Lua Scripting để đảm bảo tính chính xác tuyệt đối và hiệu năng cao cho dữ liệu tài chính.
Github: https://github.com/useautumn/autumn
🛠️ 1. Nền tảng công nghệ: Stack hiện đại cho hiệu năng cực hạn
Autumn được thiết kế để xử lý hàng triệu sự kiện sử dụng tính năng với độ trễ cực thấp và tính an toàn dữ liệu cao:
- Runtime (Bun): Tận dụng tốc độ thực thi và khả năng quản lý package vượt trội của Bun để thay thế Node.js, giúp hệ thống khởi động và xử lý yêu cầu nhanh hơn.
- Backend Framework (Hono): Một framework web siêu nhẹ, tối ưu cho môi trường Edge và Serverless, giúp các API kiểm tra hạn mức phản hồi trong vài mili giây.
- Hybrid Database Stack:
- PostgreSQL & Drizzle ORM: Lưu trữ Metadata (Thông tin khách hàng, định nghĩa gói giá) với cơ chế Type-safe tuyệt đối.
- ClickHouse: Chuyên biệt để lưu trữ và phân tích hàng tỷ sự kiện (Events) sử dụng tính năng phục vụ tính tiền theo lưu lượng.
- Redis: Đóng vai trò là "bộ não" xử lý hạn mức và số dư credit tức thời.
🏗️ 2. Trụ cột kiến trúc: Decoupled Billing & Stateless Quota Check
Kiến trúc của Autumn dựa trên nguyên lý tách biệt logic nghiệp vụ khỏi logic thanh toán:
- Tách biệt logic (Decoupling): Ứng dụng của bạn không cần quan tâm đến Webhook của Stripe hay logic nâng cấp gói. Bạn chỉ việc hỏi Autumn "User này có được làm hành động này không?", Autumn sẽ lo phần còn lại.
- Real-time Quota Management: Sử dụng Redis làm tầng đệm trung gian. Khi có yêu cầu, hệ thống kiểm tra giới hạn ngay lập tức trong RAM thay vì truy vấn database quan hệ, tránh tình trạng user dùng quá hạn mức (Race conditions).
- Event-driven Metering: Mọi tương tác của người dùng được ghi nhận dưới dạng sự kiện không đồng bộ, giúp hệ thống có thể mở rộng (scale) mà không làm chậm trải nghiệm người dùng cuối.
🔄 3. Workflow: Quy trình kiểm tra và Ghi nhận sử dụng
Sơ đồ dưới đây mô tả cách Autumn điều phối dữ liệu giữa ứng dụng, bộ nhớ đệm và các dịch vụ bên thứ ba:

⚡ 4. Các kỹ thuật "Pro-level" trong mã nguồn
- Redis Lua Scripting (Atomic Operations): Đây là kỹ thuật then chốt nhất. Việc viết logic trừ tiền/credit bằng Lua chạy trực tiếp bên trong Redis đảm bảo tính Atomic (nguyên tử). Ngay cả khi user gửi hàng trăm request cùng lúc, hệ thống vẫn đảm bảo trừ hạn mức chính xác mà không gặp lỗi đồng bộ.
- CTE (Common Table Expressions) Builder: Autumn tự xây dựng bộ công cụ tạo truy vấn SQL phức tạp để lấy dữ liệu quan hệ nhiều tầng (Product -> Plan -> Feature) một cách tối ưu, giúp giảm số lượng câu query tới database chính.
- Background Workers (BullMQ): Các tác vụ nặng nề và dễ lỗi như đồng bộ với Stripe, tạo hóa đơn PDF, hay gửi email thông báo được đẩy vào hàng đợi xử lý riêng, đảm bảo API chính luôn sẵn sàng.
- Zod-driven Validation: Sử dụng Zod xuyên suốt từ tầng API đến Database giúp đảm bảo dữ liệu đầu vào luôn sạch và có cấu trúc chặt chẽ, giảm thiểu lỗi runtime do sai lệch kiểu dữ liệu.
⚖️ 5. So sánh chiến lược
| Tiêu chí | Autumn (Open Source) | Tự build trên Stripe | SaaS (Lago / Orb) |
|---|---|---|---|
| Độ linh hoạt | Rất cao (Có thể chỉnh sửa code) | Trung bình (Tự code mọi thứ) | Bị giới hạn bởi Provider |
| Hiệu năng Quota | Cực cao (Redis Native) | Thường chậm (Query SQL) | Cao |
| Quyền sở hữu dữ liệu | Tuyệt đối (Self-hosted) | Tuyệt đối | Phụ thuộc bên thứ 3 |
| Chi phí | Miễn phí (Chỉ tốn Infra) | Tốn công sức Dev cực lớn | Rất đắt |
✅ Kết luận: Tại sao Autumn là hình mẫu lý tưởng?
Autumn chứng minh rằng việc xây dựng một hệ thống billing hiện đại không chỉ là về việc gọi API của Stripe, mà là về việc quản lý trạng thái dữ liệu (State) và tính chính xác ở quy mô lớn.
Đối với các kỹ sư backend, nghiên cứu Autumn sẽ giúp bạn hiểu sâu về:
- Cách kết hợp giữa OLTP (Postgres) và OLAP (ClickHouse) trong một hệ thống thực tế.
- Kỹ thuật sử dụng Redis Lua Scripting để giải quyết các bài toán về tính nhất quán (Consistency).
- Tư duy thiết kế Monorepo hiện đại với sự đồng nhất kiểu dữ liệu giữa Client và Server.
Hy vọng bản phân tích này mang lại cho bạn những góc nhìn giá trị về kiến trúc hệ thống tài chính/billing. Đừng quên Upvote và Follow mình để theo dõi những "kỳ quan" mã nguồn tiếp theo nhé!
All Rights Reserved