Skip to content

微服务设计

本页整理旧 docs/MICROSERVICES_DESIGN.md 的核心结论,用来说明 SoulBrowser 如果继续拆分服务,应该沿什么边界做,而不是把现状误解成已经完全微服务化。

当前状态

项目现在仍然以 monorepo + workspace 为主,核心运行时集中在 soulbrowser-kernel
也就是说:

  • 代码是模块化的
  • 运行时仍偏单体内核
  • 很多未来的服务边界已经在 crate 层先出现

为什么要考虑微服务

旧设计里提出拆分的原因主要有三个:

  • 认证、计费、任务执行、浏览器运行的扩缩容特征不同
  • 浏览器执行链路对资源和安全隔离要求更高
  • 长期看需要让不同能力独立部署和演进

推荐拆分边界

API / Gateway

负责:

  • 统一 HTTP 入口
  • 认证接入
  • 请求转发
  • 外部协议适配

Runtime / Agent Service

负责:

  • session 与 task 生命周期
  • agent loop / planner
  • tool orchestration

Browser Runtime

负责:

  • CDP 连接
  • 本地桥接
  • stealth / anti-detection
  • 浏览器实例管理

Product Services

包括但不限于:

  • auth
  • billing
  • memory / conversation context
  • timeline / analytics

不应该过早拆的部分

以下部分更适合先保持在 workspace 内部模块化,而不是立刻拆远程服务:

  • perception 子模块
  • tool primitives
  • 状态格式化和 prompt 组装
  • 一些强依赖本地类型系统的基础设施层

原因是这些部分跨模块调用非常频繁,过早网络化会显著增加复杂度。

迁移策略

更合理的顺序是:

  1. 先在 crate 层明确边界
  2. 再把接口抽成 trait / contract
  3. 最后才选择是否独立进程部署

所以微服务设计文档最重要的价值,不是“今天就拆”,而是帮助我们避免把边界继续写乱。

适合继续保留的工程做法

  • monorepo 统一管理类型和协议
  • 在 docs 中先定义服务责任,而不是先定义容器编排
  • 对外契约优先走稳定 API,而不是内部结构体直接外泄

相关页面

SoulBrowser Documentation