vss-performance 配置与设备快照的分频拉取
配置与设备快照的分频拉取试用安装包下载 | SMS | 在线演示项目地址https://github.com/openskeye/go-vss背景VSS 运行期需要字典、系统设置、流媒体节点、设备/通道在线快照、ONVIF 探测结果。若每秒全量拉取所有数据DB RPC 与网络开销会随实例数线性恶化。本仓库用单 Ticker 时间取模把不同数据的刷新频率拆开并把结果缓存在进程内。项目中的做法1. 首轮并行拉取再进入周期循环FetchDataLogic.DO中使用sync.WaitGroup并行执行dictionaries()与「setting→mediaServers→onvifDiscover→deviceOnlineState」链后者依赖设置。两条路径各用sync.Once触发一次InitFetchDataState.Done()与 SIP 启动屏障配合。2. 分频策略1 秒 tick进入for range time.NewTicker(time.Second).C后条件行为now % 4 0异步go字典、设置、流媒体now % 10 0异步设备/通道在线状态now % 120 0异步ONVIF 探测即秒级心跳驱动但配置类约 4s、在线状态 10s、ONVIF 120s根据不同场景设置获取周期。YYYTicker 1snow % 4 0?go dictionaries / setting / mediaServersnow % 10 0?go deviceOnlineStatenow % 120 0?go onvifDiscover3. 内存快照读路径拉取结果写入svcCtx.DictionaryMap、svcCtx.Setting、MediaServerRecords、设备在线缓存等。信令与 HTTP 逻辑只读内存把热路径与 DB 解耦。4~120sDB Config/Device RPC进程内快照SIP / HTTP Handler要点变更延迟配置改完后最坏约一个刷新周期才在 VSS 侧生效若需秒级生效应叠加「写后通知 / 主动 pull」机制可参考 Backend 的 channel 刷新模式。突发go每个刻度起多个 goroutine在 CPU 紧张时可能造成短暂抖动若 profiling 显示调度热点可改为带超时的工作池或合并 RPC。ONVIF 与在线状态探测与列表查询相对重长周期是正确方向上线初期可调大间隔减轻局域网广播压力。相关代码路径core/app/sev/vss/internal/logic/proc/fetch_data_proc.go