飞雪无情

浅谈新型教学-“女娲云教室”性能压测

Image

1、背景

Image

为解决线上教学的痛点,我们通过把云桌面技术运用到在线职业教育,自研云端虚拟化技术,创设在线实操课堂,实现边学边练的新型教学模式 —— “女娲云教室”由此诞生。

前面也有文章介绍女娲云教室(叮咚!女娲云开发者团队首次亮相)及相关技术(女娲调度系统浅谈),欢迎溯源查看。

当线上教学-直播课学员数越来越多时,需考虑提高女娲云教室的并发能力,此时,性能压测是必不可少的。在开展性能测试前,通常情况下需要先选择测试工具,主流的性能测试工具有 LoadRunner、JMeter。由于女娲云教室采用了Chrome浏览器,进行性能压测,要真实模拟学员上课的场景,需使用到协议有:http、websocket、webrtc。

此时,面临一个问题:协议构造难度大,主流的性能测试工具并不能满足压测需要。在无法借助性能工具进行压测的情况下,我们由此思考了自研方案来解决问题。方案详解如下。

2、自研解决方案

Image

回顾学员直播课上课业务场景的实现,让我们眼前一亮,开始思考:或许我们也可以做个类似C/S架构的web服务,通过服务端设计和客户端设计以实现性能压测。

服务端设计,即使用技术 Django restful framework 提供web服务控制;客户端设计,即通过Puppeteer & Selenium技术模拟学员端上课实操场景。

自研解决方案的系统流程图:

Image
图1 系统流程图
2.1 服务端设计

1)一键创建直播

我们需要简化创建直播的流程:一键创直播,生成上课链接。在Django服务里面实现手动创建直播的全流程,包括:创建直播课、推送媒体流、关联课中练习、通过调用腾讯云的接口实现应用服务pod扩缩容,并开启日志监控,统一对外提供一个接口。

2)构造批量用户

在实际的课程场景中,学员是通过使用微信或手机号进行授权上课。进行性能压测需要大量的虚拟用户,经过与开发同学沟通,通过改造账户体系,提供批量生成虚拟用户的接口,我们通过接口批量生产虚拟用户,一次可以构造几万用户且永久有效。

3)购买课程

学员需通过微信购买课程获取课程的权限,在性能压测时模拟大量用户购买课程难度较大,构造场景复杂。通过开发进行改造,提供授权接口,通过接口批量授权,将授权结果存储在Redis以实现大量用户性能压测。格式参照如下:

Image

图2.1.1 格式参照图

2.2 客户端设计

我们在腾讯云购买一台虚拟机,安装客户端脚本需要运行的技术环境:chrome浏览器、python和node.js,通过自启动的脚本完成镜像文件的制作,并存放于腾讯云。

自动化脚本有两个版本:

1)Puppeteer版本:使用无头浏览器节约内存和CPU,代码示例如下:

Image

图2.2.1 Puppeteer版本代码示图

2)python版本:使用Selenium,结合UI自动化思路打开浏览器,代码示例如下:

Image

图2.2.2  python版本代码示图

以上是两个自动化脚本案例。该自动化脚本如何运行?— 通过腾讯云接口购买【标准型SA3 32核64G】虚拟机,自动启动虚拟机,虚拟机启动后向Django服务获取上课地址和用户信息进入课堂。而进行性能压测需要模拟几万用户数,此时,我们可以使用腾讯云接口批量购买【标准型SA3 32核64G】虚拟机。
3)Puppeteer版本 VS Selenium版本

经测试比较,在腾讯云32核64G的虚拟机上打开chrome浏览器,打开数量≤100,Selenium版本相较稳定;打开数量介于100-180之间,则优先考虑Puppeteer版本。而我们在腾讯云购买一台虚拟机就能模拟100-180的用户,进入女娲云教室实操系统。

2.3 监控学员进入云教室数

通过2.1和2.2操作步骤完成性能压测后,如何有效监控多少学员登录女娲云教室进行实操练习?即通过内部自研的服务工作台,能够监控多少学员进入了女娲云教室。

Image

图2.3.1 服务工作台示图

同时,通过应用服务云监控,监控实例的运行情况。

Image

图2.3.2 应用服务监控示图

通过自研解决方案实现女娲云教室性能压测后,又通过自研服务工作台和云监控以检验压测效果。这,就是女娲云教室性能压测的整体解决方案。

本文作者:女娲技术团队

------------ END  ------------

也许你还想看
 
 |
叮咚!女娲云开发者团队首次亮相
  
|
微服务系统SaaS化改造实战
 
|
女娲调度系统浅谈

Image