Skeyevss 架构图解:分层、服务划分与数据流向
1. 文档目标
本文面向开发、实施与运维,解释3个核心问题:
- 系统按什么层次组织(分层架构)
- 每个服务边界是什么(服务划分)
- 一次典型业务请求如何流转(数据流向)
2. 总体分层架构
flowchart TB
U[用户/浏览器/客户端] --> W[Web Proxy]
W --> A[Backend API]
A --> D[DB RPC]
A --> V[VSS]
C[Cron] --> D
C --> M[SkeyesMS]
V --> M
M --> V
D --> MySQL[(MySQL/SQLite)]
D --> Redis[(Redis)]
A --> Redis
V --> Redis
A --> Etcd[(etcd)]
D --> Etcd
V --> Etcd
C --> Etcd
DEV[GB28181/ONVIF/RTSP设备] <--> V
Viewer[播放器/WebRTC/FLV/HLS] <--> M
分层说明
- 接入层:Web Proxy、设备接入(GB28181/ONVIF/RTSP)
- 业务层:Backend API、VSS、Cron
- 数据访问层:DB RPC(统一数据服务)
- 基础设施层:MySQL/SQLite、Redis、etcd、SkeyesMS
3. 服务划分与职责边界
3.1 服务地图
flowchart LR
subgraph APP[应用服务]
WEB[Web Proxy]
API[Backend API]
VSS[VSS]
DB[DB RPC]
CRON[Cron]
GUARD[Guard]
end
subgraph INFRA[基础设施]
MYSQL[(MySQL/SQLite)]
REDIS[(Redis)]
ETCD[(etcd)]
MS[SkeyesMS]
end
WEB --> API
API --> DB
API --> VSS
VSS --> MS
DB --> MYSQL
DB --> REDIS
API --> REDIS
VSS --> REDIS
API --> ETCD
DB --> ETCD
VSS --> ETCD
CRON --> DB
CRON --> MS
GUARD -.启动编排/守护.-> APP
3.2 职责边界
Web Proxy:统一入口、静态资源与 API 反向代理Backend API:业务接口、鉴权、参数校验、业务编排DB RPC:统一数据访问(数据库/缓存操作入口)VSS:视频信令与会话生命周期(注册、Invite、ACK、状态)SkeyesMS:流媒体处理(收流、转发、协议输出)Cron:定时任务、录像计划、离线处理Guard:部署态服务守护与一键启停
设计意图:Backend API 不直接连数据库,统一通过 DB RPC;视频控制逻辑集中在 VSS,媒体处理集中在 SkeyesMS。
4. 关键数据流向图解
4.1 用户登录与业务访问链路
sequenceDiagram
participant U as User
participant W as Web Proxy
participant A as Backend API
participant D as DB RPC
participant R as Redis
participant M as MySQL/SQLite
U->>W: 登录请求
W->>A: 转发 /api-backend/*
A->>D: 校验账号/权限
D->>M: 查询用户与角色
D-->>A: 返回用户信息
A->>R: 写入会话/缓存
A-->>W: 返回 token
W-->>U: 登录成功
4.2 视频实时播放链路
sequenceDiagram
participant UI as 前端页面
participant API as Backend API
participant VSS as VSS
participant MS as SkeyesMS
participant DEV as 设备
UI->>API: 请求播放通道
API->>VSS: 发起播放控制
VSS->>MS: start_rtp_pub(准备收流)
VSS->>DEV: SIP INVITE
DEV-->>VSS: 200 OK
VSS->>DEV: ACK
VSS->>MS: ack_rtp_pub(确认拉流)
MS-->>UI: 输出播放流(WebRTC/FLV/HLS等)
4.3 设备状态与监控数据流
flowchart LR
DEV[设备心跳/注册/目录] --> VSS
VSS --> DB[DB RPC]
DB --> MYSQL[(MySQL/SQLite)]
VSS --> REDIS[(Redis缓存状态)]
API --> DB
API --> REDIS
API --> WEB[前端状态展示]
4.4 录像任务链路(Cron)
sequenceDiagram
participant C as Cron
participant D as DB RPC
participant M as SkeyesMS
participant S as 存储
C->>D: 拉取录像计划
D-->>C: 计划与通道列表
C->>M: 启动录像任务
M->>S: 写入录像文件
C->>D: 回写任务状态
5. 部署视角(节点级)
flowchart TB
subgraph Node1[应用节点]
WEB[Web Proxy]
API[Backend API]
VSS[VSS]
DB[DB RPC]
CRON[Cron]
end
subgraph Node2[媒体节点]
MS[SkeyesMS]
end
subgraph Node3[基础设施节点]
MYSQL[(MySQL/SQLite)]
REDIS[(Redis)]
ETCD[(etcd)]
end
WEB --> API
API --> DB
API --> VSS
VSS --> MS
DB --> MYSQL
DB --> REDIS
API --> REDIS
API --> ETCD
VSS --> ETCD
DB --> ETCD
CRON --> DB
CRON --> MS
6. 为什么这样划分
- 解耦清晰:业务编排、数据访问、媒体处理职责独立
- 扩展方便:单服务可独立扩容(如 VSS、MediaServer)
- 问题隔离:某服务异常不等于整体不可用
- 运维友好:可按服务维度做日志、监控、告警与容量评估
7. 排障建议
出现“页面能打开但视频异常”时,按链路逆向排查:
UI -> Web Proxy(路由与鉴权)Backend API -> VSS(播放请求是否触发)VSS -> 设备(Invite/ACK/SIP状态)VSS -> SkeyesMS(start/ack 回调)SkeyesMS -> 播放端(协议输出与端口)
8. 总结
Skeyevss 的核心架构思路可以概括为:
- 业务接口走 Backend API
- 数据访问收敛到 DB RPC
- 视频控制收敛到 VSS
- 媒体处理收敛到 SkeyesMS
在此基础上,通过 Redis/etcd 与日志监控体系保证系统可观测、可维护、可扩展。