EasyDSS视频平台我们讲过很多,EasyDSS相较于其他视频平台的特点是可以直播也可以点播,支持将视频文件上传或者推流桌面录屏等,该特点在很多教育行业课堂直播上发挥了作用。EasyDSS直播列表页面如下:
该页面主要获取10行数据,如果正在处于直播状态中,则显示对应的信息,前端网页主要发送 /live/list 请求到 Go 后台接口,Go 层收到请求后,收集信息返回到前端。目前的设计如下:
该处逻辑的调用顺序为:
- 前端发送 post 请求,获取一页 10 个数据:/live/list;
- Go 层收到请求,从数据库层获取对应的 10 个数据;
- 因为 Go 层不知道每个直播间对应的直播状态,因此需要向 C 层发送 http 请求,获取对应的 10 个数据的信息;
- Go 层每个数据都会向 C 层发送一次 http 请求。
- Go 层收到 C 层直播结果后,将数据处理后返回给前端。
以上设计,在用户量不多的情况,问题不大,但是在数据量大的时候有以下缺点:
- 前端发送1次 http 请求,获取10个数据,Go层就要发送10次http请求到C层。如果有10个前端,那么Go层就会发送100次请求到 C 层,导致 Go 层和 C 层的压力都会非常大;
- 多个前端存在的情况下,有可能查询很多相同的数据,导致 Go 层向 C 层的请求有很多冗余存在。
针对以上缺点对该模块进行结构上的重新设计,如下图:
首先将该模块分成两个模块,Go层和C层交互的模块A,前端和Go层交互的模块B。以下对模块A和B分别进行描述。
模块A的设计如下:
- Go 层定时向C层发送获取全部正在直播状态的信息,定时时间可以配置,一般在 1s 以内都不会影响前端的显示;
- C 层收到请求后,将正在直播的直播间信息返回;
- Go 层收到C 层的信息后,将信息加入到自己的缓存层中;
- 缓存层中的数据被定时更新掉。
- 模块B的设计如下:
- 前端发送 HTTP 请求到 Go 层;
- Go 层收到请求后,从数据库获取直播间信息;
- Go 层从缓存层中获取正在直播的直播间信息,更新直播间信息,然后将信息返回给前端;
- 前端都到信息后,显示出来。
新的设计,在有大量用户和前端的情况下,比如100个前端,前端会向Go层发送100个http请求,而 Go 层仅仅发送一次请求到 C 层,相对于以前要发送 1000 次请求到 C 层,极大的优化了代码,消耗更少的性能。
为了更好适应不同服务的性能,TSINGSEE青犀视频也会对其他云边端视频平台进行不同程度的优化,大家可以关注我们获取最新信息。如果还想了解更多EasyDSS相关内容,欢迎联系我们了解或者试用。