[Open Source] #98 - OpenMeter: Hạ tầng đo lường và tính phí triệu sự kiện cho AI & SaaS với Go, Kafka và ClickHouse
Nếu bạn đang xây dựng một nền tảng AI (tính phí theo token) hoặc API SaaS (tính phí theo lượt gọi), bài toán khó nhất không phải là giao diện, mà là làm sao để ghi nhận hàng tỷ sự kiện (events) theo thời gian thực mà không làm sập hệ thống và vẫn đảm bảo độ chính xác tới từng xu lẻ. OpenMeter chính là lời giải mẫu mực cho bài toán này.
Github: https://github.com/openmeterio/openmeter
🛠️ 1. Nền tảng công nghệ: "Modern Data Stack" cho Tài chính
OpenMeter không đi theo lối mòn của các hệ thống Billing truyền thống sử dụng SQL đơn thuần. Dự án kết hợp những công nghệ xử lý dữ liệu mạnh mẽ nhất để đạt được hiệu suất cực hạn:
- Lõi thực thi (Golang): Tận dụng tối đa Concurrency và Goroutines để tiếp nhận hàng vạn sự kiện usage mỗi giây với độ trễ phản hồi dưới 10ms.
- Hệ thống lưu trữ "Brain" (ClickHouse): Thay vì PostgreSQL, OpenMeter dùng ClickHouse làm kho lưu trữ chính cho dữ liệu usage. Đây là OLAP database nhanh nhất hiện nay, cho phép thực hiện các truy vấn aggregation (SUM, COUNT) trên hàng tỷ dòng dữ liệu chỉ trong tích tắc.
- Hệ thống thần kinh (Apache Kafka): Đóng vai trò là lớp đệm (Buffer). Mọi sự kiện từ khách hàng đều được đẩy vào Kafka trước khi xử lý để đảm bảo tính chịu lỗi (Fault tolerance) và không bao giờ mất mát dữ liệu.
- API Framework (TypeSpec): Sử dụng ngôn ngữ định nghĩa API của Microsoft để tự động sinh ra OpenAPI spec và SDK cho đa ngôn ngữ (Python, JS, Go), đảm bảo tính nhất quán tuyệt đối giữa Client và Server.
🏗️ 2. Trụ cột kiến trúc: Tách biệt Ingestion và Processing
Kiến trúc của OpenMeter được thiết kế theo mô hình Event-Driven Microservices, giải quyết triệt để bài toán thắt nút cổ chai:
- High-speed Ingestion: API tiếp nhận event chỉ làm nhiệm vụ xác thực (Validation) và đẩy vào Kafka. Việc này giúp hệ thống giữ được tốc độ phản hồi cực nhanh cho ứng dụng khách.
- Sink Workers: Các worker chuyên biệt tiêu thụ dữ liệu từ Kafka và ghi vào ClickHouse theo lô (Batching), giúp tối ưu hóa IO và giảm tải cho database.
- Domain-Driven Design (DDD): Mã nguồn được phân rã thành các domain rõ rệt:
billing/(hóa đơn),entitlement/(quyền hạn), vàproductcatalog/(gói cước). Cách tổ chức này giúp hệ thống dễ bảo trì khi logic kinh doanh trở nên phức tạp.
🔄 3. Workflow: Từ một lượt gọi API đến Hóa đơn cuối tháng (Sequence Diagram)
Sơ đồ dưới đây mô tả hành trình của một "Usage Event" (ví dụ: người dùng gọi 1000 tokens AI):

⚡ 4. Các kỹ thuật "Pro-level" trong mã nguồn
- Idempotency & Deduplication: Billing yêu cầu sự chính xác tuyệt đối. OpenMeter sử dụng Redis để lưu vết
event_id, đảm bảo rằng dù hệ thống có retry 100 lần, một sự kiện usage cũng chỉ được ghi nhận và tính tiền đúng một lần duy nhất. - JSONPath Aggregation: OpenMeter cho phép người dùng định nghĩa cách tính phí cực kỳ linh hoạt thông qua JSONPath. Bạn có thể yêu cầu hệ thống tính phí dựa trên bất kỳ trường dữ liệu nào nằm sâu trong JSON payload của sự kiện gửi lên.
- Entitlement Enforcement: Không chỉ tính tiền, OpenMeter còn quản lý "quyền hạn". Hệ thống có thể trả lời câu hỏi: "Người dùng này đã dùng hết hạn mức 1000 tokens chưa?" trong thời gian thực để ứng dụng của bạn có thể chặn lượt gọi API ngay lập tức.
- Automated Migration với Atlas: Việc quản lý thay đổi schema database trong môi trường phân tán là cực khó. Dự án sử dụng Atlas để đảm bảo các bản cập nhật PostgreSQL luôn diễn ra an toàn và có thể rollback.
⚖️ 5. So sánh chiến lược
| Tiêu chí | OpenMeter | Stripe Metering | Tự build bằng Postgres/MySQL |
|---|---|---|---|
| Quy mô dữ liệu | Hàng tỷ sự kiện (ClickHouse) | Trung bình | Dễ treo khi dữ liệu lớn |
| Độ trễ truy xuất | < 100ms | Chậm (Phụ thuộc API bên thứ 3) | Tăng dần theo thời gian |
| Quyền sở hữu | 100% (Tự host/Cloud) | Bị khóa bởi nhà cung cấp | 100% |
| Tính linh hoạt | Rất cao (Tùy biến aggregator) | Thấp (Theo chuẩn Stripe) | Phải tự code mọi thứ |
✅ Kết luận: Tại sao OpenMeter là hình mẫu lý tưởng?
OpenMeter không chỉ là một công cụ Billing; nó là một bài học về Data-Intensive Application Design. Dự án chứng minh rằng để giải quyết các bài toán hiện đại (như kinh tế học AI), chúng ta cần sự kết hợp nhịp nhàng giữa lập trình hệ thống (Go) và hạ tầng dữ liệu lớn (ClickHouse/Kafka).
Đối với các kỹ sư backend và kiến trúc sư hệ thống, nghiên cứu OpenMeter sẽ giúp bạn hiểu sâu về:
- Cách xây dựng một Ingestion Pipeline bền bỉ và hiệu năng cao.
- Kỹ thuật sử dụng OLAP Database cho các tác vụ nghiệp vụ thời gian thực.
- Tư duy thiết kế Contract-first API với TypeSpec.
Hy vọng bản phân tích dự án số #100 này mang lại cho bạn những giá trị vượt trội. Cảm ơn các bạn đã đồng hành cùng mình qua 100 "kỳ quan" mã nguồn. Đừng quên Upvote và Follow để chúng ta cùng chinh phục những cột mốc tiếp theo nhé!
All rights reserved