亚洲欧美日韩国产成人|亚洲中文字幕无码中字|HEYZO在线无码综合|久久久不卡精品国产一区二|久久精品亚洲无中文东京热|中文字幕乱码一区三区免费|亚洲国产欧美在线观看片不卡|国产精品久久一区二区三区97

奔走相告(流媒體服務(wù)器怎么配置端口)流媒體服務(wù)器怎么用,SRS:流媒體服務(wù)器如何實(shí)現(xiàn)負(fù)載均衡,歲末年初,

保健品 nanfang 2023-12-20 03:28 142 0

1.流媒體服務(wù)器有什么用

作者:Winlin、Azusachino、Benjamin編輯:Alex

2.流媒體服務(wù)器什么意思

▲掃描圖中二維碼了解音視頻技術(shù)大會(huì)更多信息▲當(dāng)我們的業(yè)務(wù)超過單臺(tái)流媒體服務(wù)器的承受能力,就會(huì)遇到負(fù)載均衡問題,一般我們會(huì)在集群中提供這種能力,但實(shí)際上集群并非是唯一的實(shí)現(xiàn)方式有時(shí)候負(fù)載均衡還會(huì)和服務(wù)發(fā)現(xiàn)等時(shí)髦詞匯聯(lián)系起來,而深圳南油女裝高端貨源app云服務(wù)的 LoadBalancer 無疑不可回避,因此,這個(gè)問題其實(shí)相當(dāng)復(fù)雜,以至于大家會(huì)在多個(gè)場(chǎng)合詢問這個(gè)問題,我打算系統(tǒng)地闡述這個(gè)問題。

3.流媒體服務(wù)器工作原理

如果你已經(jīng)知道了以下問題的所有答案,并且深刻了解背后的原因,那么你可以不用看這篇文章了:SRS 是否需要 Nginx、F5 或 HAProxy 做流代理?不需要,完全不需要,這樣是完全誤解了流媒體的負(fù)載均衡。

4.流媒體服務(wù)器原理

而 HTTPS 我們卻建議這么做,同時(shí)為了減少對(duì)外服務(wù)的 IP 又建議用云 LoadBalancer如何發(fā)現(xiàn) SRS 邊緣節(jié)點(diǎn)?如何發(fā)現(xiàn)源站節(jié)點(diǎn)?對(duì)于邊緣,通常 DNS 和 HTTP-DNS 都可以;而源站是深圳南油女裝高端貨源app不應(yīng)該直接暴露給客戶端直接連接的。

5.流媒體服務(wù)器是干嘛的

WebRTC 在服務(wù)發(fā)現(xiàn)上有什么區(qū)別?由于 CPU 性能損耗更大,負(fù)載均衡的閾值更低;在單 PeerConnection 時(shí)流會(huì)動(dòng)態(tài)變化,導(dǎo)致更難負(fù)載均衡;移動(dòng)端 UDP 的切網(wǎng)和 IP 漂移,會(huì)引入更多問題。

6.流媒體服務(wù)器原理和架構(gòu)解析

DNS 和 HTTP-DNS 哪個(gè)更合適作為流媒體服務(wù)器的服務(wù)發(fā)現(xiàn)機(jī)制?肯定是 HTTP-DNS,因?yàn)榱髅襟w服務(wù)器的負(fù)載變化,比 Web 服務(wù)器的變化更大,考慮新增 1K 的客戶端對(duì)于兩種不同服務(wù)器的負(fù)載影響。

7.流媒體服務(wù)器搭建教程

負(fù)載均衡是否只需要考慮如何降低系統(tǒng)負(fù)載?首要目標(biāo)是考慮降低系統(tǒng)負(fù)載,深圳南油女裝高端貨源app或者防止系統(tǒng)過載導(dǎo)致質(zhì)量問題甚至崩潰;同時(shí)在同等負(fù)載時(shí),也需要考慮就近服務(wù)和成本因素負(fù)載均衡是否只能靠增加一層服務(wù)器?一般大型的 CDN 分發(fā)系統(tǒng),明顯是分層的,無論是靜態(tài)的樹設(shè)計(jì),還是動(dòng)態(tài)的 MESH 設(shè)計(jì),在流的傳輸上都是靠分層增加負(fù)載能力;同時(shí),還能通過端口重用(REUSEPORT)方式,用多進(jìn)程方式增加節(jié)點(diǎn)的負(fù)載而不會(huì)增加層。

8.流媒體服務(wù)器怎么連接

負(fù)載均衡是否只能使用集群方式實(shí)現(xiàn)?集群是基本的增加系統(tǒng)容量的方式,除此之外,也可以通過業(yè)務(wù)分離配合 Vhost 實(shí)現(xiàn)系統(tǒng)隔離,或者通過一致性 hash 來分流業(yè)務(wù)和用戶好吧,讓我們?cè)敿?xì)聊聊負(fù)載和負(fù)載均衡。

9.流媒體服務(wù)器是什么東西

What 深圳南油女裝高端貨源appis Load?在解決系統(tǒng)均衡問題時(shí),首先我們看看什么是負(fù)載?對(duì)于服務(wù)器來說,負(fù)載就是因?yàn)橛锌蛻舳说脑L問,而導(dǎo)致的資源消耗上升當(dāng)資源消耗出現(xiàn)嚴(yán)重不均衡,可能會(huì)導(dǎo)致服務(wù)不可用,比如 CPU 跑滿了,所有客戶端都會(huì)變得不正常。

10.流媒體服務(wù)器的作用是什么

對(duì)于流媒體服務(wù)器而言,就是流媒體客戶端導(dǎo)致的服務(wù)器資源消耗一般我們會(huì)從服務(wù)器資源消耗角度度量系統(tǒng)負(fù)載:CPU: 服務(wù)器消耗的 CPU,一般我們稱 CPU 消耗較多的為計(jì)算密集型場(chǎng)景,而把網(wǎng)絡(luò)帶寬消耗較多的稱為 IO 密集型場(chǎng)景。

直播場(chǎng)景一般屬于 IO 密集型場(chǎng)景,CPU 一般不會(huì)首先成為瓶頸;而在 RTC 中卻不是,RTC 是 IO 和計(jì)算都很密深圳南油女裝高端貨源app集,這是非常大的差異網(wǎng)絡(luò)帶寬: 傳輸流媒體時(shí)需要消耗網(wǎng)絡(luò)帶寬,也就是上文介紹的 IO 密集型場(chǎng)景。

流媒體肯定是 IO 密集型場(chǎng)景,所以帶寬一定是重要的瓶頸而有些場(chǎng)景比如 RTC 同時(shí)還是計(jì)算密集場(chǎng)景磁盤: 如果不需要錄制和支持 HLS,那么磁盤就不是重要的瓶頸,如果一定開啟錄制和 HLS,那么磁盤將變得非常關(guān)鍵,因?yàn)榇疟P是最慢的。

當(dāng)然由于現(xiàn)在內(nèi)存較多,所以一般我們采用掛內(nèi)存盤的方式避免這個(gè)問題內(nèi)存: 相對(duì)而言,內(nèi)存是流媒體服務(wù)器中消耗較少的資源,盡管做了不少 Cache,但是內(nèi)存一般還是不會(huì)首先達(dá)到瓶頸所以一般內(nèi)存也會(huì)在流媒體服務(wù)器中大量用作 Cache,來交換其他的資源負(fù)載,比如 SRS 在深圳南油女裝高端貨源app直播 CPU 優(yōu)化時(shí),用 writev 緩存和發(fā)送大量數(shù)據(jù),就是用高內(nèi)存換得 CPU 降低的策略。

當(dāng)負(fù)載過高,會(huì)有什么問題?負(fù)載過高會(huì)導(dǎo)致系統(tǒng)直接出現(xiàn)問題,比如延遲增大,卡頓,甚至不可用而這些負(fù)載的過載,一般都會(huì)有連鎖反應(yīng)比如:CPU: CPU 過高會(huì)引起連鎖反應(yīng),這時(shí)候意味著系統(tǒng)無法支持這么多客戶端,那么會(huì)導(dǎo)致隊(duì)列堆積,從而引起內(nèi)存大量消耗;同時(shí)網(wǎng)絡(luò)吞吐也跟不上,因?yàn)榭蛻舳藷o法收到自己需要的數(shù)據(jù),出現(xiàn)延遲增大和卡頓;這些問題反而引起 CPU 更高,直到系統(tǒng)崩潰。

網(wǎng)絡(luò)帶寬: 若超過系統(tǒng)的限定帶寬,比如網(wǎng)卡的限制,或者系統(tǒng)隊(duì)列的限制,那么會(huì)導(dǎo)致所有用戶都拿不到自己需要的數(shù)據(jù),出現(xiàn)卡頓現(xiàn)象另外也會(huì)深圳南油女裝高端貨源app引起隊(duì)列增大,而處理堆積隊(duì)列,一般需要消耗 CPU,所以也會(huì)導(dǎo)致 CPU 上升。

磁盤: 若超過磁盤負(fù)載,可能會(huì)導(dǎo)致寫入操作掛起而在同步寫入的服務(wù)器,會(huì)導(dǎo)致流無法正常傳輸,日志堆積在異步寫入的服務(wù)器,會(huì)導(dǎo)致異步隊(duì)列堆積注意目前 SRS 是同步寫入,正在進(jìn)行多線程異步寫入內(nèi)存: 超過內(nèi)存會(huì) OOM,直接干掉服務(wù)器進(jìn)程。

一般內(nèi)存主要是泄露導(dǎo)致的緩慢上漲,特別是在流很多時(shí),SRS 為了簡(jiǎn)化問題,沒有清理和刪除流,所以若流極其多,那么內(nèi)存的持續(xù)上漲是需要關(guān)注的由此可見,系統(tǒng)的負(fù)載,首先需要被準(zhǔn)確度量,也就是關(guān)注的是過載或超載(Overload)情況,這個(gè)問題也需要詳細(xì)說明。

What is Overloa深圳南油女裝高端貨源appd?超過系統(tǒng)負(fù)載就是超載或過載(Overload),這看起來是個(gè)簡(jiǎn)單的問題,但實(shí)際上卻并不簡(jiǎn)單,比如:CPU 是否超過 100% 就是過載?不對(duì),因?yàn)橐话惴?wù)器會(huì)有多個(gè) CPU,也就是 8 個(gè) CPU 的服務(wù)器,實(shí)際上能達(dá)到 800%。

那 CPU 是否不超過總 CPU 使用率,比如 8CPU 的服務(wù)器不超過 800% 就不會(huì)過載?不對(duì),因?yàn)榱髅襟w服務(wù)器不一定能用多核,比如 SRS 就是單核,也就是它最多跑 100%那是否 SRS 不超過 100% 使用率,就不會(huì)過載?不對(duì),因?yàn)槠渌倪M(jìn)程可能也在消耗,不能只看 SRS 的 CPU 消耗。

因此,對(duì)于 CPU 來說,知道流媒體服務(wù)器能消耗多少 CP深圳南油女裝高端貨源appU,獲取流媒體服務(wù)器的 CPU 消耗,才能準(zhǔn)確定義過載:系統(tǒng)總 CPU,超過 80% 認(rèn)為過載,比如 8CPU 的服務(wù)器,總 CPU 超過 640% 就認(rèn)為過載,一般系統(tǒng)的 load 值也升很高,代表系統(tǒng)很繁忙。

SRS 每個(gè)進(jìn)程的 CPU,超過 80% 認(rèn)為過載,比如 8CPU 的服務(wù)器總 CPU 只有 120%,但 SRS 的進(jìn)程占用 80%,其他占用 40%,那么此時(shí)也是過載網(wǎng)絡(luò)帶寬,一般是根據(jù)以下幾個(gè)指標(biāo)判斷是否過載,流媒體一般和流的碼率 Kbps 或 Mpbs 有關(guān),代表這個(gè)流每秒是多少數(shù)據(jù)傳輸:。

是否超過服務(wù)器出口帶寬,比如云服務(wù)器公網(wǎng)出口是 10Mbps,那么如果平均碼率是 1Mb深圳南油女裝高端貨源appps 的直播流,超過 10 個(gè)客戶端就過載了如果 100 個(gè)客戶端都來推拉流,那么每個(gè)客戶端只能傳輸 100Kbps 的數(shù)據(jù),當(dāng)然會(huì)造成嚴(yán)重卡頓。

是否超過內(nèi)核的隊(duì)列,在 UDP 中,一般系統(tǒng)默認(rèn)的隊(duì)列大小只有 256KB,而流媒體中的包數(shù)目和字節(jié),在流較多時(shí)遠(yuǎn)遠(yuǎn)超過了隊(duì)列長(zhǎng)度,會(huì)導(dǎo)致沒有超過服務(wù)器帶寬但是出現(xiàn)丟包情況,具體參考《SRS 性能 (CPU)、內(nèi)存優(yōu)化工具用法》(https://www.jianshu.com/p/6d4a89359352)這部分內(nèi)容。

是否超過客戶端的網(wǎng)絡(luò)限制,有時(shí)候某些客戶端的網(wǎng)絡(luò)很差,出現(xiàn)客戶端的網(wǎng)絡(luò)過載特別是直播推流時(shí),需要重點(diǎn)關(guān)注主播上行的網(wǎng)絡(luò),沒經(jīng)驗(yàn)的主播會(huì)深圳南油女裝高端貨源app出現(xiàn)弱網(wǎng)等,導(dǎo)致所有人卡頓磁盤,主要涉及的是流的錄制、日志切割以及慢磁盤導(dǎo)致的 STW 問題:。

若需要錄制的流較多,磁盤作為最慢的設(shè)備,會(huì)明顯成為瓶頸一般在系統(tǒng)設(shè)計(jì)時(shí),就需要避免這種情況,比如 64GB 內(nèi)存的服務(wù)器,可以分 32GB 的內(nèi)存盤,給流媒體服務(wù)器寫臨時(shí)文件或者使用較小的內(nèi)存盤,用外部的程序比如 node.js,開啟多線程后,將文件拷貝到存儲(chǔ)或發(fā)送到云存儲(chǔ),可以參考 srs-cloud(https://github.com/ossrs/srs-cloud)的最佳實(shí)踐。

服務(wù)器的日志,在一些異常情況下,可能會(huì)造成大量寫入,另外如果持續(xù)累計(jì)不切割和清理,會(huì)導(dǎo)致日志文件越來越大,最終寫滿磁深圳南油女裝高端貨源app盤SRS 支持 logrotate,另外 docker 一般也可以配置 logrotate,通常會(huì)將日志做提取后(日志少可以直接采集原始日志),傳輸?shù)皆频娜罩痉?wù)做分析,本地只需要存儲(chǔ)短時(shí)間比如 15 天日志。

STW 問題,寫磁盤是阻塞操作,特別是掛載的網(wǎng)絡(luò)磁盤(比如 NAS),掛載到本地文件系統(tǒng),而服務(wù)器在調(diào)用 write 寫入數(shù)據(jù)時(shí),實(shí)際上可能有非常多的網(wǎng)絡(luò)操作,那么這種其實(shí)會(huì)更消耗時(shí)間SRS 目前應(yīng)該完全避免掛載網(wǎng)絡(luò)磁盤,因?yàn)槊看巫枞紩?huì)導(dǎo)致整個(gè)服務(wù)器 STW(世界暫停)不能處理其他請(qǐng)求。

內(nèi)存主要是涉及泄露和緩存問題,主要的策略是監(jiān)控系統(tǒng)整體的內(nèi)存,相對(duì)比較簡(jiǎn)單Special for M深圳南油女裝高端貨源appedia Server除了一般的資源消耗,在流媒體服務(wù)器中,還有一些額外因素會(huì)影響到負(fù)載或者負(fù)載均衡,包括:。

長(zhǎng)連接: 直播和 WebRTC 的流都是長(zhǎng)時(shí)間,最長(zhǎng)的直播可能超過 2 天,而會(huì)議開幾個(gè)小時(shí)也不是難事因此,流媒體服務(wù)器的負(fù)載是具有長(zhǎng)連接特性,這會(huì)對(duì)負(fù)載均衡造成很大的困擾,比如輪詢調(diào)度策略可能不是最有效的。

有狀態(tài): 流媒體服務(wù)器和客戶端的交互比較多,中間保存了一些狀態(tài),這導(dǎo)致負(fù)載均衡服務(wù)器無法直接在服務(wù)出現(xiàn)問題時(shí),把請(qǐng)求直接給一臺(tái)新的服務(wù)器處理,甚至都不是一個(gè)請(qǐng)求,這個(gè)問題在 WebRTC 中尤其明顯,DTLS 和 SRTP 加密的這些狀態(tài),使得不能隨意切換服務(wù)器。

相關(guān)性: 兩個(gè) W深圳南油女裝高端貨源appeb 請(qǐng)求之間是沒有關(guān)聯(lián)的,一條失敗并不會(huì)影響另外一條而在直播中,推流能影響所有的播放;在 WebRTC 中,只要有一個(gè)人拉流失敗或傳輸質(zhì)量太差,盡管其他流都表現(xiàn)良好,但這個(gè)會(huì)議可能還是開不下去。

這些問題當(dāng)然不完全是負(fù)載和負(fù)載均衡問題,比如 WebRTC 支持的 SVC 和 Simulcast 功能,目的就是為了解決某些弱客戶端的問題有些問題是可以通過客戶端的失敗重試解決,比如高負(fù)載時(shí)的連接遷移,服務(wù)器可以強(qiáng)制關(guān)閉,客戶端重試遷移到下一個(gè)服務(wù)器。

還有一種傾向,就是避免流媒體服務(wù),而是用 HLS/DASH/CMAF 等切片,這就變成了一個(gè) Web 服務(wù)器,上面所有的問題就突然沒有了但是,切片協(xié)議深圳南油女裝高端貨源app實(shí)際上只能做到 3 秒,或者比較常見的 5 秒以上的延遲場(chǎng)景,而在 1 到 3 秒的直播延遲,或者 500ms 到 1 秒的低延遲直播,以及 200ms 到 500ms 的 RTC 通話,以及 100ms 之內(nèi)的控制類場(chǎng)景,永遠(yuǎn)都不能指望切片服務(wù)器,這些場(chǎng)景只能使用流媒體服務(wù)器實(shí)現(xiàn),不管里面?zhèn)鬏數(shù)氖?TCP 的流,還是 UDP 的包。

我們?cè)谙到y(tǒng)設(shè)計(jì)時(shí),需要考慮這些問題,例如 WebRTC 應(yīng)該盡量避免流和房間耦合,也就是一個(gè)房間的流一定需要分布到多個(gè)服務(wù)器上,而不是限制在一臺(tái)服務(wù)器這些業(yè)務(wù)上的限制越多,對(duì)于負(fù)載均衡越不利SRS Overload。

現(xiàn)在特別說明 SRS 的負(fù)載和過載情況:SRS 深圳南油女裝高端貨源app的進(jìn)程: 若 CPU 超過 100%,則過載SRS 是單線程設(shè)計(jì),無法使用多個(gè) CPU 的能力(這個(gè)后面我會(huì)詳細(xì)展開講講)網(wǎng)絡(luò)帶寬: 一般是最快達(dá)到過載的資源,比如直播中達(dá)到 1Gbps 吞吐帶寬時(shí)可能 CPU 還很空閑,RTC 由于同時(shí)是計(jì)算密集型,稍微有些差異。

磁盤: 除了非常少的路數(shù)的流的錄制,一般需要規(guī)避磁盤問題,掛載內(nèi)存盤,或者降低每個(gè) SRS 處理的流的路數(shù)參考 srs-cloud (https://github.com/ossrs/srs-cloud) 的最佳實(shí)踐。

內(nèi)存: 一般是使用較少的資源,在流路數(shù)特別特別多,比如監(jiān)控場(chǎng)景不斷推流和斷開的場(chǎng)景,需要持續(xù)關(guān)注 SRS 的內(nèi)存上漲深圳南油女裝高端貨源app這個(gè)問題可以通過 Gracefully Quit (https://github.com/ossrs/srs/issues/413#issuecomment-917771521) 規(guī)避。

特別說明一下 SRS 單線程的問題,這其實(shí)是個(gè)選擇,沒有免費(fèi)的性能優(yōu)化,多線程當(dāng)然能提升處理能力,同時(shí)是以犧牲系統(tǒng)的復(fù)雜度為代價(jià),同時(shí)也很難評(píng)估系統(tǒng)的過載,比如 8 核的多線程的流媒體服務(wù)器 CPU 多少算是過載?640%?不對(duì),因?yàn)榭赡苊總€(gè)線程是不均勻的,要實(shí)現(xiàn)線程均勻就要做線程的負(fù)載調(diào)度,這又是更復(fù)雜的問題。

目前 SRS 的單線程,能適應(yīng)絕大多數(shù)場(chǎng)景對(duì)于直播來說,Edge 可以使用多進(jìn)程 REUSEPORT深圳南油女裝高端貨源app 方式,偵聽在同樣端口,實(shí)現(xiàn)消耗多核;RTC 可以通過一定數(shù)量的端口;或者在云原生場(chǎng)景,使用 docker 跑 SRS,可以起多個(gè) K8s 的 Pod,這些都是可選的更容易的方案。

Note: 除非是對(duì)成本非常敏感的云服務(wù),那么肯定可以自己定制,可以付出這個(gè)復(fù)雜性的代價(jià)了據(jù)我所知,幾個(gè)知名的云廠商,基于 SRS 實(shí)現(xiàn)了多線程版本我們正在一起把多線程能力開源出來,在可以接受的復(fù)雜度范圍提升系統(tǒng)負(fù)載能力,詳細(xì)請(qǐng)參考 https://github.com/ossrs/srs/issues/2188。

我們了解了流媒體服務(wù)器的這些負(fù)載,接下來該考慮如何分擔(dān)這些負(fù)載了Round Robin:Simple a深圳南油女裝高端貨源appnd RobustRound Robin 是非常簡(jiǎn)單的負(fù)載均衡策略:每次客戶端請(qǐng)求服務(wù)時(shí),調(diào)度器從服務(wù)器列表中找到下一個(gè)服務(wù)器給客戶端,非常簡(jiǎn)單:。

server = servers[pos++ % servers.length()]如果每個(gè)請(qǐng)求是比較均衡的,比如 Web 請(qǐng)求一般很短時(shí)間就完成了,那么這種策略是比較有效的這樣新增和刪除服務(wù)器,上線和下線,升級(jí)和隔離,都非常好操作。

流媒體長(zhǎng)連接的特點(diǎn)導(dǎo)致輪詢的策略并不好用,因?yàn)橛行┱?qǐng)求可能會(huì)比較久,有些比較短,這樣會(huì)造成負(fù)載不均衡當(dāng)然,如果就只有少量的請(qǐng)求,這個(gè)策略依然非常好用SRS 的 Edge 邊緣集群中,在尋找上游 Edge 服務(wù)器時(shí),使用深圳南油女裝高端貨源app的也是簡(jiǎn)單的 Round Robin 方式,這是假設(shè)流的路數(shù)和服務(wù)時(shí)間比較均衡,在開源中是比較合適的策略。

本質(zhì)上,這就是上游 Edge 服務(wù)器的負(fù)載均衡策略,相當(dāng)于是解決了總是回源到一臺(tái)服務(wù)器的過載問題如下圖所示:

源站集群中,第一次推流時(shí),Edge 也會(huì)選擇一臺(tái) Origin 服務(wù)器,使用的也是 Round Robin 策略這本質(zhì)上就是 Origin 服務(wù)器的負(fù)載均衡策略,解決的是 Origin 服務(wù)器過載問題如下圖所示:。

在實(shí)際業(yè)務(wù)中,一般并不會(huì)使用純粹的 Round Robin,而是有個(gè)調(diào)度服務(wù),會(huì)收集這些服務(wù)器的數(shù)據(jù),評(píng)估負(fù)載,給出負(fù)載比較低或者質(zhì)量高的服務(wù)器。如下圖所示:

如何解決 Ed深圳南油女裝高端貨源appge 的負(fù)載均衡問題呢?依靠的是 Frontend Load Balance 策略,也就是前端接入側(cè)的系統(tǒng),我們下面講常用的方式Frontend Load Balancer: DNS or HTTP DNS。

我們?cè)?Round Robin 中重點(diǎn)介紹了服務(wù)內(nèi)部的負(fù)載均衡,而直接對(duì)客戶端提供服務(wù)的服務(wù)器,一般叫做 Frontend Load Balancer,情況會(huì)有點(diǎn)不太一樣:若整個(gè)流媒體服務(wù)節(jié)點(diǎn)較少,而且是中心化部署,那么也可以用 Round Robin 的方式。

在 DNS 中設(shè)置多個(gè)解析 IP,或者 HTTP DNS 返回時(shí)隨機(jī)選擇節(jié)點(diǎn),或者選擇相對(duì)較輕的負(fù)載的機(jī)器,也是可行的方案在較多節(jié)深圳南油女裝高端貨源app點(diǎn),特別是分布式部署的節(jié)點(diǎn)中,是不可能選擇 Round Robin 的方案,因?yàn)槌素?fù)載之外,還需要考慮用戶的地理位置,一般來說會(huì)選擇分配 “就近” 的節(jié)點(diǎn)。

同樣 DNS 和 HTTP DNS 也能做到這點(diǎn),一般是根據(jù)用戶的出口 IP,從 IP 庫中獲取地理位置信息其實(shí) DNS 和 HTTP DNS 在調(diào)度能力上沒有區(qū)別,甚至很多 DNS 和 HTTP DNS 系統(tǒng)的決策系統(tǒng)都是同一個(gè),因?yàn)樗鼈円鉀Q的問題是一樣的:如何根據(jù)用戶的 IP,或者其他的信息(比如 RTT 或探測(cè)的數(shù)據(jù)),分配比較合適的節(jié)點(diǎn)(一般是就近,但也要考慮成本)。

DNS 是互聯(lián)網(wǎng)的基礎(chǔ),可以認(rèn)為它就是一個(gè)名字翻譯器,比如我們深圳南油女裝高端貨源app在 PING SRS 的服務(wù)器時(shí),會(huì)將 ossrs.net 解析成 IP 地址 182.92.233.108,這里完全沒有負(fù)載均衡的能力,因?yàn)榫鸵慌_(tái)服務(wù)器而已,DNS 在這里只是名字解析:

ping ossrs.net PING ossrs.net (182.92.233.108): 56 data bytes 64 bytes from 182.92.233.108: icmp_seq=0 ttl=64 time=24.350 ms

而 DNS 在流媒體負(fù)載均衡時(shí)的作用,其實(shí)是會(huì)根據(jù)客戶端的 IP,返回不同服務(wù)器的 IP,而 DNS 系統(tǒng)本身也是分布式的,在播放器的 /etc/hosts 文件中深圳南油女裝高端貨源app就可以記錄 DNS 的信息,如果沒有就會(huì)在 LocalDNS(一般在系統(tǒng)中配置或自動(dòng)獲?。┎樵冞@個(gè)名字的 IP。

這意味著 DNS 能抗住非常大的并發(fā),因?yàn)椴⒉皇且慌_(tái)中心化的 DNS 服務(wù)器在提供解析服務(wù),而是分布式的系統(tǒng)這就是為何新建解析時(shí)會(huì)有個(gè) TTL(過期時(shí)間),修改解析記錄后,在這個(gè)時(shí)間之后才會(huì)生效而實(shí)際上,這完全取決于各個(gè) DNS 服務(wù)器自己的策略,而且還有 DNS 劫持和篡改等操作,所以有時(shí)候也會(huì)造成負(fù)載不均衡。

因此 HTTP DNS 就出來了,可以認(rèn)為 DNS 是互聯(lián)網(wǎng)的運(yùn)營商提供的網(wǎng)絡(luò)基礎(chǔ)服務(wù),而 HTTP DNS 則可以由流媒體平臺(tái)也就是各位自己來實(shí)現(xiàn),就是一個(gè)名字服務(wù),也可以深圳南油女裝高端貨源app調(diào)用一個(gè) HTTP API 來解析,比如:

curl http://your-http-dns-service/resolve?domain=ossrs.net {["182.92.233.108"]}由于這個(gè)服務(wù)是自己提供的,可以自己決定什么時(shí)候更新該名字代表的含義,當(dāng)然可以做到更精確的負(fù)載,也可以用 HTTPS 防止篡改和劫持。

Note: HTTP-DNS 的這個(gè) your-http-dns-service 接入域名,則可以用一組 IP,或者用 DNS 域名,因?yàn)樗挥猩贁?shù)節(jié)點(diǎn),所以它的負(fù)載相對(duì)比較好均衡Load Balance by Vhost。

SRS 支持 Vhost,一般是 CDN 平深圳南油女裝高端貨源app臺(tái)用來隔離多個(gè)客戶,每個(gè)客戶可以有自己的 domain 域名,比如:vhost customer.a { } vhost customer.b { }如果用戶推流到同一個(gè) IP 的服務(wù)器,但是用不同的 Vhost,它們也是不同的流,播放時(shí)地址不同也是不同的流,例如:

? rtmp://ip/live/livestream?vhost=customer.a? rtmp://ip/live/livestream?vhost=customer.bNote:當(dāng)然,可以直接用 DNS 系統(tǒng),將 IP 映射到不同的域名,這樣就可以直接在 URL 中用域名代替 IP 了。

其實(shí) Vhost 還可以用作多源站的負(fù)深圳南油女裝高端貨源app載均衡,因?yàn)樵?Edge 中,可以將不同的客戶分流到不同的源站,這樣可以不用源站集群也可以擴(kuò)展源站的能力:vhost customer.a {   cluster {     mode remote;     origin server.a;   } } vhost customer.b {   cluster {     mode remote;     origin server.a;   } }

那么不同的 Vhost 實(shí)際上共享了 Edge 節(jié)點(diǎn),但是 Upstream 和 Origin 可以是隔離的當(dāng)然也可以配合 Origin Cluster 來做,這時(shí)候就是多個(gè)源站中心,和 Cons深圳南油女裝高端貨源appistent Hash 要實(shí)現(xiàn)的目標(biāo)有點(diǎn)像了。

Consistent Hash在 Vhost 隔離用戶的場(chǎng)景下,會(huì)導(dǎo)致配置文件比較復(fù)雜,還有一種更簡(jiǎn)單的策略,也可以實(shí)現(xiàn)類似的能力,那就是一致性 Hash(Consistent Hash)比如,可以根據(jù)用戶請(qǐng)求的 Stream 的 URL 做 Hash,決定回源到哪個(gè) Upstream 或 Origin,這樣就一樣可以實(shí)現(xiàn)同樣的隔離和降低負(fù)載。

實(shí)際應(yīng)用中,已經(jīng)有這種方案在線上提供服務(wù),所以方案上肯定是可行的當(dāng)然,SRS 沒有實(shí)現(xiàn)這個(gè)能力,需要自己碼代碼實(shí)現(xiàn)其實(shí) Vhost 或者 Consistent Hash,也可以配合 Redirect 來完成更深圳南油女裝高端貨源app復(fù)雜的負(fù)載均衡。

HTTP 302: Redirect302 是重定向(Redirect),實(shí)際上也可以用作負(fù)載均衡,比如通過調(diào)度訪問到服務(wù)器,但是服務(wù)器發(fā)現(xiàn)自己的負(fù)載過高,那么就給定向到另外一臺(tái)服務(wù)器,如下圖所示:

Note: 除了 HTTP 302,實(shí)際上 RTMP 也支持 302,SRS 的源站集群就是使用這個(gè)方式實(shí)現(xiàn)的當(dāng)然這里 302 主要用于流的服務(wù)發(fā)現(xiàn),而不是用于負(fù)載均衡既然 RTMP 也支持 302,那么在服務(wù)內(nèi)部,完全可以使用 302 來實(shí)現(xiàn)負(fù)載的再均衡。

若某個(gè) Upstream 的負(fù)載過高,就將流調(diào)度到其他的節(jié)點(diǎn),并且可以做多次 302 跳轉(zhuǎn)一般在 Frontend Server深圳南油女裝高端貨源app 中,只有 HTTP 流才支持 302,比如 HTTP-FLV 或者 HLS。

而 RTMP 是需要客戶端支持 302,這個(gè)一般支持得很少,所以不能使用另外,基于 UDP 的流媒體協(xié)議,也有支持 302 的,比如 RTMFP,一個(gè) Adobe 設(shè)計(jì)的 Flash 的 P2P 的協(xié)議,也支持 302。

當(dāng)然目前用得很少了WebRTC 目前沒有 302 的機(jī)制,一般是依靠 Frontend Server 的代理,實(shí)現(xiàn)后續(xù)服務(wù)器的負(fù)載均衡而 QUIC 作為未來 HTTP3 的標(biāo)準(zhǔn),肯定是會(huì)支持 302 這種基本能力的。

而 WebRTC 逐漸也會(huì)支持 WebTransport(基于 QUIC),因此這個(gè)能深圳南油女裝高端貨源app力在未來也會(huì)具備SRS: Edge ClusterSRS Edge 本質(zhì)上就是 Frontend Server,它可以解決以下問題:

直播的播放能力擴(kuò)展問題,比如支持 10 萬人觀看,可以水平擴(kuò)展 Edge Server解決就近服務(wù)的問題,和 CDN 起到的作用是一樣的,一般會(huì)選擇和用戶所在的城市部署Edge 使用 Round Robin 方式連接到 Upstream Edge,實(shí)現(xiàn) Upstream 的負(fù)載均衡。

Edge 本身的負(fù)載均衡,是依靠調(diào)度系統(tǒng),比如 DNS 或 HTTP-DNS。如下圖所示:

特別說明:Edge 是直播流的邊緣集群,支持 RTMP 和 HTTP-FLV 協(xié)議Edge 不深圳南油女裝高端貨源app支持切片比如 HLS 或 DASH,切片協(xié)議使用 Nginx 或 ATS 分發(fā)不支持 WebRTC,WebRTC 有自己的集群機(jī)制。

由于 Edge 本身就是 Frontend Server,因此一般不需要為了增加系統(tǒng)容量,再在前面掛 Nginx 或 LB,因?yàn)?Edge 本身就是為了解決容量問題,而且只有 Edge 能解決合并回源的問題。

Note:合并回源,指的是同一個(gè)流只會(huì)回源一次,比如有 1000 個(gè)播放器連接到了 Edge,Edge 只會(huì)從 Upstream 獲取一路流,而不會(huì)獲取 1000 路流,這和透明 Proxy 是不同的當(dāng)然,有時(shí)候還是需要前面掛 Nginx 或 LB,比如:

為了深圳南油女裝高端貨源app支持 HTTPS-FLV 或 HTTPS-API,Nginx 支持得更好,而且 HTTP/2 也支持減少對(duì)外的 IP,比如多個(gè)服務(wù)器對(duì)外使用一個(gè) IP,這時(shí)候就需要有一臺(tái)專門的 LB 代理到后端多臺(tái) Edge。

在云上部署,只能通過 LB 提供服務(wù),這是云產(chǎn)品的設(shè)計(jì)導(dǎo)致的,比如 K8s 的 Service除此之外,不應(yīng)該在 Edge 前面再掛其他的服務(wù)器,應(yīng)該直接由 Edge 提供服務(wù)SRS: Origin Cluster。

和 Edge 邊緣集群不同,SRS 源站集群主要是為了解決源站擴(kuò)展能力:如果有海量的流,比如 1 萬路流,那么單個(gè)源站是扛不住的,需要多個(gè)源站形成集群解決源站的單點(diǎn)問題,比如深圳南油女裝高端貨源app多區(qū)域部署,出現(xiàn)問題時(shí)自動(dòng)切換到其他區(qū)域。

切片協(xié)議的性能問題,由于寫入磁盤損耗性能較大,除了內(nèi)存盤,還可以用多個(gè)源站降低負(fù)載SRS 源站集群是不建議直接對(duì)外提供服務(wù),而是依靠 Edge 對(duì)外服務(wù),因?yàn)槭褂昧藘蓚€(gè)簡(jiǎn)單的技術(shù):流發(fā)現(xiàn):源站集群會(huì)訪問一個(gè) HTTP 地址查詢流,默認(rèn)是配置為其他源站,也可以配置為一個(gè)專門的服務(wù)。

RTMP 302 重定向,若發(fā)現(xiàn)流不在本源站,那么會(huì)定向到其他源站Note: 其實(shí) Edge 在回源前也可以先訪問流查詢服務(wù),找到有流的源站后再發(fā)起連接但是有可能流會(huì)切走,所以還是需要一個(gè)重新定位流的過程。

這個(gè)過程非常簡(jiǎn)單,如下圖所示:

由于流始終只在一個(gè)源站上面,因此生成 HL深圳南油女裝高端貨源appS 切片時(shí)也會(huì)由一個(gè)源站生成,不需要做同步一般使用共享存儲(chǔ)的方式,或者使用 on_hls 將切片發(fā)送到云存儲(chǔ)Note: 還有一種方式,使用雙流熱備,一般是兩個(gè)不同的流,在內(nèi)部實(shí)現(xiàn)備份。

這種一般需要自己實(shí)現(xiàn),而且對(duì)于 HLS、SRT 和 WebRTC 都很復(fù)雜,SRS 沒有支持也不展開了從負(fù)載均衡角度看源站集群,實(shí)際上是調(diào)度器實(shí)現(xiàn)的負(fù)載均衡,比如 Edge 回源時(shí)若使用 Round Robin,或者查詢專門的服務(wù)應(yīng)該往哪個(gè)源站推流,甚至當(dāng)源站的負(fù)載過高,可以主動(dòng)斷開流,讓流重推實(shí)現(xiàn)負(fù)載的重新均衡。

SRS: WebRTC CasecadeWebRTC 的負(fù)載只在源站,而不存在邊緣的負(fù)載均衡,因?yàn)?深圳南油女裝高端貨源appWebRTC 的推流和觀看幾乎是對(duì)等的,而不是直播這種一對(duì)萬級(jí)別的不對(duì)等換句話說,邊緣是為了解決海量觀看問題,而推流和觀看差不多時(shí)就不需要邊緣做負(fù)載均衡(直播可以用來做接入和跳轉(zhuǎn))。

WebRTC 由于沒有實(shí)現(xiàn) 302 跳轉(zhuǎn),因此接入都沒有必要邊緣做負(fù)載均衡了比如在一個(gè) Load Balance,也就是一個(gè) VIP 后面有 10 臺(tái) SRS 源站,返回給客戶端的都是同一個(gè) VIP,那么客戶端最終會(huì)落到哪個(gè) SRS 源站呢?完全就是看 Load Balance 的策略,這時(shí)候并不能像直播一樣加一個(gè)邊緣實(shí)現(xiàn) RTMP 302 的跳轉(zhuǎn)。

因此,WebRTC 的負(fù)載均衡,就完全不是 Edge 能解決的,它深圳南油女裝高端貨源app本來就是依靠源站集群一般在 RTC 中,這種叫做 Casecade(級(jí)聯(lián)),也就是它們是平等關(guān)系,只是一級(jí)一級(jí)的路由一樣地連接起來,增加負(fù)載能力。

如下圖所示:

這里和 OriginCluster 有本質(zhì)的不同,因?yàn)?OriginCluster 之間并沒有媒體傳輸,而是使用 RTMP 302 讓 Edge 跳轉(zhuǎn)到指定的源站,因?yàn)樵凑镜呢?fù)載是可控的,它最多只有有限個(gè) Edge 來回源取流。

而 OriginCluster 不適合 WebRTC,因?yàn)榭蛻舳诵枰苯舆B接到源站,這時(shí)候源站的負(fù)載是不可控的比如在 100 人的會(huì)議中,每個(gè)流會(huì)有 100 個(gè)人訂閱,這時(shí)候需要將每個(gè)用戶分散到不同的源站上,和每個(gè)深圳南油女裝高端貨源app源站建立連接,實(shí)現(xiàn)推流和獲取其他人的流。

Note: 這個(gè)例子很罕見,一般 100 人互動(dòng)的會(huì)議,會(huì)使用 MCU 模式,由服務(wù)器合并成一路流,或者選擇性的轉(zhuǎn)發(fā)幾路流,服務(wù)器內(nèi)部的邏輯是非常復(fù)雜的實(shí)際上考慮 WebRTC 的常用場(chǎng)景,就是一對(duì)一通話,基本上占了 80% 左右的比例。

那么這時(shí)候每個(gè)人都推一路流,播放一路流,是屬于典型的流非常多的情況,那么用戶可以完全連接到一個(gè)就近的 Origin,而一般用戶的地理位置并不相同,比如在不同的地區(qū)或國家,那么源站之間級(jí)聯(lián),可以實(shí)現(xiàn)提高通話質(zhì)量的效果。

在源站級(jí)聯(lián)的結(jié)構(gòu)下,用戶接入使用 DNS 或 HTTP DNS 協(xié)議訪問 HTTPS API,而在 SDP深圳南油女裝高端貨源app 中返回源站的 IP,因此這就是一次負(fù)載均衡的機(jī)會(huì),可以返回離用戶比較接近而且負(fù)載較低的源站此外,多個(gè)源站如何級(jí)聯(lián),若大家地區(qū)差不多,可以調(diào)度到一臺(tái)源站避免級(jí)聯(lián),這可以節(jié)約內(nèi)部的傳輸帶寬(在大量的同地區(qū)一對(duì)一通話時(shí)很值得優(yōu)化),同時(shí)也增加了負(fù)載的不可調(diào)度性,特別是它們會(huì)演變成一個(gè)多人會(huì)議。

因此,在會(huì)議中,區(qū)分一對(duì)一的會(huì)議,和多人會(huì)議,或者限制會(huì)議人數(shù),對(duì)于負(fù)載均衡實(shí)際上是非常有幫助的如果能提前知道這是一對(duì)一會(huì)議,那么就更容易調(diào)度和負(fù)載均衡很可惜的是,產(chǎn)品經(jīng)理一般對(duì)這個(gè)不感興趣Remark: 特別說明,SRS 的級(jí)聯(lián)功能還沒有實(shí)現(xiàn),只是實(shí)現(xiàn)了原型,還沒有提交到開源倉庫。

TURN, ICE, QU深圳南油女裝高端貨源appIC, etc特別補(bǔ)充一下 WebRTC 相關(guān)的協(xié)議,比如 TURN、ICE 和 QUIC 等ICE 其實(shí)不算一個(gè)傳輸協(xié)議,它更像是標(biāo)識(shí)協(xié)議,一般指 Binding Request 和 Response,會(huì)在里面帶有 IP 和優(yōu)先級(jí)信息,來標(biāo)識(shí)地址和信道的信息,用于多條信道的選擇,比如 4G 和 WiFi 都很好時(shí)優(yōu)先選誰。

還會(huì)用作會(huì)話的心跳,客戶端會(huì)一直發(fā)送這個(gè)消息因此 ICE 對(duì)于負(fù)載均衡沒有作用,但是它可以用來標(biāo)識(shí)會(huì)話,和 QUIC 的 ConnectionID 作用類似,因此在經(jīng)過 Load Balance 時(shí)可以起到識(shí)別會(huì)話的作用,特別是客戶端的網(wǎng)絡(luò)切換時(shí)。

而 TURN 協(xié)議其實(shí)是對(duì)深圳南油女裝高端貨源app Cloud Native 非常不友好的協(xié)議,因?yàn)樗切枰峙湟幌盗械亩丝?,用端口來區(qū)分用戶,這種是在私有網(wǎng)絡(luò)中的做法,假設(shè)端口無限,而公有云上端口往往是受限的,比如需要經(jīng)過 Load Balance 這個(gè)系統(tǒng)時(shí),端口就是有限的。

Note: 當(dāng)然 TURN 也可以復(fù)用一個(gè)端口,而不真正分配端口,這限制了不能使用 TURN 直接通信而是經(jīng)過 SFU,所以對(duì)于 SRS 也沒有問題TURN 的真正用處是降級(jí)到 TCP 協(xié)議,因?yàn)橛行┢髽I(yè)的防火墻不支持 UDP,所以只能使用 TCP,而客戶端需要使用 TURN 的 TCP 功能。

當(dāng)然了,也可以直接使用 TCP 的 host,比如 mediasoup 就深圳南油女裝高端貨源app已經(jīng)支持了,而 SRS 還沒有支持QUIC 比較友好的是它的 0RTT 連接,也就是客戶端會(huì)緩存 SSL 的類似 ticket 的東西,可以跳過握手。

對(duì)于負(fù)載均衡,QUIC 更有效的是它有 ConnectionID,那么經(jīng)過 LoadBalance 時(shí),盡管客戶端改變了地址和網(wǎng)絡(luò),Load Balance 還是能知道后端哪個(gè)服務(wù)來處理它,當(dāng)然這其實(shí)讓服務(wù)器的負(fù)載更難以轉(zhuǎn)移了。

其實(shí) WebRTC 這么復(fù)雜的一套協(xié)議和系統(tǒng),講起來都是亂糟糟的,很糟心由于 100ms 級(jí)別的延遲是硬指標(biāo),所以必須使用 UDP 和一套復(fù)雜的擁塞控制協(xié)議,再加上安全和加密也是基本能力,也有人宣稱 Cloud Nativ深圳南油女裝高端貨源appe 的 RTC 才是未來,引入了端口復(fù)用和負(fù)載均衡,以及長(zhǎng)連接和重啟升級(jí)等問題,還有那改得天翻地覆的結(jié)構(gòu),以及來攪局的 HTTP3 和 QUIC……。

或許對(duì)于 WebRTC 的負(fù)載均衡,有一句話是最適用的:世上無難事,只要肯放棄SRS: Prometheus Exporter所有負(fù)載均衡的前提,就是能知道負(fù)載,這依賴數(shù)據(jù)采集和計(jì)算Prometheus (https://prometheus.io) 就是做這個(gè)用的,它會(huì)不斷采集各種數(shù)據(jù),按照它的一套規(guī)則,也可以計(jì)算這些數(shù)據(jù),它本質(zhì)上就是一個(gè)時(shí)序數(shù)據(jù)庫。

系統(tǒng)負(fù)載,本質(zhì)上就是一系列的時(shí)序數(shù)據(jù),會(huì)隨著時(shí)間變化比如,Prometheus 有個(gè) node深圳南油女裝高端貨源app_exporter (https://github.com/prometheus/node_exporter),它提供了主機(jī)節(jié)點(diǎn)的相關(guān)時(shí)序信息,比如 CPU、磁盤、網(wǎng)絡(luò)、內(nèi)存等,這些信息就可以作為計(jì)算服務(wù)負(fù)載的依據(jù)。

每個(gè)應(yīng)用服務(wù),也會(huì)有對(duì)應(yīng)的 exporter,比如 redis_exporter (https://github.com/oliver006/redis_exporter) 采集 Redis 的負(fù)載數(shù)據(jù),nginx-exporter (https://github.com/nginxinc/nginx-prometheus-exporter) 采集 Nginx 的負(fù)載數(shù)據(jù)。

目前 S深圳南油女裝高端貨源appRS 還沒有實(shí)現(xiàn)自己的 exporter,未來一定會(huì)實(shí)現(xiàn),詳細(xì)請(qǐng)參考 https://github.com/ossrs/srs/issues/2899。

標(biāo)簽列表