Nginx 的 RTMP 模組的線上統計功能 stat 在 multi-worker 模式下存在 Bug

來源:互聯網
上載者:User

        《讓你的 Nginx 的 RTMP 直播具有統計某頻道線上觀看使用者數量的功能》一文介紹了 Nginx 的線上統計模組。
        我們的線上直播服務使用了 Nginx 的 Rtmp 模組(請參閱《Nginx RTMP 模組 nginx-rtmp-module 指令詳解》)。總體來講,這個模組的功能穩定性和效能等方面都是很出色的。只要你的直播源頭資料供給沒問題,Nginx 的直播發布就 No Problem。
        對於閑置頻道,就是沒人觀看的直播頻道,為了節省系統資源,我們進行了定時清理。那麼怎麼判定一個頻道是閑置的呢?一開始我們使用了《讓你的 Nginx 的 RTMP 直播具有統計某頻道線上觀看使用者數量的功能》介紹的方法,Java 使用 Apache 的 http client 調用 Nginx 的 nclients,即
http://直播伺服器IP/nclients?app=app應用程式名稱&name=頻道名,所得結果為 0 的即為閑置頻道。
        但在實際環境中,我們發現,這個線上統計功能並不靠譜。有時有人現正播放的頻道,被統計為 0。這樣造成統計錯誤,進而使不應該被清理的頻道被清理掉,嚴重影響了直播效果的穩定性。
        一開始我們以為是自己沒有配置好 Nginx,但重新檢查並反覆部署仍然如此。
        有次我們使用 http://直播伺服器IP/stat 直接用頁面跟蹤直播頻道的線上統計情況,發現統計結果正常的幾率在 80% 以上。然而那錯誤的 20% 的統計結果足以讓我們的清理程式犯下致命的錯誤了。我們不禁對 Nginx 的線上統計功能產生了懷疑,這個靠譜不靠譜?
        經過多方求證,其中包括 RTMP 模組的作者的權威確認,我們終於得到結論,這確實是 Nginx 的一個 Bug。 
        原來是 Nginx 的 stat 對 multi-worker 模式的並發支援不夠好造成的。
        官方給出兩種解決方案:讓 Nginx 工作在 single-worker 模式,或者為每個 Nginx worker 配置單獨的 stat file。
        第一種方法對於 Nginx 提供的效能肯定大有影響,尤其是對於多核伺服器。第二種方法,官方卻沒有說明如何單獨配置。
        結合實際情況,我們沒有使用這兩種方法,而是自己去管理維護每個直播頻道的串連數量。當然這也不是最好的辦法,還是希望 Nginx 能夠儘快支援 multi-worker 模式下的 stat。
參考連結:https://github.com/arut/nginx-rtmp-module/issues/159。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.