1. Architecture
Proxy Tool
  • Tổng quan cấu trúc hệ thống
  • Bussiness | Logic
    • Logic nghiệp vụ
  • Project
    • Tool
      • Tổng quan
      • Tài liệu API
      • Architecture
        • User Guide
        • Database Schema
        • System Architecture
        • Code Structure
      • Public API
        • Auth
          • Đăng nhập
          • Đăng ký người dùng
          • Lấy thông tin cá nhân hiện tại
        • Users
          • Danh sách người dùng
          • Tạo người dùng mới (Admin)
        • Proxies
          • Danh sách tất cả Proxy
          • Thêm Proxy hàng loạt
          • Nhập proxy từ file Excel/CSV
        • Get proxy
          • Lấy một Proxy trống (Client Tool)
        • Webhooks
          • Trả lại Proxy sau khi dùng
        • Info
          • Thông tin hệ thống (Root)
          • Kiểm tra tình trạng hệ thống
          • Xem tệp nhật ký (Logs)
      • Deployment
        • Local
        • Staging
        • Product
  • Schemas
    • CreateUser
    • Proxy
  1. Architecture

System Architecture

KIẾN TRÚC HỆ THỐNG: PROXY SERVICE TOOL (SYSTEM ARCHITECTURE)#

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
Trước
Database Schema
Tiếp theo
Code Structure
Built with