android 高并發彈幕,高并發實時直播彈幕研發實踐

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

直播間特點

4d561ae4da034cc7d401faec9a44730d.png

聊天室限制人數的原因

4aa9818c7585370bc8ab212407a1526a.png

應對萬級以上的實時互動

fb0fa4f8452f9c9f894c12dbb9cb9e62.png

跨服務器是為了解決單一服務器接入數量限制、發布消息吞吐限制等問題;

多進程并發則是為了充分利用多核CPU以及減小一個循環規模從而達到降低延遲的目的。

云巴實時系統的設計

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

多層結構

cb52db2444841b2da4cee5f3119675e6.png

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

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

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

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

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

微服務化

f93bac7bd4b8aa685bfeb2c05ee0ebdf.png

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

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

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

云巴實時系統的特點

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

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

299b8c3626e962cb19da29ff2369ba0b.png

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

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

f5e5e5e70d6ef26b859ae59373f70018.png

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

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

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

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

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

傳統的消息發布過程

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

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

云巴的消息發布過程

1a919e604adad5e54e3b7e01282ac1d3.png

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

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532209.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532209.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532209.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux python3_在Linux上安裝Python 3

在Linux上安裝Python 3這份文檔描述了如何在Ubuntu Linux機器上安裝Python 3.6。 想要獲取已安裝的Python 3版本號,可以通過終端運行命令: $ python3 --version 如果您使用的是Ubuntu 16.10或更新,可以通過以下命令簡單地安裝Python 3.6: $ s…

android手機電話鈴聲設置,安卓手機鈴聲怎么設置

網上有很多安卓手機鈴聲的設置教程,說什么SD卡里建立這個那個的文件夾,那問題是怎么才能進到SD卡里去建立文件夾啊?手機里哪個選項里進去呢?這里小編告訴你,可以通過電腦連接數據線管理SD卡。下面介紹兩種簡單的設置安…

安裝squid_「首席推薦」設置Squid轉發代理或者正向代理

如果您正在閱讀這篇文章,您可能會因為缺少與Squid相關的信息而感到沮喪,Squid是一種非常流行的轉發代理。這些令人沮喪的事情包括:在小的軟件修訂之后出現的重大的可用性變化,對幕后發生的事情的誤解,以及真正糟糕的文檔。這是一個…

android壓縮圖片質量,Android 圖片質量壓縮有關問題

Android 圖片質量壓縮問題本帖最后由 u013064347 于 2014-01-13 10:22:47 編輯網上看到一個圖片質量壓縮法,傳入1M以內圖片能正常壓縮,但是傳入2M多的圖片就報內存溢出,應該怎么解決?附上代碼Bitmap imagesBitmapFactory.decodeFi…

python標準庫os_Python基礎--人們一些最愛的標準庫(sys os fileinput)

這篇博客就介紹介紹常見的、人們鐘愛的python中的標準庫。 sys 從字面上也能看出來,是system的縮寫。這個模塊能夠訪問與python解析器緊密聯系的變量和函數。 argv 命令行參數 exit 退出當前程序 modules 映射模塊名到載入模塊的字典 path 目錄 platform 平臺標識符…

android區域截圖app,【干貨】最新App應用市場截圖尺寸大全

今天給大家分享最新的干貨,剛好碰上這段時間設計市場截圖,所以給各位設計新人,分享本人整合的尺寸大全,希望對你們的設計之路有所幫助。一、IOS App Store尺寸尺寸(機型) 大小(px)3.5寸(iphone4/4s)…

python如何運行一個python程序_在python中,如何運行一個命令行程序,它在發送Ctrl+D之前不會返回...

由于沒有人提供任何代碼來幫助解決這個問題,我將做如下的事情。結果發現pexpect非常強大,而且您不需要signal模塊。在import os import sys import pexpect def run_server(): server_dir /path/to/server/root current_dir os.path.abspath(os.curdir…

android app外喚起,Android 喚起app的多種方式

方式一(通過Intent喚起):我們自己的app代碼:ComponentName componetName new ComponentName("com.lh.jimtrency.webviewdemo","com.lh.jimtrency.webviewdemo.MainActivity");//(另外一個應用程序的包名,要啟動的Activi…

2018python做圖形界面哪個庫簡單_2018年常見的python編程開發庫都有哪些類型

python編程開發可以說是目前比較熱門的一項編程開發語言了,而今天我們就一起來了解一下,關于python編程都有哪些常見的python庫可以使用。1、TensorFlow “TensorFlow是一個使用數據流圖進行數值計算的開源軟件庫。圖形節點表示數學運算,而圖…

android條形圖,MPAndroid組條形圖未顯示

這個問題已經在這里有了答案:????????????>????????????How to check if activity is in foreground or in visible background?????????????????????????????????????22個這是我用于使用MPAndroi…

c++ socket線程池_java 網絡編程,Socket編程

Java的網絡編程主要涉及到的內容是Socket編程,那么什么是Socket呢?簡單地說,Socket,套接字,就是兩臺主機之間邏輯連接的端點。TPC/IP協議是傳輸層協議,主要解決數據如何在網絡中傳輸,而HTTP是應…

android簽名忘記密碼,修改Android簽名證書keystore的密碼、別名alias以及別名密碼

之前在測試Eclipse ADT的Custom debug Eclipse ADT的Custom debug keystore所需證書規格,提到過自定義調試證書的密碼和1. 首先當然是先復制一份正式證書出來作為要修改為的臨時調試證書。2. 修改keystore密碼的命令(keytool為JDK帶的命令行工具):keytoo…

python列表轉換成數字_Python中列表元素轉為數字的方法分析

本文實例講述了Python中列表元素轉為數字的方法。分享給大家供大家參考,具體如下: 有一個數字字符的列表: numbers [1, 5, 10, 8] 想要把每個元素轉換為數字: numbers [1, 5, 10, 8] 用一個循環來解決: new_numbers …

android 繪圖軟件,安卓最強大的繪圖軟件 妙筆生花最新評測

妙筆生花——繪畫體驗(一)看過使用教程之后,就能進入到真正的功能頁面了。功能頁面的首頁只有一個按鈕,點擊頁面下端的這個按鈕之后,就能跳出功能強大的工具選擇頁面。【妙筆生花】——工具選擇頁OK,接下來,小編會使用…

識別物體是否存在_【科學實踐Vol.1】帶你玩轉“人臉識別”

隨著時代的發展,人臉識別在我們的生活中變得隨處可見:商場里的人臉識別儲物柜,校園里的人臉識別刷卡機,手機里的面部解鎖……這些應用極大的便利了我們的日常生活。今天,就讓我們一起走進人臉識別的原理世界。首先我們…

html 自動適應手機屏幕大小,HTML5 canvas自適應手機屏幕大小的一種解決方案

一、最終效果為了不浪費大家時間,先展示最終效果,看看是不是大家需要的解決方案:標準分辨率:其他分辨率的適配情況:二、需求1.canvas的內容能全部展示在屏幕上2.盡量能保證圖像不變形3.繪制的文字也能自適應三、解決方…

編寫一個能夠排序的函數模板。_LeetCode刷題——9.給出n對括號,請編寫一個函數來生成所有的由n對括號組成的合法組合...

難度(medium)題目描述:給出n對括號,請編寫一個函數來生成所有的由n對括號組成的合法組合。例如n3,解集為: "((()))", "(()())", "(())()", "()(())", "()()()" 思路&#xf…

html5怎么產生手風琴效果,Html5 js如何實現手風琴效果

Html5 js如何實現手風琴效果發布時間:2020-08-03 09:54:10來源:億速云閱讀:92作者:小豬這篇文章主要為大家展示了Html5 js如何實現手風琴效果,內容簡而易懂,希望大家可以學習一下,學習完之后肯定…

c++進制轉換_一文了解進制之間的原理和轉換

點擊這段文字: 獲取2020年,最強Python學習資料進制這塊,可以做簡單的了解。生活中我們使用的數字都是十進制的,而二進制是機器能夠識別的最直接的語言。但是二進制又太大,記錄起來非常的不方便。所以通常會將二進制轉化…

用HTML做一個簡單的web登錄頁面,簡單的JavaWeb注冊登錄案例

簡單的JavaWeb注冊登錄案例1.注冊頁面register.htmlregister姓名:電話:郵箱:qq:2.注冊案例實現程序register.java/*** 注冊案例實現程序* author lucky**/public class register extends HttpServlet {public void doGet(HttpServ…