天天看點

當SRS遇到K8s:快速建構高并發直播叢集

作者:忘籬

來源:

SRS 開源伺服器

本章描述了如何基于 K8s 建構 EdgeCluster 實作高并發流媒體播放。

EdgeCluster 實作了合并回源,對于某一路流,不管有多少用戶端播放,EdgeServer 都隻會從 OriginServer 取一路流,這樣可以通過擴充 EdgeCluster 來增加支援的播放能力,也就是 CDN 網絡具備的重要能力:高并發。

Note: Edge Cluster 根據用戶端播放的協定不同,可以分為 RTMP Edge Cluster 或 HTTP-FLV Edge Cluster,詳細請參考相關 Wiki。

對于自建源站,沒有那麼多點傳播放量,為何不建議使用 SRS 單源站直接提供服務,而要用 EdgeCluster 呢?主要場景分析如下:

  • 防止 Origin 過載,即使推流非常少而且播放的流也不多,比如自建源站後使用 CDN 回源,在多家 CDN 回源時,也可能一個 CDN 一條流會有多個回源連接配接。使用 Edge 能保護 Origin 不因為回源造成 Origin 問題,最多就是某些 Edge 被回源打挂。
  • 可以使用多個 Edge Cluster(隻需要再加 srs-edge-service 就可以),對外用不同的 SLB 暴露,可以針對每個 SLB 限流,防止 CDN 之間互相幹擾。這樣能保證某些 CDN 是可用的,而不是 Origin 挂了後所有 CDN 都不可用。
  • 分離 Origin 關鍵業務,将下行流媒體分發業務交給 Edge Cluster,Origin 可以做切片、DVR、鑒權等關鍵業務,避免業務之間互相幹擾。
當SRS遇到K8s:快速建構高并發直播叢集
當SRS遇到K8s:快速建構高并發直播叢集

Step1: 建立一個無狀态應用 k8s deployment,運作 SRSOrigin Server 和 Nginx,HLS 寫入共享 Volume:

當SRS遇到K8s:快速建構高并發直播叢集

Step2: 建立一個服務 k8s service,基于 ClusterIP 提供 Origin 服務,供 EdgeServer 調用:

當SRS遇到K8s:快速建構高并發直播叢集

Note: Origin Server在叢集内部提供流媒體源站服務,内部域名為 srs-internal-origin-service,EdgeServer 會通過該域名連接配接到 OriginServer。

Step3: 建立一個服務 k8s service,基于 SLB 提供 HTTP 服務,Nginx 對外提供 HLS 服務:

當SRS遇到K8s:快速建構高并發直播叢集

Note: Nginx 通過 SharedVolume 讀取 SRSOrigin 生成的切片,對外提供 HLS 服務。

Note: 這裡我們選擇 ACK 自動建立 SLB 和 EIP,也可以手動指定 SLB,參考指定購買的 SLB 和 EIP。

Step4: 建立一個配置 k8s ConfigMap,存儲了 SRSEdge Server 使用的配置檔案:

當SRS遇到K8s:快速建構高并發直播叢集

Note: Edge Server 的配置中,通過 Service 注冊的内部域名 srs-internal-origin-service,連接配接到 OriginServer。

Step5: 建立一個無狀态應用 k8s deployment,運作多個 SRSEdge Server:

當SRS遇到K8s:快速建構高并發直播叢集

Step6: 建立一個服務 k8s service,Edge Cluster 基于 SLB 對外提供流媒體服務:

當SRS遇到K8s:快速建構高并發直播叢集

Step7: 大功告成。你可以推拉流了,其中 HLS 流可以從 Nginx(80) 播放,RTMP 和 HTTP-FLV 從 SRS 播放:

Publish RTMP to rtmp://28.170.32.118/live/livestream

Play RTMP from rtmp://28.170.32.118/live/livestream

Play HTTP-FLV from

http://28.170.32.118:8080/live/livestream.flv

Play HLS from

http://28.170.32.118/live/livestream.m3u8

Note: 請将上面的 EIP 換成你自己的,可用指令 kubectl get svc/srs-http-service或kubectl get svc/srs-edge-service 檢視你的 EIP。

Note: 如果是自動建立 SLB 和 EIP,那麼 HLS 和 RTMP/HTTP-FLV 的 IP 是不一樣的,你可以選擇手動指定 SLB,這兩個服務可以用同一個 SLB,參考指定購買的 SLB 和 EIP。

「視訊雲技術」你最值得關注的音視訊技術公衆号,每周推送來自阿裡雲一線的實踐技術文章,在這裡與音視訊領域一流工程師交流切磋。
當SRS遇到K8s:快速建構高并發直播叢集

繼續閱讀