1、 背景
為解決線上教學的痛點,我們通過把云桌面技術運用到在線職業(yè)教育,自研云端虛擬化技術,創(chuàng)設在線實操課堂,實現(xiàn)邊學邊練的新型教學模式 —— “女媧云教室” 由此誕生。
當線上教學 -直播課學員數(shù)越來越多時,需考慮提高女媧云教室的并發(fā)能力,此時,性能壓測是必不可少的。在開展性能測試前,通常情況下需要先選擇測試工具, 主流的性能測試工具有 LoadRunner、JMeter。 由于女媧云教室采用了Chrome瀏覽器,進行性能壓測,要真實模擬學員上課的場景,需使用到協(xié)議有:http、websocket、webrtc。
此時, 面臨一個問題:協(xié)議構造難度大,主流的性能測試工具并不能滿足壓測需要。 在 無法借助性能工具進行壓測的情況下,我們由此思考了 自研方案 來解決問題。 方案詳解如下。
2、自研解決方案
回顧學員直播課上課業(yè)務場景的實現(xiàn),讓我們眼前一亮,開始思考: 或許我們也可以做個類似C/S架構的web服務, 通過服務端設計和客戶端設計以實現(xiàn)性能壓測 。
服務端設計 , 即使用技術 Django restful framework 提供web服務控制; 客戶端設計 , 即通過Puppeteer & Selenium技術模擬學員端上課實操場景。
自研解決方案的系統(tǒng)流程圖:
圖 1 系統(tǒng)流程圖
2.1 服務端設計
1)一鍵創(chuàng)建直播
我們需要簡化創(chuàng)建直播的流程:一鍵創(chuàng)直播,生成上課鏈接。在Django服務里面實現(xiàn)手動創(chuàng)建直播的全流程,包括:創(chuàng)建直播課、推送媒體流、關聯(lián)課中練習、通過調用騰訊云的接口實現(xiàn)應用服務pod擴縮容,并開啟日志監(jiān)控, 統(tǒng)一對外 提供一個接口 。
2)構造批量用戶
在實際的課程場景中,學員是通過使用微信或手機號進行授權上課。進行性能壓測需要大量的虛擬用戶,經過與開發(fā)同學溝通,通過 改造賬戶體系 ,提供批量生成虛擬用戶的接口,我們通過接口批量生產虛擬用戶,一次可以構造幾萬用戶且永久有效。
3)購買課程
學員需通過微信購買課程獲取課程的權限,在性能壓測時模擬大量用戶購買課程難度較大,構造場景復雜。通過開發(fā)進行改造,提供授權接口,通過接口批量授權,將授權結果存儲在 Redis以實現(xiàn)大量用戶性能壓測。格式參照如下:
圖 2.1.1 格式參照圖
2.2 客戶端設計
我們在騰訊云購買一臺虛擬機,安裝客戶端腳本需要運行的技術環(huán)境: chrome瀏覽器、python和node.js,通過自啟動的腳本完成鏡像文件的制作,并存放于騰訊云。
自動化腳本有兩個版本:
1)Puppeteer版本 :使用無頭瀏覽器節(jié)約內存和 CPU,代碼示例如下:
圖 2.2.1 Puppeteer版本代碼示圖
2)python版本 :使用 Selenium,結合UI自動化思路打開瀏覽器,代碼示例如下:
圖 2.2.2 python版本代碼示圖
以上是兩個自動化腳 本案例。 該自動化腳本如何運行? — 通過騰訊云接口購買【標準型SA3 32核64G】虛擬機,自動啟動虛擬機,虛擬機啟動后向Django服務獲取上課地址和用戶信息進入課堂。 而進行性能壓測需要模擬幾萬用戶數(shù),此時,我們可以使用騰訊云接口批量購買【標準型SA3 32核64G】虛擬機。
3) Puppeteer版本 VS Selenium版本
經測試比較,在騰訊云32核64G的虛擬機上打開chrome瀏覽器, 打開數(shù)量≤100,Selenium版本相較穩(wěn)定;打開數(shù)量介于100-180之間,則優(yōu)先考慮Puppeteer版本。 而我們在騰訊云購買一臺虛擬機就能模擬100-180的用戶,進入女媧云教室實操系統(tǒng)。
2.3 監(jiān)控學員進入云教室數(shù)
通過 2.1和2.2操作步驟完成性能壓測后,如何有效監(jiān)控多少學員登錄女媧云教室進行實操練習?即通過內部自研的服務工作臺,能夠監(jiān)控多少學員進入了女媧云教室。
圖 2.3.1 服務工作臺示圖
同時,通過應用服務云監(jiān)控,監(jiān)控實例的運行情況。
圖 2.3.2 應用服務監(jiān)控示圖
通過自研解決方案實現(xiàn)女媧云教室性能壓測后,又通過自研服務工作臺和云監(jiān)控以檢驗壓測效果。這,就是女媧云教室性能壓測的整體解決方案。
聯(lián)系客服