解決real緩衝的問題

有效降低RealServer服務中的客戶緩衝現象-轉載

下面的方法大部分網友反映有效,可是我覺得...難於理解realserver會有這個搞笑的地方,我使用一個realserver也達到了好效果,有的網友使用了5個還是緩衝

http://souxin.gzrail.net/dvbbs/dispbbs.asp?boardid=2&star=1&replyid=42766&id=108&skin=0&page=1


[URL=http://www.7ctv.com/helix]點擊這裏觀看:Helix安裝、配置、ODBC認證及克隆[/URL]


    感謝大家的關注,爲了查閱方便我總結了前60帖的討論。

    常常看到一些抱怨,無論多好的服務器總存在媒體的緩衝。經過觀察發現,每當連接人數達到一定值時,客戶就有播放緩衝的現象發生,而此刻服務器的CPU使用率、內存佔用率、帶寬佔用等都很低,沒有理由懷疑服務器此刻的狀態。這一問題始終困擾我,後來嘗試平均分配554、7070端口來播放,情況也沒有根本好轉。

    一天突然想到可以並列服務試試,就是同一臺機器多裝幾個RealServer看看,詳細請參閱 http://service.real.com/help/library/guides/server8/htmfiles/started.htm#35132 。
按照說明進行了如下工作,把原來的rmserver.cfg拷貝到 bin目錄下,更名爲rm2.cfg,名字短點好輸入,放置和 rmserver.exe相同的目錄好操作。把rm2.cfg中的端口都加1,如554,7070改爲555,7071等等。

一、如何安裝多個服務
    [參考 lucian (hyne) 的 單機安裝多個helix server全攻略]
    首先複製上述的配置文件,用文本編輯器修改各個端口設置,如果你想多個,那麼另存爲多個名稱不同的配置文件。然後註冊系統服務:cmd下轉到 ../bin目錄
  運行:rmserver -install:rm1 "你的實際路徑/rm1.cfg" ,其中rm1是你命名的服務名稱,可以按你的意願取名。
    返回消息應該是Successfully installed the rm1 Service。如果想再安裝rm2 service按照同樣的方法完成。你可以在DOS啓動這個新服務:rmserver.exe rm2.cfg。
    Real公司還提供了一種方法: 先執行 rmserver.exe -import:rmReg2 rm2.cfg 導入註冊表,再執行 rmserver.exe -install:rm2 "rmReg2" 註冊服務,用rmserver.exe registry:rm2 來啓動服務。我個人認爲這個比較麻煩,還不容易修改,不推薦。
    最後在服務管理裏能發現新添加的rm1 ... 服務,修改其屬性爲自動啓動,這樣每次重新啓動機器,服務都會自動運行的。

提示:
   rmserver -install:rm1 "????",如果這個路徑不包含空格,就可以直接啓動了。如果含有空格,你需要進入註冊表,搜尋rm1.cfg這樣的關鍵字,修改StartupParams項,檢查其路徑是否與你實際的一致,路徑如果有空格,一定要把引號加上,如: "C:/program files/real/helixServer/rm1.cfg" 。建議大家都要檢查這一項,因爲有時比如RealServer8.x就寫個錯誤的路徑在那裏,所以總有人說RealServer8.0不行,其實你把註冊表修改對了就可以了。
   各個rmx.cfg中的端口不能相同,否則會發生端口衝突,造成無法啓動服務,這也是許多人初次嘗試失敗的原因。我的經驗是先對首個服務進行全面的配置,如加載點,IP限制等等,然後再複製這個配置文件,這樣不僅能快速配置其它服務,而且也能保證配置的同步性。

二、有效性
    大多數人經過試用都表示有效,但也有如xxzHou就表示沒有效果,他啓動了4個服務,120以上時,客戶端就出現緩衝,"而改用http方式時,此服務器可以提供600-700不緩衝播放500k左右的電影",對於引號中的聲明我感到懷疑。首先我聲明,這個方法是有效的,是我通過實踐總結的。
    首先你要確認你的機器是否有餘量,例如我的60人時緩衝,此時CPU使用率只有10%,內存也綽綽有餘,這時啓動多服務是有效果的。但服務不是越多越好,2-4個爲好,這時CPU能到50-60%,這時的負荷已經很重了,能在40-50%是最好的。另外客戶端的機器和軟件狀態不佳,也是造成緩衝的重要原因,還有你是否真正做到了服務平衡。
    我也發現不是所有的機器效果都明顯,尤其是播放高帶寬,如400-500k以上的,所能承受的人數急劇下降。帶寬也是原因100M帶寬的理論值是多少?不好說,還有收發器、交換機都能達到100M?我們沒有有效的手段檢驗,專業性的儀器太貴,承受不起。但我知道原以爲那些光纖收發器都是高科技產品,其實小廠都能生產,兩三百元就能買到,而且質量良莠不齊,我們多次發現因爲收發器性能下降造成實際帶寬的下降。
    我個人認爲所謂百兆可能只能發揮60-80M能力,這樣你算算多少人?200多人的在線吧,如果你還同時通過這條線路提供網頁、遊戲等其他服務,可能打的折扣多了。上面說的"600-700不緩衝播放500k左右的電影",這時帶寬多少呀?百兆是不可能的,只有是千兆網,這樣的話是否全部通道都是千兆了?

    題外話,電信內部人員最終承認,發現1M的ADSL只能看225k的電影,2M看350k的,因爲當別人報告緩衝時,他們用8M的看,結果一切正常,我猜測這可能是ADSL交換那兒不太好,不過誰敢對電信指點一二呀!所以具體說來這是個系統的綜合問題,不能片面地鑽一個地方。總之我是把服務器的性能發揮到極限了,剩下的只能看天命了。
    採用http是不錯,我一度也曾採用這個辦法,結果開始不錯,當人數上來後就不行了。且人家能高速下載了,而且一旦稍有緩衝大家都開始下載,http不好限制線程,結果更擁擠更累機器,最終還不如流播放。另外中途中斷了不能接續,拖放也不自如,還是不用爲好。
    我個人認爲是rm的服務軟件的效率不行,至於版本估計美金買的也好不了哪去,要是D和正之間有這麼大的差距,就不會打擊D版了,這是多好的廣告呀。目前爲止我比較了周圍的流媒體服務情況,在相同的硬件條件下,我這個是最好的。當然還有許多不滿意的,所以才公開經驗,希望有更好的建議和方案出現。
    
    通常流媒體服務器都是專用的,所以封閉全部不需要的端口,防止黑客攻擊,我的就被攻擊過。關閉不需要的服務,儘量釋放系統資源,你可以嘗試着關,只要不影響運行和服務的都關掉。我認爲不要裝防火牆、殺毒軟件等這些軟件,這些都涉及系統內核操作,消耗的資源不知道有多少。既然是服務器,你不會在上面玩遊戲、看網頁的,不存在感染病毒的途徑。網友 quake777 稱他的小服務器,不小心裝了個瑞星防毒,HAHA~,25人聯線就緩衝了。換了個諾頓企業版,最高40人聯線時還跑得瘋快,說明這些軟件是有影響的。

三、關於Real官方的冗餘和動態負載平衡
    關於Helix的冗餘,不知大家仔細看過,它需要多臺Helix服務器,這個好辦,機器不缺。但你的內容加載點呢?我將近1T的資料,3臺Helix服務,需要額外2T的內容空間,而且還要保證同步,我看是比較麻煩的。如果我真的有,我也會拿來增加內容,而不是做冗餘。樓上還有一位說的DNS動態平衡也是針對多臺Helix服務而言,通過DNS來分配不同的機器來提供服務。
    當然你可以使用專用的磁盤陣列,這也是Helix圖例裏表明的,多個Helix服務器共享這個陣列,通過DNS分配或其它方式均衡這些服務器,平衡服務。可是投資呢?不用說專用陣列了,單SCSI硬盤大家就知道有多貴了。要知道多數人的服務都是免費的,好多都是個人愛好者,像我一樣,用普通微機做服務器,且沒有發現IDE硬盤是瓶頸。那些專業的配置就不用考慮了吧。而且大家也看到討論的,那些2個CPU的專業服務器 120人就緩衝了,趕不上我5000元2臺服務器的(顯示器不用的啦,遠程控制的),呵呵,你們說呢?
    我的關鍵是一臺機器,進行多個進程的同時服務,是盡力發揮一臺機器的能力,和Real官方的說法是兩個不同的概念。

四、端口平衡
    hyne 的算法挺好:
  Randomize
   rndcount=Int(Rnd*3)
   if rndcount=0 then
   response.write "pnm://*.*.*.*:7070"+url
   end if
   if rndcount=1 then
   response.write "pnm://*.*.*.*7071"+url
   end if
   if rndcount=2 then
   response.write "pnm://*.*.*.*:7072"+url
   end if

    我是採用asp.net編程,主要涉及以下內容,相關人員一看就會懂的。
    首先設置服務的數量和端口,在web.config中:
  
    
    
    
    程序自動尋找HelixPort、WebPort和FTPPort加上遞增的序號,直到找不到爲止,如尋找到HelixPort3或WebPort2,發現不存在就終止。後面的值是我自己設定的格式,是名稱加端口。程序會自動把HelixPort1的端口作爲一組統計,同時把所有Helix類型的也統計在一起,這樣提供給網頁能實時反映在線人數,及其分佈。最後有一個這樣的結構數組,[端口號,不會出現重複的][組別,指Helix1,FTP1這類][類別,指Helix、Web這樣的大類]。
        Public Structure moviePortDefine
            Dim TCP_port As Integer '端口號
            Dim GroupID As Integer  '分類索引
            Dim GroupName As String '分類名稱
            Dim Cnt As Integer      '在線人數
            Dim TypeID As Integer   '端口序號
        End Structure

    然後有個程序對各個端口進行掃描:
        Dim p As New Process()
            p.StartInfo.FileName = "netstat.exe"
            p.StartInfo.Arguments = "-n"
            p.StartInfo.UseShellExecute = False
            p.StartInfo.RedirectStandardOutput = True
            p.Start() '執行了 netstat.exe -n 命令

        Dim output As String = p.StandardOutput.ReadToEnd()
            p.WaitForExit()

            Dim ss() As String = output.Split(vbCrLf)
            Dim ssTcp() As String
            Dim i, j, k As Long
            For i = 1 To ss.GetUpperBound(0) '尋找ESTABLISHED,表示建立連接的端口
                If InStr(1, ss(i), "ESTABLISHED", CompareMethod.Text) > 0 Then
                    k = InStr(ss(i), ":")
                    If k > 0 Then j = InStr(k + 1, ss(i), " ", 1)
                    If j > k Then
                        k = Val(Mid(ss(i), k + 1, j - k))
                        For j = 0 To NowFindedPort.GetUpperBound(0)
                            If k = NowFindedPort(j).TCP_port Then
                                NowFindedPort(j).Cnt += 1
                                Exit For
                            End If
                        Next
                    End If
                End If
            Next

    最後統計人數,提供在線報告,給出最少人數的端口,生成超連接。會編軟件的往往只需要知道思路,而不是源代碼,個人的習慣不同,有看別人代碼的能力還不如自己編,看不懂的直接引用,往往出了問題就抓瞎。所以我只講了我的思路,具體請自己研究。我正在整理我的電影系統,準備編寫好說明文件後,編譯(不含原碼)供下載,不寫不知道,寫說明比編程還要費勁,要面面俱到,麻煩呀,不知道啥時能完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章