Hệ thống được thiết kế theo kiến trúc Microservice, phân tách rõ ràng luồng Quản trị (Admin) và luồng Tiêu thụ (Consumer). Toàn bộ hệ thống giao tiếp qua giao thức HTTP và được bảo vệ bởi ba lớp bảo mật đa tầng.
I. SƠ ĐỒ LUỒNG KIẾN TRÚC (HIGH-LEVEL DIAGRAM)#
┌─────────────────────────────────────────────────────────────────┐
│ Consumer Services │
│ (Các Worker Tools cần cấp phát địa chỉ IP) │
└──────────────────┬──────────────────────────┬───────────────────┘
│ │
GET /api/get-proxy?area= POST /webhook/return-proxy/:id?key=
(Bảo vệ: API Key + IP) (Kích hoạt khi dùng xong IP)
│ │
v v
┌─────────────────────────────────────────────────────────────────┐
│ Proxy Service Tool (ElysiaJS / Bun) │
│ │
│ ┌───────────────┐ ┌──────────────────────┐ ┌────────────┐ │
│ │ Auth Routes │ │ Admin Routes │ │ Public │ │
│ │ POST /login │ │ /api/proxies │ │ API │ │
│ │ POST /register │ /api/proxy_packages │ │ /get-proxy│ │
│ │ (No Auth) │ │ /api/users │ │ /webhook/ │ │
│ └───────────────┘ │ Auth: JWT Bearer │ │ │ │
│ └──────────────────────┘ └────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ Background Cron Jobs │ │
│ │ proxy-cron-rotate (Chu kỳ: 10s) │ │
│ │ Trích xuất 20 IP (GetManyCanRotate) -> Xoay vòng IP │ │
│ │ (rotateProxy) -> Kiểm tra IP mới (checkIP) -> Lưu DB │ │
│ │ zing-proxy-cron (Chu kỳ: 12h) │ │
│ │ Tự động đồng bộ Proxy từ ZingProxy API. │ │
│ └──────────────────────────────────────────────────────────┘ │
└─────────────────────────────┬───────────────────────────────────┘
│
┌────────────┴────────────┐
│ │
┌──────────────┐ ┌──────────────┐
│ MongoDB 8 │ │ Redis 6.2 │
│ Port: 27017 │ │ Port: 6379 │
└──────────────┘ └──────────────┘
II. LỚP BẢO MẬT ĐA TẦNG (AUTHENTICATION LAYERS)#
1.
JWT Bearer: Áp dụng cho các Admin Routes. Yêu cầu truyền Authorization: Bearer <token> (Token sinh ra từ API_KEY và có hạn 14 ngày).
2.
Static API Key: Dành cho các máy khách quản trị (Machine-to-Machine). Yêu cầu khóa tĩnh khai báo trong ALLOWED_API_KEY.
3.
API Key kết hợp IP Whitelist: Lớp bảo vệ nghiêm ngặt nhất dành riêng cho các API Cấp phát/Thu hồi Proxy (/get-proxy và /webhook). Chỉ các Request gửi đúng Khóa tĩnh VÀ đến từ danh sách IP được khai báo trong IP_ALLOWED mới được phép thao tác.
III. CHU TRÌNH VÒNG ĐỜI CỦA PROXY (PROXY LIFECYCLE)#
1. Tiến trình Xoay vòng (Rotation Cronjob)#
Chạy lặp mỗi 10 giây để tìm kiếm các Proxy cần đổi IP:Điều kiện lọc: Proxy khả dụng (is_active=true), không bị kẹt luồng (is_rotating=false), và đã quá hạn next_rotate hoặc có số lượng Consumer sử dụng (in_use) bằng 0.
Tiến trình: Khóa bản ghi (Set is_rotating=true) -> Gọi rotate_url -> Gọi https://api.ipify.org qua Proxy mới để xác nhận Public IP -> Nếu thành công, đặt lại (Reset) các thông số người dùng (in_use, proxy_used) -> Mở khóa bản ghi.
2. Tiến trình Cấp phát và Thu hồi (Leasing & Returning)#
Cấp phát (GET /get-proxy): Hàm getOneFree() được bảo vệ bởi Mutex. Nó tìm Proxy thỏa mãn: in_use < PROXY_USE_MAX. Sau đó tăng biến đếm, tạo một đối tượng Khóa thuê (ProxyUsed với ip, key) và trả về webhook_url kèm mã Key cho Consumer.
Thu hồi (POST /webhook/return-proxy): Khi Consumer dùng xong, phải gọi vào webhook_url. Hệ thống (được bảo vệ bởi Mutex) sẽ tìm mã Key tương ứng, xóa khỏi mảng proxy_used, giảm biến đếm in_use và lưu cấu trúc lại vào CSDL.
Ngày cập nhật 2026-03-30 03:11:10