Files
story/docs/adr/0001-modular-monolith.md
T

1.0 KiB

ADR-0001:首期采用Go模块化单体与独立Worker

  • 状态:已接受
  • 日期:2026-08-23

背景

系统需要同时承载设备控制、家庭业务、Agent编排、供应商回调和后台可靠任务。首期需要优先保证事务一致性、联调效率和可部署性,同时保留以后按领域拆分服务的路径。

决策

后端采用同一Go模块中的模块化单体,部署为api、callbacks和worker三个独立进程。业务模块只能通过公开的应用层接口协作,不跨模块直接修改数据。跨进程工作先写入PostgreSQL outbox,再由Worker执行;Redis只保存可重建状态。

前端采用React、TypeScript和Vite。业务事实以PostgreSQL为准,实时语音不经过自建应用服务器。

影响

  • 本地和测试环境可以用一套代码快速启动三个进程。
  • 共享数据库不代表可以绕过模块边界,代码评审需检查跨模块访问。
  • 将来拆分服务时,以模块公开接口、outbox事件和数据所有权为迁移边界。