live-sfu-demo/design.md

40 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 架构设计规范 — 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、媒体反代、静态 UI 嵌入。
- `cmd/server/`:进程入口,装配配置、服务与优雅关闭。
- `web/`:前端单页应用(SolidJS + TanStack + Ark UI + Tailwind v4),构建产物由 Go embed 内联。
## 设计约束
- 控制面与媒体面分离:浏览器只与服务端交换 SDP/信令,SFU 凭证不出服务端。
- 多 SFU 后端可同时承载同一路发布(分流),拓扑由 `WatchRoom` / SSE 实时广播。
- 持久化默认嵌入式、零外部依赖;远程 libSQL 仅作可选项。
- 正式环境密钥必须显式配置,禁止内置弱密码与不安全默认密钥。