即時通訊(IM)和實時通訊(聲網Agora.io)都是一套網絡通訊系統,其本質都是對信息進行轉發。其最大的不一樣點,是對信息傳遞的時間規定。兩者的區別能夠從如下幾個方面:算法
即時通訊
常見場景包括文字聊天、語音消息發送、文件傳輸、音視頻播放等。通俗的說,就是發短信。緩存
實時通訊
場景包括語音、視頻電話會議、網絡電話等。通俗的說,就是打電話。服務器
即時通信
主要要求可靠,考覈送達率。要是你發一條短信,結果丟了,對方沒收到!你不再相信短信了吧。網絡
實時通訊
主要要求低延時和接通率。優化
低延時:你打一通電話,每說一句話,對方得幾秒鐘纔有迴應,這電話你也講不下去了吧。編碼
接通率:你打電話,你這邊聽到接通了,實際上對方的手機毫無反應,這實際上就沒接通。這跟短信沒送到,形成的惡劣影響是同樣的。不知道會破壞多少美好姻緣。設計
即時通訊
消息發送和確認,【消息接入端、服務端消息邏輯處理,服務端消息緩存和存儲,轉發,服務端用戶狀態管理,心跳機制,消息發送端】、消息接收和確認。視頻
實時通訊
技術環節:採集、前處理、編碼、【服務端接入、轉發、服務端接入】、解碼、播放和渲染。開發
這些技術環節重合的部分是:信息轉發。部署
公共互聯網上,最經常使用的通訊協議有TCP、UDP。
TCP:Transmission Control Protocol,傳輸控制協議是基於鏈接的協議,也就是說,在正式收發數據前,必須和對方創建可靠的鏈接。有延遲不可控的特色。
UDP:User Data Protocol,用戶數據報協議,是與TCP相對應的協議。它是面向非鏈接的協議,它不與對方創建鏈接,而是直接就把數據包發送過去。 存在丟包、抖動、延遲的特徵。
即時通訊系統爲了保證鏈接的可靠性,最經常使用的是TCP協議或者類TCP鏈接協議。這類協議的特色是追求鏈接的可靠性,而形成了延遲的不可控性,超過2秒的延遲響應是常態,甚至幾十分鐘的延遲響應,而電信級的實時通訊標準是400ms,而基於互聯網的實時通訊須要另闢蹊徑,開創出新的傳輸解決方案。這又與應用場景相關了。發短信,延遲幾秒鐘送達,對使用者影響不大。
實時通訊,聲網Agora.io採用 UDP 做爲基礎傳輸協議。在設計低延時的實時通訊服務時,UDP 表現要比 TCP 好得多。這是由於實時通訊中,低時延比可靠性更重要。打電話,幾秒的延遲是不能忍受的。
TCP協議封裝了消息的重傳機制,在丟包的狀況下,採用TCP協議的應用程序幾乎沒法優化這個重傳機制,來達到低時延的效果。特別是在移動互聯網絡中,超過30%丟包時,TCP 的延時能夠到幾十分鐘, 超過 50%丟包時,甚至很容易斷開。 在一樣丟包30%的鏈路上,UDP還能夠傳輸數據,TCP就沒法進行實時通訊了。
Agora.io聲網基於UDP協議,對丟包的狀況開發了各類算法進行補償,一方面儘可能保證和恢復數據的連續性。另一方面,當某些數據包沒法恢復時,會丟棄對應的音視頻數據包,而不會影響後續的實時通訊服務。此外, 採用多機房部署,儘可能縮短客戶端到機房的接入,並保證機房間的RTT小於60ms和400ms內丟包率小於1%,基於以上標準,進行篩選和部署服務器,能夠大大優化端到端的傳輸路徑,也大大下降時延的機率。
成本涉及到的環節有:服務端接入、存儲和轉發。(人工成本就不談了)
兩者成本會產生差別的環節有:
從服務端接入方式來看,即時通訊採用TCP協議來保證可靠性,可能會創建多個鏈接,相比無鏈接的UDP傳輸方式,這是一種昂貴的傳輸方式。實時通訊能夠基於UDP協議,與服務端創建靈活的、快速的接入機制。
存儲方面,實時通訊在服務端是實時轉發,不會在服務端存儲數據,而即時消息系統通常會將緩存轉爲存儲數據,包括富媒體數據,會佔用大量的存儲空間,產生更多的存儲成本。
從成本上來看,傳輸一樣信息量的數據,基於TCP的即時通訊方式,更側重於可靠性,會優先採用多線機房的傳輸方式,成本比較高;
而基於UDP的實時通訊方式,會優先選取最優路徑進行傳輸數據,並能夠動態調整傳輸路徑,這樣可以高效的利用帶寬,提升傳輸效率,下降成本。
即時通訊:XMPP,MQTT
實時通訊:WebRTC、Tokbox
本文做者:王俊豪 聲網Agora.io SDK工程師