┌───────────────┬───────────────────────────────┐ │ Master │ Worker │ ├───────────────┼───────────────────────────────┤ │ • API服务 │ • 计算节点 │ │ • 任务调度中心 │ • 浏览器实例管理 │ │ • 状态监控 │ • 搜索任务执行 │ └───────────────┴───────────────────────────────┘
sequenceDiagram
participant M as Master
participant W as Worker
participant B as Browser
participant D as Database
W->>M: 注册服务
loop 心跳机制
W->>M: 发送心跳(含负载指标)
end
M->>W: 分配搜索任务
W->>B: 启动浏览器实例
B->>W: 返回页面句柄
W->>B: 执行搜索操作
W->>D: 保存搜索结果
W->>M: 更新任务状态
M->>D: 记录最终状态
Worker启动注册
# worker_server.py
await client.post(f"{master_url}/api/workers/register")
Master维护注册表
# api_server.py
system_state.registered_workers[worker_id] = {
"last_heartbeat": datetime.now(),
"metadata": worker.dict(),
"current_load": 0
}
graph TB
W[Worker启动] --> B[初始化BrowserCore]
B --> H[创建浏览器实例]
H --> S[绑定搜索处理器]
S --> T[执行任务]
T --> C[关闭浏览器]
graph LR
WEB[搜索引擎网站] -->|抓取| B[浏览器实例]
B -->|解析| W[Worker]
W -->|存储| DB[(数据库)]
W -->|状态上报| M[Master]
M -->|任务分配| W
┌──────────────┐
│ Master │
│ │
│
└──────┬───────┘
│
┌─────────────────┼─────────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Worker 1 │ │ Worker 2 │ │ Worker N │
│ 浏览器实例 1 │ │ 浏览器实例 2 │ │ 浏览器实例 N │
└──────────────┘ └──────────────┘ └──────────────┘
# worker健康检查响应
{
"status": "healthy",
"browser_connected": True,
"current_load": 2
}