Architecture · System Overview

Kiến trúc tổng thể của Threads API v2

Kiến trúc ở đây giải thích hệ thống chia lớp thế nào, request đi đâu và vì sao các tác vụ nặng được đưa sang worker.

Tổng quan kiến trúc

Threads API v2 là modular monolith: một app Express 5 duy nhất nhưng chia domain thành module rõ ràng. Request đi từ Express router đến controller, service, repository, rồi database hoặc provider ngoài.

Quyết định quan trọng nhất là tách tác vụ nặng sang BullMQ worker. Nhờ đó register không phải đợi email/index search hoàn tất, post không phải đợi embedding xong, và notification có thể gom nhiều event thành một push.

Snapshot 12/06/2026: TypeScript 5.8, Express 5.1, Prisma 7.8 với MariaDB adapter, 41 Prisma models, 9 worker implementations và 11 queue names. Xem system reference hiện tại để biết route prefix và các stub đang tồn tại.

Sơ đồ kiến trúc

ClientWeb/mobileExpress API/api/v1MySQLPrismaRedisCache/QueueExternal APIsR2 HLS AIBullMQ Workersworkers/*.tsSearch StoresMySQL/PineconeHTTPPrismaRedisSDKenqueueindex
Màu cam là API server, màu xanh là worker xử lý phần nặng sau response.

Giải thích từng thành phần

1
Client

Frontend/mobile gọi HTTP và Pusher.

2
Express API

Validate, auth, business service, response JSON.

3
MySQL/Prisma

Nguồn dữ liệu bền vững.

4
Redis/BullMQ

Cache, queue, blacklist, Bloom filter, debounce.

5
Workers

Email/vector/notification/AI/like sync.

6
External APIs

R2, HLS, OpenRouter, Mixedbread, Pinecone, Pusher.

Luồng request điển hình

Browser gửi request đến /api/v1. apiLimiter chạy trước router. Nếu route cần login, authorization verify JWT, kiểm tra blacklist Redis và user status trong DB. Controller gọi service; service validate rule nghiệp vụ, gọi repository/Prisma hoặc enqueue worker.

Điểm kết nối với hệ thống ngoài

Hệ thống ngoàiGiao thứcMục đíchĐược gọi khi nàoTimeout/SLA
RedisTCPCache, queue, Bloom, blacklistBoot, auth, post, jobs[CẦN XÁC NHẬN]
MySQL/MariaDBTCPDatabase chínhMọi repository[CẦN XÁC NHẬN]
PineconeHTTPS SDKVector searchPost embedding/search[CẦN XÁC NHẬN]
OpenRouterHTTPS SDKAI scoring/reportEvaluation worker[CẦN XÁC NHẬN]
Cloudflare R2S3 APIImage uploadUpload service[CẦN XÁC NHẬN]
HLSHTTPS + webhookVideo upload/statusUpload videos/webhook[CẦN XÁC NHẬN]
PusherHTTPS/WebSocketRealtime eventsMessage/notification/report[CẦN XÁC NHẬN]

Quyết định kiến trúc

Vấn đềPhương án đã cân nhắcPhương án đã chọn và lý doHệ quả / trade-off
Request không bị chậm bởi tác vụ nặngXử lý sync hoặc queueQueue bằng BullMQ/Redis để response nhanhCó eventual consistency
Tách domainMicroservices hoặc modular monolithModular monolith để đơn giản deploy nhưng rõ boundaryCó thể phụ thuộc chéo nếu không kiểm soát
SearchQuery DB trực tiếp hoặc index riêngMySQL + PineconeText search phụ thuộc khả năng query của database
Auth sessionJWT stateless hoặc DB sessionJWT access + refresh token DB hashCần Redis blacklist khi logout