91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

彈幕系統(tǒng)設(shè)計實踐

jf_ro2CN3Fa ? 來源:芋道源碼 ? 2023-01-15 11:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群


背景

為了更好的支持東南亞直播業(yè)務(wù),產(chǎn)品設(shè)計為直播業(yè)務(wù)增加了彈幕。第一期彈幕使用騰訊云支持,效果并不理想,經(jīng)常出現(xiàn)卡頓、彈幕偏少等問題。最終促使我們開發(fā)自己的彈幕系統(tǒng)。性能要求是需要支持,單房間百萬用戶同時在線。

基于 Spring Boot + MyBatis Plus + Vue & Element 實現(xiàn)的后臺管理系統(tǒng) + 用戶小程序,支持 RBAC 動態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 視頻教程:https://doc.iocoder.cn/video/

問題分析

按照背景來分析,系統(tǒng)將主要面臨以下問題:

  1. 帶寬壓力

    假如說每3秒促達(dá)用戶一次,那么每次內(nèi)容至少需要有15條才能做到視覺無卡頓。15條彈幕+http包頭的大小將超過3k,那么每秒的數(shù)據(jù)大小約為8Gbps,而運維同學(xué)通知我們所有服務(wù)的可用帶寬僅為10Gbps。

  2. 弱網(wǎng)導(dǎo)致的彈幕卡頓、丟失

    該問題已在線上環(huán)境

  3. 性能與可靠性

    百萬用戶同時在線,按照上文的推算,具體QPS將超過30w QPS。如何保證在雙十一等重要活動中不出問題,至關(guān)重要。性能也是另外一個需要著重考慮的點。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現(xiàn)的后臺管理系統(tǒng) + 用戶小程序,支持 RBAC 動態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址:https://github.com/YunaiV/yudao-cloud
  • 視頻教程:https://doc.iocoder.cn/video/

帶寬優(yōu)化

為了降低帶寬壓力,我們主要采用了以下方案:

  1. 啟用Http壓縮

    通過查閱資料,http gzip壓縮比率可以達(dá)到40%以上(gzip比deflate要高出4%~5%)。

  2. Response結(jié)構(gòu)簡化0454f32e-947f-11ed-bfe3-dac502259ad0.jpg

  3. 內(nèi)容排列順序優(yōu)化

    根據(jù)gzip的壓縮的壓縮原理可以知道,重復(fù)度越高,壓縮比越高,因此可以將字符串和數(shù)字內(nèi)容放在一起擺放

  4. 頻率控制

  • 帶寬控制:通過添加請求間隔參數(shù)(下次請求時間),保證客戶端的請求頻率服務(wù)端可控。以應(yīng)對突發(fā)的流量增長問題,提供有損的服務(wù)。
  • 稀疏控制:在彈幕稀疏和空洞的時間段,通過控制下次請求時間,避免客戶端的無效請求。

彈幕卡頓、丟失分析

在開發(fā)彈幕系統(tǒng)的的時候,最常見的問題是該怎么選擇促達(dá)機制,推送 vs 拉取 ?

Long Polling via AJAX

客戶端打開一個到服務(wù)器端的 AJAX 請求,然后等待響應(yīng),服務(wù)器端需要一些特定的功能來允許請求被掛起,只要一有事件發(fā)生,服務(wù)器端就會在掛起的請求中送回響應(yīng)。如果打開Http的Keepalived開關(guān),還可以節(jié)約握手的時間。

047123aa-947f-11ed-bfe3-dac502259ad0.jpg

優(yōu)點: 減少輪詢次數(shù),低延遲,瀏覽器兼容性較好。缺點: 服務(wù)器需要保持大量連接。

WebSockets

長輪詢雖然省去了大量無效請求,減少了服務(wù)器壓力和一定的網(wǎng)絡(luò)帶寬的占用,但是還是需要保持大量的連接。那么人們就在考慮了,有沒有這樣一個完美的方案,即能雙向通信,又可以節(jié)約請求的 header 網(wǎng)絡(luò)開銷,并且有更強的擴展性,最好還可以支持二進制幀,壓縮等特性呢?于是人們就發(fā)明了這樣一個目前看似“完美”的解決方案 —— WebSocket。它的最大特點就是,服務(wù)器可以主動向客戶端推送信息,客戶端也可以主動向服務(wù)器發(fā)送信息,是真正的雙向平等對話。

049730f4-947f-11ed-bfe3-dac502259ad0.jpg

優(yōu)點:較少的控制開銷,在連接創(chuàng)建后,服務(wù)器和客戶端之間交換數(shù)據(jù)時,用于協(xié)議控制的數(shù)據(jù)包頭部相對較小。在不包含擴展的情況下,對于服務(wù)器到客戶端的內(nèi)容,此頭部大小只有2至10字節(jié)(和數(shù)據(jù)包長度有關(guān));對于客戶端到服務(wù)器的內(nèi)容,此頭部還需要加上額外的4字節(jié)的掩碼。相對于 HTTP 請求每次都要攜帶完整的頭部,此項開銷顯著減少了。更強的實時性,由于協(xié)議是全雙工的,所以服務(wù)器可以隨時主動給客戶端下發(fā)數(shù)據(jù)。相對于HTTP請求需要等待客戶端發(fā)起請求服務(wù)端才能響應(yīng),延遲明顯更少;即使是和Comet等類似的長輪詢比較,其也能在短時間內(nèi)更多次地傳遞數(shù)據(jù)。長連接,保持連接狀態(tài)。

Long Polling vs Websockets

無論是以上哪種方式,都使用到TCP長連接,那么TCP的長連接是如何發(fā)現(xiàn)連接已經(jīng)斷開了呢?

TCP Keepalived會進行連接狀態(tài)探測,探測間隔主要由三個配置控制。

keepalive_probes:探測次數(shù)(默認(rèn):7次)

keepalive_time 探測的超時(默認(rèn):2小時)

keepalive_intvl 探測間隔(默認(rèn):75s)

但是由于在東南亞的弱網(wǎng)情況下,TCP長連接會經(jīng)常性的斷開:

Long Polling 能發(fā)現(xiàn)連接異常的最短間隔為:min(keepalive_intvl, polling_interval)

Websockets能發(fā)現(xiàn)連接異常的最短間隔為:Websockets: min(keepalive_intvl, client_sending_interval)

如果下次發(fā)送數(shù)據(jù)包的時候可能連接已經(jīng)斷開了,所以使用TCP長連接對于兩者均意義不大。并且弱網(wǎng)情況下Websockets其實已經(jīng)不能作為一個候選項了

  • 即使Websockets服務(wù)端已經(jīng)發(fā)現(xiàn)連接斷開,仍然沒有辦法推送數(shù)據(jù),只能被動等待客戶端重新建立好連接才能推送,在此之前數(shù)據(jù)將可能會被采取丟棄的措施處理掉。
  • 在每次斷開后均需要再次發(fā)送應(yīng)用層的協(xié)議進行連接建立。

根據(jù)了解騰訊云的彈幕系統(tǒng),在300人以下使用的是推送模式,300人以上則是采用的輪訓(xùn)模式。但是考慮到資源消耗情況,他們可能使用的是Websocket來實現(xiàn)的彈幕系統(tǒng),所以才會出現(xiàn)彈幕卡頓、丟失的情況。綜上所述,Long Polling和Websockets都不適用我們面臨的環(huán)境,所以我們最終采取了短輪訓(xùn) 的方案來實現(xiàn)彈幕促達(dá)

04b59d32-947f-11ed-bfe3-dac502259ad0.jpg

可靠與性能

為了保證服務(wù)的穩(wěn)定性我們對服務(wù)進行了拆分,將復(fù)雜的邏輯收攏到發(fā)送彈幕的一端。同時,將邏輯較為復(fù)雜、調(diào)用較少的發(fā)送彈幕業(yè)務(wù)與邏輯簡單、調(diào)用量高的彈幕拉取服務(wù)拆分開來。服務(wù)拆分主要考慮因素是為了不讓服務(wù)間相互影響,對于這種系統(tǒng)服務(wù),不同服務(wù)的QPS往往是不對等的,例如像拉取彈幕的服務(wù)的請求頻率和負(fù)載通常會比發(fā)送彈幕服務(wù)高1到2個數(shù)量級,在這種情況下不能讓拉彈幕服務(wù)把發(fā)彈幕服務(wù)搞垮,反之亦然,最?度地保證系統(tǒng)的可用性,同時也更更加方便對各個服務(wù)做Scale-Up和Scale-Out。服務(wù)拆分也劃清了業(yè)務(wù)邊界,方便協(xié)同開發(fā)。

在拉取彈幕服務(wù)的一端 ,引入了本地緩存。數(shù)據(jù)更新的策略是服務(wù)會定期發(fā)起RPC調(diào)?從彈幕服務(wù)拉取數(shù)據(jù),拉取到的彈幕緩存到內(nèi)存中,這樣后續(xù)的請求過來時便能直接?走本地內(nèi)存的讀取,?大幅降低了調(diào)用時延。這樣做還有另外一個好處就是縮短調(diào)?鏈路,把數(shù)據(jù)放到離?戶最近的地?,同時還能降低外部依賴的服務(wù)故障對業(yè)務(wù)的影響,

04d698b6-947f-11ed-bfe3-dac502259ad0.jpg

為了數(shù)據(jù)拉取方便,我們將數(shù)據(jù)按照時間進行分片,將時間作為數(shù)據(jù)切割的單位,按照時間存儲、拉取、緩存數(shù)據(jù)(RingBuffer),簡化了數(shù)據(jù)處理流程。與傳統(tǒng)的Ring Buffer不一樣的是,我們只保留了尾指針,它隨著時間向前移動,每?秒向前移動一格,把時間戳和對應(yīng)彈幕列表并寫到一個區(qū)塊當(dāng)中,因此最多保留60秒的數(shù)據(jù)。同時,如果此時來了一個讀請求,那么緩沖環(huán)會根據(jù)客戶端傳入的時間戳計算出指針的索引位置,并從尾指針的副本區(qū)域往回遍歷直至跟索引重疊,收集到一定數(shù)量的彈幕列表返回,這種機制保證了緩沖區(qū)的區(qū)塊是整體有序的,因此在讀取的時候只需要簡單地遍歷一遍即可,加上使用的是數(shù)組作為存儲結(jié)構(gòu),帶來的讀效率是相當(dāng)高的。

再來考慮可能出現(xiàn)數(shù)據(jù)競爭的情況。先來說寫操作,由于在這個場景下,寫操作是單線程的,因此?可不必關(guān)心并發(fā)寫帶來的數(shù)據(jù)一致性問題。再來說讀操作,由圖可知寫的方向是從尾指針以順時針?向移動,?讀?向是從尾指針以逆時針方向移動,?決定讀和寫的位置是否出現(xiàn)重疊取決于index的位置,由于我們保證了讀操作最多只能讀到30秒內(nèi)的數(shù)據(jù),因此緩沖環(huán)完全可以做到無鎖讀寫

在發(fā)送彈幕的一端 ,因為用戶一定時間能看得過來彈幕總量是有限的,所以可以對彈幕進行限流,有選擇的丟棄多余的彈幕。同時,采用柔性的處理方式,拉取用戶頭像、敏感詞過濾等分支在調(diào)用失敗的情況下,仍然能保證服務(wù)的核心流程不受影響,即彈幕能夠正常發(fā)送和接收,提供有損的服務(wù)。

總結(jié)

04fb4be8-947f-11ed-bfe3-dac502259ad0.jpg

最終該服務(wù)在雙十二活動中,在Redis出現(xiàn)短暫故障的背景下,高效且穩(wěn)定的支撐了70w用戶在線,成功完成了既定的目標(biāo)



審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7342

    瀏覽量

    94916
  • 管理系統(tǒng)
    +關(guān)注

    關(guān)注

    1

    文章

    2928

    瀏覽量

    38637

原文標(biāo)題:彈幕系統(tǒng)設(shè)計實踐

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    足下科技榮獲央視頒發(fā)中國企業(yè)公信力典型實踐案例

    近日,央視《信用中國》節(jié)目迎來11周年慶典,重磅舉行《當(dāng)代品牌建設(shè)與公信力提升論壇》并發(fā)布中國企業(yè)公信力典型實踐案例。足下科技憑借在自主創(chuàng)新AI原生操作系統(tǒng)及軟件領(lǐng)域的卓越表現(xiàn),入選“中國企業(yè)公信力
    的頭像 發(fā)表于 03-24 15:26 ?224次閱讀

    【「Altium Designer 25 電路設(shè)計精進實踐」閱讀體驗】總體感受

    非常感謝電子發(fā)燒友提供的「Altium Designer 25 電路設(shè)計精進實踐」讀書機會。因為書到的時候已經(jīng)放假了,所以現(xiàn)在才拿到書。 這本書是陳之炎老師撰寫的關(guān)于Altium
    發(fā)表于 02-22 18:06

    【「Altium Designer 25 電路設(shè)計精進實踐」閱讀體驗】+本書概覽與內(nèi)容特點介紹

    的參考。第七章介紹了元器件庫的維護與管理,維護自己的庫有利于高效的設(shè)計,減少出錯。 實踐部分第八章 介紹了多板系統(tǒng)和線束設(shè)計實例第九章 介紹了SAM V71開發(fā)板的實例,可以參考這個動手做一個自己的開發(fā)板
    發(fā)表于 02-14 15:56

    利用Last Log(Ramoops)排查系統(tǒng)問題:配置與實踐指南

    Linux 內(nèi)核的ramoops機制實現(xiàn))可在系統(tǒng)異常時保存核心日志,為事后故障分析提供關(guān)鍵依據(jù)。本文將詳細(xì)介紹其配置方法與問題排查實踐,并通過具體案例演示實戰(zhàn)流程。
    的頭像 發(fā)表于 02-05 13:54 ?320次閱讀
    利用Last Log(Ramoops)排查<b class='flag-5'>系統(tǒng)</b>問題:配置與<b class='flag-5'>實踐</b>指南

    資料] 汽車軟件質(zhì)量躍遷的系統(tǒng)性路徑:基于ISO 26262標(biāo)準(zhǔn)的單元測試體系重構(gòu)與中日實踐深度對比(2026學(xué)術(shù)研究報告)

    各位伙伴,請問一個問題,[資料] 汽車軟件質(zhì)量躍遷的系統(tǒng)性路徑:基于ISO 26262標(biāo)準(zhǔn)的單元測試體系重構(gòu)與中日實踐深度對比(2026學(xué)術(shù)研究報告),這份數(shù)據(jù)誰有源參考文獻(xiàn),有酬感謝
    發(fā)表于 01-08 10:09

    設(shè)備電磁兼容整改:從原理到實踐系統(tǒng)化解決方案

    設(shè)備電磁兼容整改:從原理到實踐系統(tǒng)化解決方案|深圳南柯電子
    的頭像 發(fā)表于 12-02 10:01 ?709次閱讀

    華為構(gòu)網(wǎng)型儲能技術(shù)進展與商用實踐

    11月24日,以“加速構(gòu)網(wǎng)技術(shù)應(yīng)用實證,支撐新型電力系統(tǒng)高質(zhì)量發(fā)展”為主題的構(gòu)網(wǎng)型儲能應(yīng)用與發(fā)展論壇在長沙舉辦。華為數(shù)字能源構(gòu)網(wǎng)型儲能領(lǐng)域總裁鄭越發(fā)表題為“華為構(gòu)網(wǎng)型儲能技術(shù)進展與商用實踐”的主旨演講,全面分享了華為在構(gòu)網(wǎng)型儲能領(lǐng)域的最新技術(shù)突破、全場景商用
    的頭像 發(fā)表于 12-01 10:54 ?875次閱讀

    天合儲能在系統(tǒng)安全設(shè)計與防爆防控方面的實踐經(jīng)驗

    在最新一期 BESS Basics 系列訪談中,天合儲能北美產(chǎn)品負(fù)責(zé)人 Mike Watson 深入探討了基于《NFPA 69 標(biāo)準(zhǔn)》的儲能系統(tǒng)爆炸風(fēng)險綜合防控策略,分享了天合儲能在系統(tǒng)安全設(shè)計與防爆防控方面的實踐經(jīng)驗與技術(shù)思考
    的頭像 發(fā)表于 10-29 09:27 ?622次閱讀

    無人機智能巡檢系統(tǒng)的技術(shù)特點與應(yīng)用實踐

    ? ? ? ?無人機智能巡檢系統(tǒng)的技術(shù)特點與應(yīng)用實踐 ? ? ? ?在現(xiàn)代化運維管理領(lǐng)域,面對大型場所和復(fù)雜環(huán)境帶來的挑戰(zhàn),傳統(tǒng)巡檢模式在效率與安全性方面存在提升空間。無人機巡檢系統(tǒng)通過技術(shù)創(chuàng)新,為
    的頭像 發(fā)表于 10-21 19:24 ?444次閱讀

    無人機智能巡檢系統(tǒng)在光伏電站運維中的應(yīng)用實踐

    ? ? ? ?無人機智能巡檢系統(tǒng)在光伏電站運維中的應(yīng)用實踐 ? ? ? ?在光伏發(fā)電行業(yè)快速發(fā)展的背景下,智能無人機巡檢系統(tǒng)正以其獨特的技術(shù)優(yōu)勢推動運維模式向數(shù)字化、智能化方向革新。該系統(tǒng)
    的頭像 發(fā)表于 10-21 10:18 ?465次閱讀

    洲明科技入選2025年上市公司內(nèi)部控制優(yōu)秀實踐案例

    近日,由中國上市公司協(xié)會主辦的“2025年中國上市公司內(nèi)部控制最佳實踐案例”評選結(jié)果正式揭曉。洲明科技憑借在內(nèi)控工作上系統(tǒng)化、數(shù)智化建設(shè)的積極實踐與顯著成效,榮獲“2025年上市公司內(nèi)部控制優(yōu)秀
    的頭像 發(fā)表于 10-11 10:11 ?658次閱讀

    教學(xué)實習(xí)基地氣象觀測系統(tǒng):架起理論與實踐的 “氣象橋梁”

    教學(xué)實習(xí)基地氣象觀測系統(tǒng):架起理論與實踐的 “氣象橋梁”柏峰【BF-XQX】在教學(xué)實習(xí)基地的田野間、草坪上,一套集觀測、教學(xué)、科研于一體的氣象觀測系統(tǒng)正悄然運轉(zhuǎn)。它不僅是記錄陰晴雨雪的 “氣象日志”,
    的頭像 發(fā)表于 08-20 14:24 ?711次閱讀
    教學(xué)實習(xí)基地氣象觀測<b class='flag-5'>系統(tǒng)</b>:架起理論與<b class='flag-5'>實踐</b>的 “氣象橋梁”

    PPEC電源DIY套件:圖形化算法編程,解鎖電力電子底層算法實踐

    電源。這種方式不僅降低了開發(fā)門檻,還保留了對底層算法的控制能力,具有很強的實踐性和教育意義。 升級版開關(guān)電源DIY 套件核心組件含: PPEC 最小系統(tǒng)板(PPEC32F334RBT7 芯片
    發(fā)表于 08-14 11:30

    開源鴻蒙操作系統(tǒng)的生態(tài)成果與落地實踐

    電網(wǎng)、中國科學(xué)院軟件研究所、證通電子等合作單位共同支持。本次大會聚焦開源鴻蒙 5.1 Release版本,面向開發(fā)者和伙伴深度展示開源鴻蒙操作系統(tǒng)的生態(tài)成果與落地實踐。
    的頭像 發(fā)表于 06-05 14:27 ?1376次閱讀

    【「# ROS 2智能機器人開發(fā)實踐」閱讀體驗】+內(nèi)容初識

    控制機器人沿著路徑行駛,同時實時檢測環(huán)境變化,調(diào)整路徑規(guī)劃和導(dǎo)航控制策略。書中提供了完整的導(dǎo)航系統(tǒng)搭建示例,包括代碼實現(xiàn)和參數(shù)配置,幫助讀者快速掌握導(dǎo)航系統(tǒng)的開發(fā)。 3. 案例分析與實踐 機器人
    發(fā)表于 04-27 11:24