Ba sơ đồ vẽ tay bằng SVG: các lớp của hệ thống headless, cách triển khai trên AWS và Cloudflare, và luồng giữ chỗ cùng đối soát thanh toán. Mọi tên và số liệu là minh họa chung, không gắn với hệ thống thật.
1. Kiến trúc phân lớp headless B2B/B2C
Giao diện chỉ hiển thị; máy chủ sở hữu danh tính, quyền, giá và tồn kho. CMS chỉ sở hữu phần trình bày.
Sơ đồ rộng: vuốt ngang để xem hết.
Next.js render trang cho SEO; mọi thao tác ghi đi qua API, không truy cập thẳng cơ sở dữ liệu.
API là nơi duy nhất quyết định giá, tồn kho, quyền và chuyển trạng thái; client không gửi giá.
Việc chậm hoặc cần thử lại (hết hạn giữ chỗ, email, cập nhật chỉ mục) đi qua hàng đợi cho worker.
Webhook thanh toán là đường vào riêng, có chữ ký và idempotent.
2. Triển khai trên AWS và Cloudflare
Cloudflare đứng ở rìa (DNS, WAF, CDN); lưu lượng vào AWS qua tunnel hoặc ALB; container chạy trong mạng riêng; sao lưu và quan sát là phần của thiết kế, không phải việc thêm sau.
Sơ đồ rộng: vuốt ngang để xem hết.
Chỉ Cloudflare tiếp xúc Internet; máy chủ gốc không mở cổng công khai khi dùng tunnel.
Dashboard và /admin nằm sau Access, tách khỏi lưu lượng công khai.
Bản sao lưu cơ sở dữ liệu và media đi tới S3 với vòng đời lưu giữ; định kỳ khôi phục thử vào môi trường tách biệt.
Log và số đo có cảnh báo khi lỗi 5xx, độ trễ hoặc hàng đợi tăng bất thường.
3. Giữ chỗ và đối soát thanh toán
Luồng đặt chỗ có tồn kho theo ngày: giữ chỗ 15 phút, tạo booking chờ thanh toán, webhook có chữ ký xác nhận, worker trả tồn kho khi hết hạn.
Sơ đồ rộng: vuốt ngang để xem hết.
Bước 2: tồn kho theo ngày bị khóa và trừ trong một giao dịch, nên hai khách không giữ được cùng phòng cuối cùng.
Bước 3 và 6: báo giá và chính sách được chụp bất biến khi giữ chỗ; giá sau này đổi không ảnh hưởng booking.
Bước 4: khóa Idempotency-Key bảo đảm gửi lại sau lỗi mạng không tạo booking thứ hai.
Bước 7 và 8: kiểm tra chữ ký trên thân thô, khử trùng theo mã sự kiện, khớp mã tham chiếu và số tiền; sự kiện không khớp được giữ lại cho người duyệt thủ công. Gửi lại cùng sự kiện không đổi gì.
Bước 11: worker định kỳ chuyển giữ chỗ quá hạn sang expired và trả tồn kho; xác nhận thủ công của kế toán vẫn là đường dự phòng.