跳转到内容

运行边界

SyncTV 是应用服务,不是数据库、对象存储、媒体库、CDN 或公网管理平台。生产部署前先确认下面这些边界,能减少错误配置和错误预期。

组件角色生产要求
PostgreSQL主持久化数据源必须持久化、备份,并在升级前验证 migration
Redis短期共享状态和协调层生产推荐,多副本必需
Secrettoken、凭据加密、OPAQUE、管理认证必须长期保存,不能提交仓库或写入日志
TLS保护登录、token、Cookie、MFA 和管理流量公网入口必须使用 HTTPS 或受信任加密隧道

PostgreSQL 保存用户、房间、权限、Provider instance、用户偏好、通知、审核和审计数据。Redis 保存 OAuth2 state、WebAuthn challenge、邮箱验证码、限流状态、token blacklist、集群协调和缓存失效等短期状态。

management gRPC、metrics 和内部调试入口面向管理员和运维,不面向普通用户或第三方客户端。生产部署应使用 Unix socket、内网、VPN、堡垒机、Kubernetes exec 或受控抓取链路;如果使用 TCP management,必须配置 management.auth_token

HTTP 和 gRPC 是同一业务能力的两种传输入口。传输层负责路径、query、JSON/protobuf、headers、stream body 和状态码/状态对象转换;业务实现集中在 synctv-api/src/implssynctv-core service/repository/provider 层。

新增能力时,protobuf 定义表达共享参数,HTTP/gRPC handler 转换为同一组 impl 参数。Provider、播放、聊天、文件和直播的核心逻辑放在 impls/core,保持传输入口之间行为一致。

非目标说明
媒体存储系统SyncTV 聚合、解析和代理外部媒体,不替代对象存储、网盘、媒体库或 CDN
通用转码平台转码能力取决于 Provider 或上游媒体系统
公网管理面管理控制面不能直接暴露给普通公网
CDNproxy 和 slice cache 不能替代带宽规划和边缘分发
强一致协同数据库Realtime 是房间事件和资源观察通道,不替代数据库事务边界

后台播放任务使用当前进程的 active room 集合作为调度边界。这里的 active room 指本节点 ConnectionRuntime 中至少有一个实时连接的房间。

这个边界用于播放时长探测、播放自动切换和播放资源生命周期任务。这类 worker 在每个节点运行,因为 follower 节点也可能是某个房间唯一存在连接的进程。多个节点可以同时持有同一个房间的连接,重复尝试由数据库层处理:时长探测使用行锁和 SKIP LOCKED 抢占任务,播放自动切换使用播放状态事务和乐观版本。

全局热门房间统计属于 presence 和分析数据,适合房间列表、管理视图和 metrics。播放后台任务应读取 ConnectionRuntime::active_room_ids(),让每个节点只处理自己正在承载连接的房间。

Leader election 适合分区维护、清理和其他全局单例任务。播放生命周期 worker 的所有权来自本节点实时连接集合。