本文来自腾讯云技术沙龙,本次沙龙主题为在线教育个性化教学技术实践linux
演讲嘉宾:周锦民 | 2011年毕业进入腾讯, 现任在线教育部在线教育后台中心高级工程师,多年linux后台开发工做经验,目前主要负责腾讯课堂和企鹅辅导两款产品的后台系统架构设计与研发管理。c++
今天分享的主题分三个部分。第一部分,跟你们介绍一下腾讯课堂和企鹅辅导这两款产品。第二,讲一下课堂直播系统,和腾讯云这边的具体实践案例。第三,谈一下在线教育的房间系统设计方案和这几年过程当中的优化效果。redis
腾讯课堂是什么?腾讯课堂是腾讯推出的在线教育平台,它会聚了大量的优质机构和讲师,涵盖了大量的精品课程。包括考验考证、IT教学、英语培训等等。这里给老师一站式的线上教学和学生的互动学习体验,这是咱们的课堂特色。咱们有海量的资源和流量,目前的入驻机构超过了4万多家,其中在线教育课程超过了20多万了。各类各样的科目类型能够选择,目前累计的上课数3000万,每周有超百万级,目前单门课程同时在线6万人。腾讯课堂里面有丰富的教学教务工具,助力机构和老师有一个更加丰富的教学管理。算法
企鹅辅导是面向小学、初中、高中的学生在线学习平台,目前已经有教师团队200多人,学科覆盖10个年级,有200万的学生用户。这是企鹅辅导的教师团队,他们都是咱们辅导的全职教师团队,这些老师都是来自于清华、北大各个名校,咱们曾经是各科的高考状元。企鹅辅导有完整细致的教学任务,从学前到学后,助力学生完整地提高。企鹅辅导支持直播1V1的答疑辅导,还有专业的课后老师给学生进行做业的批改。企鹅辅导有各类各样的辅助学习工具,例如在线互动抢答,利用图像识别技术,在线拍照批改,还有抢红包互动,提高学生的学习兴趣。腾讯课堂和企鹅辅导支持多终端学习,在电脑或手机上能够轻松学。sql
下面是腾讯课堂整个后台的技术架构,终端包括PCQQ、H5端、APP端、PC独立版、Mac端。通道层,这是对应的通道。接入层是统一的接入层,主要做用是把各端各自的协议,转成内部的通讯协议。逻辑层。咱们整个教育课堂后台主要分三大块,第一块,是机构平台,包括资料、订单支付、活动运营。第二块,是直播系统。第三,房间系统。下面是咱们的核心模块,就是基础功能,像数据中心、订单系统、基础资料、我的中心。存储层有多种,Mysql、Ckv、Es、Redis。数据库
下面介绍一下腾讯在线教育结合腾讯云互动直播技术的案例,咱们具体是这么作的。老师直播的时候,接入了腾讯云的互动直播系统,走的是腾讯云私有协议UDP协议。学生端能够实时跟老师进行互动。小程序
腾讯云的互动直播系统,会经过旁路推流,转发音视频流给腾讯云直播系统。直播系统接入模块收到推过来的流,会作两件事情。api
第一件事,把互动直播系统推过来的流,转交给全局转码模块。全局转码模块支持定制不少参数,例如能够制定多种分辨率的转码方式;能够加上腾讯课堂的LOGO水印,并支持视频加密,保证视频的资料、知识产权的安全,还有支持多种协议的封装等。缓存
第二件事情,全局转码模块会提供音视频流给云端混流功能,云端混流功能也是直播系统的能力。这个功能怎么用呢?它支持预设多种混流模块。咱们教育这边有几款产品,好比咱们有PPT、画中画、学生端的举手上麦。咱们会预设几种混流模板,当老师把PPT切画中画,或者画中画切PPT,或者有学生举手上麦的时候,客户端会发起一个变动信令到教育服务,教育服务这边会调云端混流服务的接口,来改变混流的方式。云端混流模块会根据混流模板的要求,到直播接入模块拉取指定的多路音视频流,而后把多路流合成一路,再交给全局转码进行从新转码。转码完成以后,交给分发模式,分发模块把音视频文件缓存到cdn模块。安全
腾讯云的cdn模块,在国内有1000多个加速节点,全球有200多个加速节点。由于腾讯课堂这边的老师、学生遍及国内外。经过这些CDN节点的加速,可以给课堂的直播提供一个稳定良好的播放质量。
直播的时候,咱们H5和PcWeb端采用的是通过混流后的一路流的方式,这种方式它的好处就是可以减小手机带宽流量,兼容性和稳定性更好。
直播的同时,腾讯云的点播系统还会实时进行录制。录制的时候,会产生多个录制文件分片。结束以后,会把分片拉回到本地,从新对这些分片进行视频对齐,会从新进行布局、调整,包括分辨率调整,而后插帧补流,当有视频断流时,会插入带有课堂logo的静态画面,保证音视频的连贯性。最后从新生成定制的回放文件。这样学生看录制回放的时候,能有一个连贯性的观看体验。
最后是录制的方式。录制这边学生端也支持录播一路的方式或者录播多路的方式。PC端因为家庭带宽足够稳定,咱们采用的是录播多路的方式。路过多路的方式在客户端能够作不少定制化的需求。好比回放过程当中,PC客户端能够动态调整画中画和ppt的切换,分辨率或布局的调整。
以上就是在线教育课堂结合腾讯云音视频产品的实践。咱们运用了腾讯云提供的的互动直播、直播、点播、CDN加速、视频加密的一整套解决方案。应用了腾讯云一整套解决方案,咱们还须要作的事情就不多了。如今腾讯内部CTO和公司总办们也在大力推广技术总体上云的发展战略。咱们也积极响应领导的号召,积极上云,这样能够大大减小音视频这块的运营和维护成本,能够把更多的精力聚焦于产品打磨,给老师和学生有一个更好的产品体验。
房间系统的架构请观看下面的流程,它分几个模块。首先是接入层,进出代理服务接入客户端请求,并把请求转发给心跳服务和成员列表进行状态存储。接着是逻辑层,它包括不少课堂交互的功能,好比学生举手、聊天区、红包互动等等,每一个交互行为会产生一个消息,经过push代理服务把消息转播给其余老师和学生。
房间系统在开发过程当中咱们遇到三大挑战。心跳服务,成员列表,由于并发量很是大,那怎么作到平滑扩容?怎么保证服务的可靠性和可用性,还有容灾怎么作?另外消息push服务,怎么保证通用性和易用性,怎么保证消息的可靠性?在消息并发量高的时候,怎么解决消息风暴致使服务过载的问题?下面分别讲一下这三个模块咱们的一些优化实践。
心跳服务优化以前,它采用msgq接入(msgq是腾讯自研的内存消息队列),采用双机单进程模型。这个方案实践简单,在项目初期的时候可以知足业务快速上线,但随着用户量愈来愈大,如今已经没法支撑如今业务的实现。它如今有几个问题,高峰时期容易丢消息,当系统消息量忽然间增大的时候,msgq缓冲队列到达上限或者msgq服务异常就有丢消息的风险。第二,逻辑复杂、不通用,好比超时检查、多终端登陆须要定制开发。第三,由于心跳服务要保存目前的心跳状态,如今双机相互同步的方案没法扩容。基于这三个问题咱们作了新的优化。
下面是新版的优化方案。 咱们把心跳服务的架构分了两层,心跳代理heart_proxy和心跳存储服务heart_svr, 而后经过L5服务进行路由。L5是什么呢?L5是腾讯内部的路由决策服务。
新版的心跳服务要解决4个问题。一、服务扩展性。二、保证服务的可靠性。三、通用性设计。四、踢人检测,避免误踢。
成员列表的初期版本,采用了代理加CKV存储的方式。CKV是腾讯内部的自研的key-value数据库。每一个房间的成员列表用pb序列化后存入ckv,须要读取时是总体读出来再进行反序列化使用,这种方式存储几个问题。
新版的改造咱们怎么作了? 咱们调研了几种存储选型。
目前咱们最终采用的是内存存储,多主同步的设计方案。它由以下几个特色:
消息push优化前,每一个逻辑服务独自拉成员列表,还要制定对应的每一个通道的push代理。此方案的缺点是代码很是冗余,没有统一的接口,模块间的强耦合。如今这个方案是没法知足咱们的需求快速迭代开发,因此咱们对这个方案进行了改造。
新版消息push改造方案,新版push主要分三块:push_proxy统一接入层,引入腾讯云的ckafka作消息缓冲, 引入redis作异步消息存储。
push_proxy支持多种业务定制push方式: 单播、广播、指定人、指定角色、指定端。
咱们对push服务作了性能优化:
容灾降级咱们怎么作呢?
最后是消息可靠性的实践:
获取更多详细资料,请戳如下连接: 周锦民:腾讯在线教育视频互动直播间技术实践.pdf
问答
相关阅读
此文已由做者受权腾讯云+社区发布,原文连接:https://cloud.tencent.com/developer/article/1154667?fromSource=waitui
欢迎你们前往腾讯云+社区或关注云加社区微信公众号(QcloudCommunity),第一时间获取更多海量技术实践干货哦~