色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

WebRTC進行壓測的思路及方式和一些經驗

vliwulianw ? 來源:360質量效能 ? 2023-10-30 11:30 ? 次閱讀

最近幾年WebRTC特別火,但如何對WebRTC服務進行壓力測試是一個很有難度和挑戰的工作,因為WebRTC客戶端實際使用上產生的壓力瓶頸主要來源對象是碼流而非傳統的HTTP并發請求。因為業務要求服務至少能支持提供300路并發,于是準備300路WebRTC連接驗證下SFU服務器壓力情況,這里分享進行壓測的思路及方式和一些的經驗,如果在這方面有相關經驗的測試技術方案的測試同行,請加評論給予指導幫助。

7210ddfa-76d4-11ee-939d-92fbcf53809c.png

Webrtc壓測主要問題:

1.那么多的壓力客戶端從哪里來?

2.如何監控服務器性能?

第一個問題:第一想法是請服務端開發同事出一份Linux C++版本WebRTC客戶端的代碼。支持開上百個線程對應上百個WebRTC客戶端,然后跑在多臺服務器上開始壓測,讀取本地視頻流和音頻流作為輸入。后來經過溝通感覺有點給開發同事增加了不少測試內容的工作量,再加上開發同事的時間也很緊張。經過與廠商的溝通以及網上沖浪調研,找到了解決這個問題的方案,準備通過使用playwright模擬瀏覽器作為WebRTC壓力的客戶端完成請求,并讀取本地文件作為音視頻輸入。

723621aa-76d4-11ee-939d-92fbcf53809c.png

第二個問題:經過討論服務端開發可以自行搭建監控服務,然后接入到grafana,增加可視化模板,就可以獲取到用戶連接數、RTC流數量、CPU使用率、服務器實時碼率、服務器消耗流量、內存使用等數據。(PS)內存監控需要自行配置,要有內存回收機制,另外limited內存需要設置合理。 開始測試之前我們要先搞清楚被測系統的框架,我們知道在WebRTC技術的實際應用中,衍生出了媒體服務器的用法,那媒體服務器區分成MCU(Multipoint Control Unit)和SFU(Selective Forwarding Unit)兩類網絡結構。MCU是一種傳統的中心化網絡結構,參與者僅與中心的MCU媒體服務器連接。MCU媒體服務器要合并所有參與者的視頻流,生成一個包含所有參與者畫面的視頻流,參與者只需要拉取合流畫面。而在SFU網絡結構中,雖然仍有中心節點媒體服務器,但是中心節點只負責轉發,不做合流、轉碼等資源開銷較大的媒體處理工作,所以服務器的壓力會小很多,服務器配置也不像MCU的要求那么高。每個參與者需要1個上行鏈路和N-1個下行鏈路,帶寬消耗高于MCU。那我們本次被測試系統架構使用的是SFU網絡結構,如下:

7248f992-76d4-11ee-939d-92fbcf53809c.png

我們搞清楚系統框架后,為實現壓力測試目標,需要使用具備以下幾點的自動化工具:

◆穩定且可預測的設備及運行網絡;
◆能在不同條件下進行測試,可動態控制的可配置網絡;
◆可以測試來自不同地點的用戶;
◆對結果進行詳細的可視化分析,以方便理解測試結果。 接下來走入正題,開始進入測試工作。

編寫webrtc壓力客戶端代碼

因為團隊想看到實際壓測中的全鏈路表現,比如房間管理,分散均勻的進入不同會議室,和多人進入一個會議室通話情況等。

開始腳本工具調研,playwright是微軟開源的自動化UI測試工具,支持Chrome、Firefox、Edge等多種瀏覽器,兼容多種語言、多種操作系統。

它基于Websocket協議,可以接受瀏覽器(服務端)的信號。

Playwright安裝簡單,pip安裝時會自動下載瀏覽器驅動: pip install playwright playwright install, 安裝時會自動下載瀏覽器依賴,windows系統在%USERPROFILE%AppDataLocalms-playwright 路徑下。

使用: from playwright.async_api import async_playwright 網上很多帖子就不過多贅述了。

具體Webrtc核心測試代碼:

72643d88-76d4-11ee-939d-92fbcf53809c.png

args 使用如下參數啟動即為下面的效果:


f"--use-fake-device-for-media-stream",

f"--use-fake-ui-for-media-stream"

7267e834-76d4-11ee-939d-92fbcf53809c.png

如果想讀取本地視頻及碼流作為webrtc client 音視頻為輸入即為下列參數:

f"--use-fake-device-for-media-stream",

f"--use-fake-ui-for-media-stream",

f"--no-sandbox",

f"--use-file-for-fake-video-capture=./webrtctest/1.y4m",

f"--use-file-for-fake-audio-capture=webrtctest/2.wav"

調試代碼中,在基礎代碼上進行封裝,首先準備一個csv文件,里面可以存鑒權使用的authCode之類的信息,同時按行讀取csv,并且會根據csv里面有多少行來決定打開多少個標簽頁,并選擇使用await異步方式打開,然后根據讀到的authCode,去進行下一步生成的session_token進行代碼編寫,再進行await page.goto(url),根據功能特性進行操作步驟,另外場景二需要多人進入一個會議室,客戶端策略是每個人都默認展示第一屏, 相應的增加了會議中翻頁的功能,并根據await div_locator.count()數進行循環翻頁,用的是協程,只有等上一個標簽頁面完成了所有程序后才能進行下一個標簽頁面,只要算出當前標簽頁最多能點多少次就好了,之后再進入的人不會影響上一個標簽頁,從而上一個標簽頁也不會再繼續翻頁了,這樣就解決了使用同一份代碼,不同人進入會議后都在不同頁碼的問題,這樣就能遍歷到所有的翻頁,也就是說如果有30個人進入會議,分別在1-5的屏上。

但是后來發現rtc當中經常的斷開重連后又默認展示第一頁,又改變策略為共享屏幕,繼續修改代碼。

7272524c-76d4-11ee-939d-92fbcf53809c.png

在調試的時候,會經常出現超時的問題

72791b18-76d4-11ee-939d-92fbcf53809c.png

后來在goto url里面增加timeout=10000000的參數,解決了該問題。

awaitpage.goto(url,timeout=10000000)  

測試實施

好了,本地的測試代碼調試通過了,服務端也準備就緒。但是,那么多的發壓真實設備怎么來,讓同事全部使用自己的電腦?那肯定是不夠的也不現實的,因為服務端做了一些策略限制,比如不管會議室里面多少人,只有第一頁的人有流量,這是為了節約成本。

另外playwright虛擬瀏覽器也是非常消耗資的,瀏覽器需要運行多個解碼器,本身也是一種負擔,所以一臺測試機上不能開太多標簽頁,使用了一下,8G內存的測試機開4個標簽頁,也就是4個webrtc連接;20G內存的測試機開7個webrtc連接,基本測試機的CPU使用就已經是100%了。

使用基于云的解決方案意味著,那還得花時間去寫一份移動端的代碼,而且移動端的兼容性代碼需要花更多時間,另外移動網絡和設備會如何影響你的基礎設施,此方案排除。雖然也可是申請虛擬機,但是還是想看到各個測試機真實的流狀態,最后決定通過公司內部申請Windows測試機做為壓測機器。

比較好的準備工作如下:

①.測試機器:環境準備,為了快速的讓IT人員準備機器,大概50-60臺, 我們先把需要的測試工具,測試腳本和腳本依賴環境requirements文件都給IT人員,讓IT人員先統一的幫忙安裝好系統的同時幫助我們安裝好我們需要的軟件環境。

②.測試準入:需要申請的一些特殊網絡準入,也讓IT人員做好MAC地址的記錄,拿到list后統一一次性申請。

③.測試網絡:申請交換機,準備好網線。

④.測試同步:因為測試機很多,每個單獨運行腳本也是非常耗時的,開始的時候調研想過使用Playwright Grid進行分布式測試,Playwright Grid的原理就不過多的說,大概就是可以在遠程機器上啟動瀏覽器,實現多臺設備同時運行測試。

這可以加快測試時間,模擬真實用戶環等,其中步驟里面有一句:測試腳本直接運行在Grid服務器上,使用與本地Playwright一致的API,不需要修改代碼。實際中是我們每臺機器的代碼都有不一樣的地方,比如authCode或者要進入的會議號都不一樣等,所以就放棄了Grid的方案。

壓力測試下的共同功能驗證體驗測試 部分主觀感受指標,當著參考。

1.視頻:

5分:完美。畫面十分清晰流暢

4分:好。畫面有輕微的不清晰、輕微的降幀,仔細看能看的出來,但感覺還算流暢

3分:中。偶有卡頓、或者畫面不清晰,但是還能接受

2分:差。頻繁卡頓,但是還算可用

1分:不可接受。完全卡住,或者畫面不可辨,完全不可用

2.音頻:

5分:完美。聲音清晰、流暢(與打移動電話體驗一致)

4分:好。音質不錯,雖然不完美,但不影響交流

3分:中。音質一般(有卡頓、吞字、不清晰、聲音忽小忽大),但湊合也能用

2分:差。經常聽不清楚,影響交流

1分:不可接受。完全聽不清楚對方說什么

問題記錄和調優

webrtc服務端環境,服務端使用集群方式部署的,有不同城市的服務器,本次壓力測試的目標不是壓測集群的壓力極限, 而是看在300路webrtc連接壓力下,同時房間管理,多人通話是否正常,資源使用是否合理,調度是否合理等。

本次壓力測試,肯定是在客戶端和服務端聯調完成后,能正常工作,并且該解決的p0,p1級問題之后才進行,要不當中很多問題會影響壓力測試進度。當然我們更需要知道在一定壓力下,邀請相關人員加入一起體驗測試功能,發現更多的問題也是目標之一。

測試中途發現重要問題:

服務端:1.IP調度不準確。2.內存使用過高。3.內存存在泄漏,回不到原點。

客戶端:1.客戶端經常掉線或者rtc斷開重連等。2.一個會議室達到一定人數后就會自動鎖會,再往里面加入就非常困難了, 經常收不到入會請求 ,不知道是客戶端沒有發出去還是主持人沒有收到請求,收不到準入客戶端就入不了會,腳本就超時失敗了。

典型問題調優過程: 內存無法回到原點的問題,服務端排查找原因,sfu內存回收慢的問題,是linux 運行時內存控制方式不同導致,那調研linux內存管理方式,切ptmalloc到tcmalloc,適時手動操作內存釋放。 客戶端rtc斷開重連問題,

①.開始的時候,房間管理頻繁斷開,排查發現并發接收消息有問題,服務端修改并發接收結構,并且改大超時時間為10秒;另外客戶端增加房間管理重連重試機制;

②.測試一段時間又出現房間管理連接斷開,重連后狀態不同步。解決辦法就是連上websocket就發消息,修改保證連上websocket并加入房間才發送消息;③.解決后發現網絡穩定的時候,房間管理的長連也有頻繁斷開情況。解決辦法就是連上websocket就發消息,修改保證連上websocket并加入房間才發送消息。

壓測中記錄好問題產生的原因和解決方法,然后繼續調優驗證直到服務端資源使用符合預期為止。其他的問題有的作為已知問題待解決。

測試報告

測試報告里面包含三部分,測試結論,資源使用情況,主要功能驗證情況,以及測試當中發現的問題分析。

測試結論:300路連接并發下,可以較好地支持碼流為xxxkbps的碼流300路對等鏈接,太具體的詳細數據不便于寫出。

資源使用包括:用戶連接數,RTC流數量,CPU使用率,服務器實時碼率,服務器消耗流量,內存使用,截取趨勢圖展示。檢查服務器資源是否是線性的。

功能驗證包括:各種場景的主觀感受均值,掉線次數等等,生成一個excel表記錄。

測試發現問題:測試當中發現的問題經過服務端客戶端同事的多次排查,需要解決集群的資源,客戶端問題,寫上發生的原因,以及解決方法等。

以上,為本次webRTC壓力測試的一些方案過程和心得,希望對大家的日常工作能有所幫助。







審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17185

    瀏覽量

    351727
  • Linux
    +關注

    關注

    87

    文章

    11322

    瀏覽量

    209865
  • RTC
    RTC
    +關注

    關注

    2

    文章

    541

    瀏覽量

    66728
  • WebRTC
    +關注

    關注

    0

    文章

    57

    瀏覽量

    11265
  • csv
    csv
    +關注

    關注

    0

    文章

    39

    瀏覽量

    5832

原文標題:WebRTC壓力測試實戰

文章出處:【微信號:軟件質量報道,微信公眾號:軟件質量報道】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    關于一些對OpenMP優化的方式

    本文調研了一些對OpenMP優化的方式。
    發表于 11-22 09:36 ?1131次閱讀

    求大神分享一些模擬應用設計的經驗

    求大神分享一些模擬應用設計的經驗
    發表于 04-21 06:07

    分享設計pcb layout的一些經驗

    分享設計pcb layout的一些經驗
    發表于 04-23 06:10

    WebRTC技術相關資料推薦

    很多種,p2p并不能解決所有的網絡通信問題,視頻通話會采用多種架構相結合的方式,保障用戶視頻通話的接通率。WebRTC雖然是項主要使用p2p的實時通訊技術,本應該是無中心化節點的,但是在一些
    發表于 11-01 08:21

    WebRTC技術的應用

    很多種,p2p并不能解決所有的網絡通信問題,視頻通話會采用多種架構相結合的方式,保障用戶視頻通話的接通率。WebRTC雖然是項主要使用p2p的實時通訊技術,本應該是無中心化節點的,但是在一些
    發表于 11-01 07:42

    WebRTC有哪些功能

    TURN 服務器進行數據轉發的方式實現通信。目前來看,Google 開源的用于學習和研究的項目基本都是基于 STUN/TURN 的 1 對 1 通信。如果你想要通過 WebRTC 實現多對多通信,該...
    發表于 11-03 08:16

    求大神分享一些智能車設計經驗

    實用的經驗。.首先是硬件的準備工作:1.硬件部分與要自己設計需要的電路制成pcb。推薦使用Altium Designer20,AD比較常用所以有多實用的教學視頻,另外需要自己了解布線規則,包括信號線,電源線常用的寬度一些電源電
    發表于 12-10 06:40

    一些硬件電路技術經驗整理

    一些硬件電路技術經驗整理,感興趣的小伙伴們可以瞧瞧。
    發表于 09-18 17:15 ?0次下載

    Autium_designer的一些經驗

    Autium_designer的一些經驗
    發表于 02-28 21:16 ?0次下載

    一些制作1969的分享經驗

    一些制作1969的分享經驗
    發表于 03-04 18:25 ?37次下載

    硬件設計總體思路一些常見誤區資料下載

    電子發燒友網為你提供硬件設計總體思路一些常見誤區資料下載的電子資料下載,更有其他相關的電路圖、源代碼、課件教程、中文資料、英文資料、參考設計、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發表于 03-31 08:49 ?13次下載
    硬件設計總體<b class='flag-5'>思路</b>和<b class='flag-5'>一些</b>常見誤區資料下載

    一些與眾不同的PCB布線經驗規則

    一些引起熱議的設計PCB的經驗法則進行了討論。下面將文章摘錄如下。 如今,我仍然還能看到一些在20年前就常見的PCB布線的經驗法則,它們現在
    的頭像 發表于 11-01 10:33 ?3121次閱讀

    電路設計的一些經驗總結

    電路設計的一些經驗總結
    發表于 12-02 13:57 ?44次下載

    一些對OpenMP進行優化的方法

    本文調研了一些對OpenMP進行優化的方法。
    的頭像 發表于 10-18 09:44 ?1761次閱讀

    介紹一些PCB布局的思路和原則

    今天給大家介紹一些PCB布局的思路和原則
    的頭像 發表于 05-17 10:00 ?1102次閱讀
    介紹<b class='flag-5'>一些</b>PCB布局的<b class='flag-5'>思路</b>和原則
    主站蜘蛛池模板: 小777论坛| 男人到天堂a线牛叉在线| 亚洲偷偷自拍免费视频在线| 欧美巨大xxxx做受孕妇视频| 国产真实女人一级毛片| 99久久精品国产国产毛片 | 国产一区内射最近更新| 99综合之综合久久伊人| 夜夜狂射影院欧美极品| 同桌上课把奶露出来给我玩| 欧美日韩高清一区| 久久两性视频| 国产亚洲日韩另类在线观看| 啊片色播电影| 91精品欧美一区二区三区| 亚洲精品中文字幕在线| 手机在线观看mv网址| 让人爽到湿的小黄书| 久久水蜜桃亚洲AV无码精品偷窥| 国产精品亚洲国产三区| 白丝女仆被强扒内裤| 91久久99久91天天拍拍| 一本色道久久综合一区| 新香蕉少妇视频网站| 爽爽影院线观看免费| 日本68xxxxxxxxx老师| 男女生爽爽爽视频免费观看| 久久精品热99看二| 精品久久久久久久99热| 国产偷啪自怕网| 国产精品久久久久影院| 丰满的寡妇hd高清在线观看| 波多野结衣 无码片| beeg日本老妇人| 99久久久无码国产精品免费人妻| 永久精品免费影院在线观看网站| 亚洲精品tv久久久久久久久久| 武侠古典久久亚洲精品| 无限资源在线看影院免费观看| 少妇一夜未归暴露妓女身份| 色拍拍噜噜噜啦啦新网站|