高並發實時直播彈幕研發實踐


直播間特點

直播間特點

聊天室限制人數的原因

聊天室限制人數的原因

應對萬級以上的實時互動

應對萬級以上的實時互動

跨服務器是為了解決單一服務器接入數量限制、發布消息吞吐限制等問題; 多進程並發則是為了充分利用多核CPU以及減小一個循環規模從而達到降低延遲的目的。

雲巴實時系統的設計

雲巴是基於MQTT協議實現的實時通信系統,采用Erlang/OTP的架構設計。簡單地來說,雲巴實時系統的設計包括多層結構、微服務兩個要點。

多層結構

多層結構

雲巴系統設計中,多層結構意味着一個基本業務邏輯的完成需要經歷多個模塊(如圖上所示)。

雲巴多層結構設計有三個主要特點:

  • 所有模塊均可獨立運行,互不干擾。 任一模塊在運行的過程中,無需依賴其他模塊。除此以外,還會對所有模塊設立在線監控,從而實現生產狀態下的實時告警。同時,模塊獨立運行還能夠達到持續集成的效果;

  • 細粒度擴容,包括但不限於對接入進行擴容等;

  • 使用「隔離」。 顧名思義,系統可以為用戶指定特定的路徑,也可以在某些路徑出現問題以后,強行從系統里摘除路徑,達到「隔離」效果。

微服務化

微服務化

雖然近期微服務已一個新興事物的身份被廣泛討論,但其實,微服務可以算是一個 概念了。

比如Erlang/OTP就是一個成熟已久的典型微服務架構。其作為微服務架構的特點就在於業務邏輯非常簡單的同時,並發量也非常高。

雲巴采用的正是Erlang/OTP的架構設計,在微服務化的方面的體現則是將業務邏輯封裝成一個RPC Service,以及RPC Service部署微一個OTP Worker。

雲巴實時系統的特點

雲巴實時系統的設計特點主要有:擁有海量輕量級任務、任務與運行位置無關以及水平擴展。任務與運行位置無關,這就意味着在任務池中,可以動態地把任務調度到不同物理機上,同時數據要存儲在獨立集群中。

海量的輕量級任務包括長連接創建的任務、用戶請求產生時創建的任務。

任務

長連接任務即為,當一個長連接接入時,系統會創建一個任務來管理和維持長連接;

同樣地,請求任務則是,當一個用戶請求(比如發送一條彈幕)產生時,就會創建一個任務來管理該請求。

加入、退出直播間

對於雲巴來講,不論是用戶加入了一個直播間還是發送了一條彈幕,都可以以Pub/Sub模型來實現。Pub/Sub模型中比較重要的詞匯為「publish」、「subscribe」以及「unsubscribe」。

比如,一個用戶進入了一個直播間,則可以視為訂閱(subscribe)了該直播間;

進入之后在直播間發送彈幕,視為向這個直播間發送(publish)了一條消息;

而由於進入直播間的用戶都已經訂閱過該直播間,所以其他用戶都看到了這條彈幕。

一旦用戶退出了直播間,則視為取消訂閱(unsubscribe)了直播間,再也收不到該直播間里面其他用戶發布的彈幕了。

傳統的消息發布過程

傳統的消息發布過程有兩種,第一種是遍歷列表里的每一個UID,讀取路由,逐一發送消息;

第二種是遍歷每一台服務器,發送消息,然后將訂閱關系保存在每一台服務器內。以上兩種做法都有可能導致延遲過多的問題。

雲巴的消息發布過程

消息發布過程

在雲巴,消息的發布過程為,首先在接收到任務請求后,會發布任務計算UID列表分片,對總任務進行分片處理。之后將分片任務分發給任務池,執行各個分片任務。最后,發布任務匯聚請求,

返回所有的分片任務。

 

「分片」——「匯聚」設計的好處在於,可以有效控制最大延遲。目前雲巴是將此整個過程控制在200ms以內。除此以外,還能夠擴大任務池,提升系統並發能力。

 

雲巴彈幕Demo 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM