2.1 KiB
2.1 KiB
架构设计规范 — SyncLive
SyncLive(同步直播,对标 SyncTV)的整体架构与模块划分说明。
分层架构
浏览器 (SolidJS SPA)
│ HTTP / SSE / WebRTC (信令经服务端反代,媒体直连 SFU)
▼
控制面 (Go)
├─ gRPC + JSON 网关 # protobuf 定义的统一控制契约
├─ 鉴权 (Casbin RBAC + JWT) # 登录、权限校验、用户管理
├─ 房间拓扑 (roomHub) # 内存态 + 嵌入式 libSQL 持久化
└─ 媒体面反代 (httputil) # SRS / Cloudflare 信令与 HLS 反代
│
▼
媒体面 (SFU Provider 抽象)
├─ Cloudflare Realtime # 主 SFU(托管,低延迟扇出)
└─ SRS # 本地/对照 SFU(WHIP/WHEP + HLS/FLV 同出)
模块职责
api/:protobuf 控制面契约(SyncLive服务),单一事实来源,经buf generate生成 Go 代码到gen/。internal/config/:运行参数与环境变量加载,含正式环境密钥校验(Validate)。internal/db/:嵌入式 libSQL 持久化(房间分发拓扑),仅 file:/:memory: 模式。internal/auth/:Casbin RBAC 模型与策略、JWT 签发校验、用户存储。internal/sfu/:SFU 后端 Provider 抽象(Cloudflare / SRS),统一BackendInfo与能力查询。internal/server/:HTTP/gRPC 服务装配、JSON 网关、房间与聊天 SSE(含GET /api/rooms/events全局房间 SSE 与GET /api/room/{room}/events单房间拓扑 SSE)、媒体反代、静态 UI 嵌入。cmd/server/:进程入口,装配配置、服务与优雅关闭。web/:前端单页应用(SolidJS + TanStack + Ark UI + Tailwind v4),构建产物由 Go embed 内联。
设计约束
- 控制面与媒体面分离:浏览器只与服务端交换 SDP/信令,SFU 凭证不出服务端。
- 多 SFU 后端可同时承载同一路发布(分流),拓扑由
WatchRoom/ SSE 实时广播。 - 持久化默认嵌入式、零外部依赖;远程 libSQL 仅作可选项。
- 正式环境密钥必须显式配置,禁止内置弱密码与不安全默认密钥。