1. Architecture
Search Tool
  • Tổng quan
  • Bussiness | Logic
    • Nghiệp vụ & Luồng Tìm kiếm
    • Task Orchestration
    • Scraping & Execution
    • Exception & Recovery
    • Proxy Orchestration
  • Project
    • Search API
      • Tổng quan Search API
      • Architecture
        • Database Schema
        • System Architecture
        • Code Structure
      • API Interface
        • Go - Auth
          • Đăng nhập
          • Đăng ký (Public)
        • Go - User
          • Danh sách User (Phân trang)
          • Tạo User
          • Lấy tất cả User
          • Profile cá nhân
          • Chi tiết User
          • Cập nhật User
          • Xóa User
          • Đổi mật khẩu
        • Go - System
          • Nhật ký hoạt động (Phân trang)
          • Cập nhật dữ liệu Search
          • Test Webhook receiver
        • Go - Server
          • Danh sách Server (Phân trang)
          • Tạo Server
          • Lấy tất cả Server
          • Chi tiết Server
          • Cập nhật Server
          • Xóa Server
        • Go - Tasks
          • Tạo nhiều task Search
          • Lấy tất cả task Search
          • Reset trạng thái tất cả nhiệm vụ Search
          • Tạo nhiều task Anchor Text
          • Lấy tất cả nhiệm vụ Anchor Text
          • Reset trạng thái tất cả nhiệm vụ Anchor Text
        • Go - Webhook
          • Webhook cập nhật trạng thái (Dùng WEBHOOK_KEY)
          • Lấy Proxy cho Tool
          • Lấy Proxy có thể rotate
          • Cập nhật kết quả Search
          • Kết quả rotate Proxy
          • Cập nhật kết quả Anchor Text
          • Nhận kết quả từ Tool (v2)
      • Deployment
        • Local
        • Staging
        • Product
    • Search tool
      • Tổng quan Search Tool
      • Architecture
        • Database Schema
        • System Architecture
        • Code Structure
      • API Interface
        • Bun - Main
          • Thông tin server Bun
          • Health Check
          • Lấy file Log
        • Bun - Task
          • Danh sách Search Tasks
          • Tạo nhiều Search Tasks
          • Xóa tất cả Search Tasks
          • Xóa Search Task
          • Reset trạng thái Search
          • Reset running process
          • Danh sách Anchor Tasks
          • Tạo nhiều Anchor Tasks
          • Xóa tất cả Anchor Tasks
          • Xóa Anchor Task
          • Reset trạng thái Anchor
          • Reset running process
      • Deployment
        • Local
        • Staging
        • Product
  • Schemas
    • LoginRequest
    • ProxyRequest
    • CreateUserRequest
    • KeywordTaskRequest
    • UpdateUserRequest
    • SearchAutomationRequest
    • ChangePasswordRequest
    • CreateServerRequest
    • AnchorTextTaskRequest
  1. Architecture

Database Schema

1. Tổng quan kiến trúc dữ liệu#

API sử dụng 2 database cho 2 loại dữ liệu khác nhau:
DatabaseCông nghệMục đích
MySQLRelational DBDữ liệu cấu trúc: users, servers
MongoDBDocument DBTask pool: keyword tasks, anchor text tasks
RedisCacheCache kết quả anchor text (TTL 5 phút)

2. MySQL — Bảng quan hệ#

2.1. Bảng users#

Quản lý tài khoản người dùng và phân quyền.
ColumnTypeConstraintDefaultMô tả
idINTPRIMARY KEY, AUTO_INCREMENT—ID user
nameVARCHAR(255)NOT NULL—Tên hiển thị
passwordVARCHAR(255)NOT NULL—Mật khẩu (đã hash bcrypt)
emailVARCHAR(255)UNIQUE, NOT NULL—Email đăng nhập
first_nameVARCHAR(255)NULL—Họ
last_nameVARCHAR(255)NULL—Tên
roleTINYINTNOT NULL1Phân quyền: 0 = admin, 1 = user
created_atDATETIME—AUTOThời điểm tạo
updated_atDATETIME—AUTOThời điểm cập nhật cuối
deleted_atDATETIMENULL—Soft delete (GORM model)
Role values:
Giá trịTênMô tả
0adminToàn quyền quản trị
1userNgười dùng thông thường

2.2. Bảng servers#

Danh sách worker server để phân phối tác vụ tìm kiếm.
ColumnTypeConstraintDefaultMô tả
idINTPRIMARY KEY, AUTO_INCREMENT—ID server
nameVARCHAR(255)NOT NULL—Tên server
ipVARCHAR(255)NOT NULL—Địa chỉ IP của server
is_activeTINYINT(1)NOT NULL01 = server đang hoạt động
is_priorityTINYINT(1)NOT NULL01 = server ưu tiên (weight 5 vs 2)
limit_processINTNOT NULL—Số tác vụ tối đa server có thể xử lý đồng thời
current_processINT—0Số tác vụ đang chạy hiện tại
created_atDATETIME—AUTOThời điểm tạo
updated_atDATETIME—AUTOThời điểm cập nhật cuối
deleted_atDATETIMENULL—Soft delete (GORM model)
Ghi chú phân phối task:
Server có is_priority = true → weight 5
Server có is_priority = false → weight 2
Tasks được phân phối theo tỷ lệ trọng số giữa các server active

3. MongoDB — Collections#

3.1. Collection keyword_pool_tasks#

Task pool cho tìm kiếm keyword. Documents được thêm vào bởi /search/ và được cron job xử lý mỗi 60 giây.
FieldTypeMô tả
_idObjectIDID duy nhất (auto-generated với primitive.NewObjectID())
keywordStringTừ khoá cần tìm kiếm
result_numIntSố kết quả mong muốn
engineString/EnumSearch engine sử dụng
deviceString/EnumLoại thiết bị (desktop / mobile)
device_osIntOS của device: 0 = Windows/Android, 1 = MacOS/iOS
webhook_urlStringURL nội bộ API sẽ nhận kết quả từ worker (do API tự tạo)
proxy_urlStringURL API để worker gọi lấy proxy
search_youtubeBooltrue = tìm cả YouTube
search_imageBooltrue = tìm cả Google Image
searchedIntSố lần đã thử tìm kiếm
statusIntTrạng thái task: 0 = new, 1 = processing
geo_locationObjectVị trí địa lý (tuỳ chọn)
geo_location.latFloat64Vĩ độ (-90 đến 90)
geo_location.lngFloat64Kinh độ (-180 đến 180)
Status values:
Giá trịTênMô tả
0Status_NewTask mới, chưa được giao
1Status_ProcessingĐang được worker xử lý
Webhook URL format:
{WEBHOOK_UPDATE_SEARCH_RESULT}/{task_id}?hook_url={client_webhook_url}

3.2. Collection anchor_text_tasks#

Task pool cho tìm kiếm anchor text. Documents được thêm vào bởi /anchor-text/search và được cron job xử lý mỗi 60 giây.
FieldTypeMô tả
_idObjectIDID duy nhất (auto-generated)
domainStringDomain cần tìm anchor text
anchor_key[]StringDanh sách anchor key cần tìm
webhook_urlStringURL nội bộ API để nhận kết quả từ worker
proxy_urlStringURL API để worker gọi lấy proxy
searchedIntSố lần đã thử tìm kiếm (tối đa 10 lần)
statusIntTrạng thái: 0 = new, 1 = processing
Status values:
Giá trịTênMô tả
0Status_NewTask mới
1Status_ProcessingĐang xử lý
Webhook URL format (do API tự sinh):
{WEBHOOK_UPDATE_SEARCH_ANCHOR_TEXT}/{task_id}?hook_url={client_webhook_url}

3.3. Cấu trúc AnchorText kết quả (từ worker callback)#

{
  "task_id": "string",
  "domain": "example.com",
  "anchor_key": ["key1", "key2"],
  "result_status": 1,
  "proxy": {
    "host": "proxy.example.com",
    "port": 8080,
    "username": "user",
    "password": "pass"
  },
  "search_data": {
    "url": "https://example.com/page",
    "anchor_text": [
      {
        "key": "anchor key",
        "link": "https://target.com",
        "element": "<a href='...'>text</a>"
      }
    ]
  }
}
ResultStatus values (AnchorText):
Giá trịTênMô tả
0Status_UnknownKhông xác định
-1Status_ErrorLỗi khi tìm kiếm
-2Status_NotFoundKhông tìm thấy
-3Status_CaptchaBị chặn bởi captcha
1Status_SuccessTìm kiếm thành công

4. Redis — Cache#

4.1. Cache anchor text kết quả#

Key patternValueTTL
{domain}_anchor_textJSON string của UpdateSearchAnchorTextRequest5 phút
{domain}_{anchor_key_1}_{anchor_key_2}...JSON string của kết quả search5 phút
Mục đích: Nếu cùng một domain/anchor key được request lại, API trả ngay từ cache mà không cần giao task cho worker, sau đó xoá task khỏi pool.

5. Auto Migration#

Khi AUTO_MIGRATE_DATABASE=true trong .env, API sẽ tự động tạo/cập nhật schema MySQL khi khởi động.
Các bảng được migrate: users, servers.
Ngày cập nhật 2026-03-31 01:59:03
Trước
Tổng quan Search API
Tiếp theo
System Architecture
Built with