Tài liệu kỹ thuật – Phiên bản 1.0
Mô tả kiến trúc tổng quan, luồng xử lý và khả năng mở rộng của Social Tool Worker
1. Tổng quan#
Social Tool Worker là thành phần thực thi (Automation Worker) trong kiến trúc tổng thể Social Tool. Worker hoạt động như một micro-service độc lập, nhận lệnh từ API Server qua NATS, thực thi hành động trên trình duyệt headless, và trả kết quả.
2. Technology Stack#
| Thành phần | Công nghệ | Vai trò |
|---|
| Runtime | Bun ≥ 1.2.5 | JavaScript/TypeScript runtime hiệu suất cao |
| HTTP Framework | ElysiaJS + Swagger | Phục vụ REST API và health check |
| Browser | Puppeteer + Stealth Plugin | Điều khiển Chrome headless, chống phát hiện bot |
| Cursor | Ghost Cursor | Mô phỏng di chuyển chuột như người thật |
| ORM | Typegoose + Mongoose | Type-safe MongoDB access |
| Database | MongoDB ≥ 7 | Lưu trữ task queue, kết quả thực thi |
| Messaging | NATS | Giao tiếp bất đồng bộ với API Server |
| AI | OpenAI (GPT-4o-mini) | Sinh nội dung comment/reply thông minh |
| Captcha | OMO Captcha Service | Vượt rào cản captcha tự động |
| Container | Docker + Supervisor | Đóng gói, auto-restart tiến trình |
3. Kiến trúc tổng thể#
3.1. Vị trí trong hệ thống#
1.
Admin Dashboard gửi yêu cầu tạo chiến dịch tới API Server qua HTTP.
2.
API Server (Scheduler/Cron) phân rã chiến dịch thành task nhỏ và publish lên NATS.
3.
NATS tự động phân phối task cho Worker đang idle (load balancing).
4.
Worker nhận task, mở trình duyệt headless, nạp cookie + proxy, thực thi hành động trên mạng xã hội.
5.
Worker gửi kết quả (thành công/thất bại) trở lại API Server qua NATS hoặc Webhook.
3.2. Kiến trúc bên trong Worker#
┌───────────────────────────────────────────────────────┐
│ Social Tool Worker │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
│ │ NATS Sub │───>│ Services │───>│ Browser Mgr │ │
│ │ (Events) │ │ (Logic) │ │ (Puppeteer) │ │
│ └──────────┘ └──────────┘ └──────────────┘ │
│ │ │ │ │
│ │ ┌────┘ │ │
│ │ │ ▼ │
│ │ ┌────┴───┐ ┌──────────┐ │
│ │ │ Cron │ │ Chrome │ │
│ │ │ Engine │ │ Headless │ │
│ │ └────────┘ └──────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────┐ ┌──────────────┐ │
│ │ MongoDB │ │ Social Media │ │
│ │ (Queue) │ │ Platforms │ │
│ └──────────┘ └──────────────┘ │
└───────────────────────────────────────────────────────┘
Các thành phần bên trong Worker:| # | Thành phần | Vai trò |
|---|
| 1 | NATS Subscriber | Lắng nghe event từ API Server, nhận task mới |
| 2 | Service Layer | Xử lý nghiệp vụ: validate task, chuẩn bị payload |
| 3 | Cron Engine | Quét MongoDB, lấy task PENDING, điều phối thực thi |
| 4 | Browser Manager | Quản lý pool session Puppeteer, giới hạn concurrent |
| 5 | MongoDB | Lưu task queue tạm, kết quả xử lý |
| 6 | NATS Publisher / Webhook | Gửi kết quả trở lại API Server |
4. Hệ thống phân bổ Worker động#
Đây là cơ chế cốt lõi giúp Worker tối ưu tài nguyên. Hệ thống tự động phân chia CRON_TASK_LIMIT worker giữa 4 module dựa trên khối lượng công việc.Nếu không có module nào có task pending → chế độ Standby: mỗi module nhận 1 worker.
Nếu có N module active → chia đều CRON_TASK_LIMIT / N worker, phần dư ưu tiên module đầu.
Graceful shutdown: khi tái phân bổ, Worker đợi task đang chạy hoàn thành (tối đa 120s) trước khi dừng.
Debounce: tái phân bổ tối thiểu cách nhau 10 giây để tránh thrashing.
5. Luồng xử lý Task chi tiết#
6. Giao tiếp NATS#
6.1. Các event lắng nghe (Subscribe)#
| NATS Subject | Module | Mô tả |
|---|
| Task events | Task | Nhận task mới (like, comment, share...) |
| Cookie events | Cookie | Nhận yêu cầu login/lấy cookie |
| Proxy events | Proxy | Nhận yêu cầu kiểm tra proxy |
| TaskJoin events | TaskJoin | Nhận yêu cầu join group |
6.2. Phản hồi kết quả#
Worker gửi kết quả về API Server qua hai kênh:1.
Webhook HTTP — Gọi trực tiếp endpoint API Server kèm kết quả.
2.
NATS publish — Publish kết quả lên subject tương ứng.
Cơ chế retry: nếu webhook fail, t ăng call_webhook_count và thử lại.
7. Khả năng mở rộng (Scalability)#
Scale ngang: Thêm container Worker mới, NATS tự động load balance task.
Scale dọc: Tăng CRON_TASK_LIMIT và BROWSER_LIMIT_PER_PROCESS trong .env.
Tách biệt hoàn toàn: Worker không kết nối trực tiếp tới MySQL của API Server, chỉ giao tiếp qua NATS/Webhook.
Docker Compose: Mỗi Worker chạy trong container riêng, dễ dàng replicate.
8. Biến môi trường quan trọng#
| Biến | Mô tả | Giá trị mặc định |
|---|
USE_NATS | Chế độ NATS (true) hay HTTP (false) | true |
CRON_TASK_LIMIT | Tổng số worker slot | 10 |
BROWSER_LIMIT_PER_PROCESS | Số browser mỗi process | 2 |
NATS_URL | URL kết nối NATS | nats://shared-nats:4222 |
NATS_QUEUE_GROUP | Queue group cho load balance | social-tool-group |
DB_MONGO_* | Cấu hình kết nối MongoDB | — |
PROXY_API_URL | URL dịch vụ Proxy | — |
KEY_CHATGPT | API key OpenAI | — |
OMO_CAPTCHA_KEY | API key dịch vụ Captcha | — |
DEBUG_PUPPETEER_HEADLESS | Bật/tắt headless mode | true |
Tài liệu được cập nhật l ần cuối: 2026. Mọi thắc mắc vui lòng liên hệ đội ngũ kỹ thuật.Modified at 2026-03-26 03:07:47