Wala-ICT
BitBuild
SaaS đa tenant về mua sắm xây dựng
Main Backend Engineer · Team 4 người · từ sprint đầu đến production
Bài toán
Một sản phẩm đa tenant mới cần ranh giới kiến trúc rõ ràng và luồng mua hàng không bao giờ bị trùng.
Kiến trúc
Sơ đồ đã giản lược, không có chi tiết nội bộ của khách hàng.
Công việc đã làm
- Tái cấu trúc mã nguồn thành hexagonal architecture nhiều module, dùng ArchUnit test để giữ ranh giới.
- Dùng idempotency key chống trùng đơn mua hàng và advisory lock để job định kỳ chỉ chạy một lần.
- Thiết lập GitLab CI và deploy Docker Compose có health check.
- Xây dựng xác thực đa tenant: JWT với refresh token rotation, thu hồi token bằng Redis, đăng nhập mạng xã hội và RBAC theo phạm vi dữ liệu (cá nhân, công trường được gán, toàn tenant).
- Phụ trách domain model, schema PostgreSQL và REST API cho các module mua sắm, hợp đồng, phê duyệt và nhà cung cấp.
Quyết định chính
Giữ kiến trúc bằng test
ArchUnit test ngăn ranh giới giữa các lớp bị phá vỡ khi mã nguồn hexagonal nhiều module lớn dần.
Giả định mọi lần gửi và mọi job đều có thể lặp
Idempotency key chặn gửi trùng đơn mua hàng, còn advisory lock của PostgreSQL giúp job định kỳ chỉ chạy một lần trên nhiều instance.
Công nghệ
Java 21 · PostgreSQL · Redis · GitLab CI