技術解碼丨實時音視頻與PSTN融合的解決方案

{"type":"doc","content":[{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"本週的技術解碼將爲大家解析騰訊雲實時音視頻與PSTN融合的解決方案","attrs":{}}]}],"attrs":{}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/80/8090e0ce74507ec227a89c9f681bf601.webp","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/87/873c0d65297120658d23bbe92de26ec9.webp","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"01. 什麼是實時音視頻(RTC)","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"實時音視頻(Real-Time Communication,簡稱RTC),從字面上理解就是實時的進行音頻和視頻的交流,最主要的特點就是“實時”。這裏的實時性可以分爲三個檔次:","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/b6/b6effa965440112394c289af40bc7429.webp","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"騰訊雲實時音視頻 TRTC 延時已經可以做到300ms以下,我們常見的QQ和騰訊會議上的語音通話、視頻通話,都是實時音視頻的應用場景。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"首先,我們來了解下爲什麼會產生延時。以QQ爲例,兩個QQ用戶通過外網發起語音通話,主叫方語音呼叫接聽方,這個過程一般會分爲兩層來處理。一個是信令層的處理,另一個是碼流層的處理。信令層主要用於通話的建立、連接、資源的準備,並協商碼流編解碼類型等相關信息,碼流層專注於音視頻數據處理。這裏主要以音頻來說明,要進行實時語音通話,則要進行音頻數據的採集、預處理、編碼、網絡傳輸、解碼、播放等步驟。由於雙方都是在Internet上進行通話,需要將主叫的聲音傳輸到被叫方,即是將採集到的語音數據傳輸到接收端。接收端收到音頻流數據後,會進行解碼,之後是播放器進行播放。這裏面有很關鍵的一點,就是我們的通話是建立在Internet之上,這種語音通話也稱之爲VOIP,是需要依賴網絡傳輸的,所以就會產生延時。從主叫說話的第一個字開始到被叫聽到的那個字之間會經過一定距離的物理傳輸,這就產生了延時。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"那麼如何才能做到低延時呢?我們在傳輸協議上直接選擇來UDP。UDP雖然不可靠,但是它的傳輸效率比較高,相對於TCP少了三次握手和四次揮手。因爲外網的環境時好時壞,UDP又是不可靠的,在Internet傳輸音視頻數據時容易產生抖動,所以我們需要一個抗抖動的能力。當網絡質量不好產生丟包時,我們也需要一個抗丟包的能力。外網的質量波動比較大,也需要一種自適應的方式來動態調節發送的碼流,稱之爲流控,可以按一定的週期來檢測主被叫雙方接收的包量,來計算丟包率、延時和碼率等,用於來控制發送端的採樣率、發送的碼率和組包間隔;當時網絡質量不好時,我們可以把發送端的採樣率和碼率降低,減少發送的整體包量,進而減小網絡的擁堵。網絡質量好時,我們可以提高發送端的採樣率和碼率,增加發送的整體包量,會讓接收端有較好的語音質量。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"音視頻處理(這裏要重點說的是音頻),必然會涉及到語音的增強處理。語音進行採集後,會進行一些預處理。比如說主叫端在說話的時候離麥克風比較遠,造成採集的音量比較小,這樣接收端聽到聲音就會小。但是經過AGC處理後,可以把音量適當的調大,讓接收端聽到正常的聲音。還有回聲消除AEC用於消除聽到回聲情況,當噪聲比較大時,通過ANC把噪聲降下來,讓人說話的聲音突出,可以在接收端清晰聽見說話內容。下圖是常用的提高語音質量需要考慮的方面。","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/30/30ea71fbeac5aa3cc89c08ad2b225dd7.webp","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"02. 什麼是PSTN","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"PSTN,從字面意思來看就是公共交換電話網,是一種比較老的技術。雖然歷史較久,但電話現在依然是我們使用和應用場景最廣泛的一種實時語音通話方式。通常有着急的事情大家都會優先選擇電話的方式來溝通。座機或手機通過電話線和PBX相聯(程控交換機)然後通過物理線路,連到運營商公共專用網絡,進行語音流、信令流的傳輸,再傳輸到被叫用戶最近的PBX,通過電話線呼起被叫。被叫的手機響鈴,被叫就可以選擇接聽,手機的麥克風會採集對應的人聲,通過相同的交換機傳回來,這樣主被叫雙方就可以進行實時通話。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"PSTN一般都採用專線專網,它的缺點就是網絡利用率比較低。兩個電話用戶同時進行通話會獨佔一路物理線路,這路物理線路在那一刻就只供主被叫雙方使用,不像英特網一樣都是多種通話共享佔用。隨着技術的發展,PSTN也出現了一種新的方式,在PSTN網絡可以使用SIP_TRUNK的方式,把裏面的信令流和數據流傳到Internet上。處理信令的方式是採用標準的SIP協議,碼流採用標準的RTP協議來傳輸。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/5d/5d5333dfc35ea3f9affbc59dbfb3ef60.webp","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"03. 爲什麼要融合","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"主要原因是有較多的業務場景需要。","attrs":{}}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如在QQ討論組裏多個人想一起進行語音通話,但是他邀請的其中一個用戶可能是QQ離線的,這個離線用戶就無法加入進來了。","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"多人會議也類似,開會的場景一般都比較緊急,大家希望可以直接打個電話就可以把用戶接入到會議中進行討論。","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"另一個場景就是智能門禁,現在的智能門禁系統,簡單地來說類似一個Pad,使用Android操作系統,安裝了一個類似QQ或者實時音視頻的App,可以讓拜訪者跟業主進行交流。這種App在業主的手機上通常不會長期啓動,不像QQ或者微信那樣長期處於在線狀態。當這個App離線時,訪客拜訪業主,通過App就會找不到業主,此時如果可以通過門禁直接打電話,業主和拜訪者就可以相互進行語音通話了,隨後業主再通過電話的方式把門禁打開。","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"還有在各種網站上的客服電話,直接在網頁上點擊一下就可以打電話給客服人員,進行語音溝通。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}}]}],"attrs":{}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"要實現上面各種業務場景需求,就需要將實時音視頻VOIP和傳統的PSTN融合起來。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/38/38fa311304ceb954798504cdcf727c37.webp","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/12/12105de3df702762f47dd31ecdcde845.webp","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"01. 分析差異","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"首先我們要看一下兩者的差異。以QQ語音通話爲例,前面提到過,一個完整的音視頻處理要分很多步,音頻採集、預處理、編碼、網絡傳輸、解碼和播放等。在網絡傳輸協議上,QQ語音通話是使用自己的私有協議,而PSTN使用的是標準的SIP+RTP協議,這是運營商採用的國際標準協議。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"QQ支持的編碼有很多,有SILK、AAC、OPUS等,但對於PSTN,使用SIP_TRUNK方式對接的語音編碼,目前三大運營商,電信、聯通和移動,僅支持G711A、G711U、G729等編碼。RTC採樣率都是16K、48K,PSTN一般爲8K。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"組包間隔,語音數據包發送的時候需要以一定的時間間隔來週期進行發送,比如說像QQ支持20毫秒、40毫秒、60毫秒的間隔發送,PSTN基本上是20毫秒。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"語音質量,對於VOIP會有很多相應的語音的優化手段,但是PSTN是專用網絡,網絡質量相對高,丟包較少,優化的手段也比較少。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"RTC除了1對1絕大多數場景是支持多人,比如說純視頻、純語音通話可以支持客戶端混音和服務端混音,但是PSTN手機端基本上是1V1。多人會議是多個人,但是手機端是不支持同時接收多路碼進行混音的,必須要混好成一路後,才能下發給手機。顯然這些都是兩者之間的差異。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/da/da577b60d314b3a2da1586b150e02627.webp","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"02. 融合方法:尋找共性,適配差異","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"上面是差異的地方,有沒有相同的地方呢?PSTN經過長時間的發展,目前演進到了IMS網絡架構,可以把專用網絡的信令流和數據流通過SIP_TRUNK的方式在Internet上面傳輸,這就是一個相同的地方。這個地方存在的突破口,存在可以融合的點。剩下要對差異的部分進行適配,即對音頻碼流和信令協議進行適配。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們融合的方式的實現有兩種,第一種是讓QQ客戶端去適配PSTN的差異,第二種是讓PSTN去適配VOIP的差異。首先PSTN是國際通用的標準,讓它適應VOIP衆多的編碼和私有協議,那麼現在的手機設備肯定要更新升級,這顯然不大現實。另外一種就是讓QQ去適應PSTN的差異。QQ同樣有歷史包袱,他發展了那麼多年,如果支持RTP和SIP改動也很大,開發週期也是非常漫長的。即然這兩種方法都不行,我們就想到新增一箇中間模塊去分別適配VOIP和PSTN的差異。這個模塊我們稱之爲適配層,可以放到Internet上,讓VOIP和PSTN協議互轉和碼流互轉。適配層有兩個主要功能,一個是對信令的適配,還有一個是對碼流的適配。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/cc/ccddb9ec0ecc5e3c6d0b88f128a851df.webp","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"03. 最終系統架構圖","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/98/98f0debf14c322854ea3f6fbe62d94a3.webp","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"最上面一部分是實時音視頻對外提供的OpenSdk,主要是封裝了RTC一些基本操作步驟和能力,它目前支持安卓、IOS、windows、web SDK,基本上是全終端。客戶端信令發向後臺互動直播系統,首先經過信令處理模塊App,通過多個Info模塊進行機器調度分配。由於我們整個過程都是要動態自適應調整,會有一個流控模塊,主要用於通話過程中音頻質量的實時調節。最後信令會轉到一個信令適配模塊,我們稱之爲會控。而碼流的適配、編碼的轉換,需要另一個適配模塊混音。因爲手機端不具備多路混音的能力,所以我們必須在服務端進行混音,這樣將多人的碼流混成一路發給手機端,手機端就能聽到多個人的聲音了。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"上圖中下面的部分是進入PSTN網絡,會控把QQ私有協議轉換成內部私有協議,通過PSTN策略進行一系列的分配策略,再通過處理信令的sip_server將內部私有協議轉換成標準的SIP協議和運營商的SIP_SERVER相通,同理將對應的碼流通過混音和proxy轉成標準rtp碼流和運營商媒體Svr相通。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"重點說一下混音,從QQ的私有協議轉到標準的RTP協議還算比較容易,但編碼轉換就要複雜很多。因爲手機端不具備混音的能力,所以我們這部分不像VOIP客戶端可以客戶端混音,手機端必須要在服務端混好後才能下發一路碼流給手機端。我們是採用服務端混音,如有多個VOIP進行互相通話的時候會同時發多路音頻流,由外網傳輸到混音後臺,首先會選路操作。選路是指在多個說話的人裏面最多選幾路語音流來進行混音操作,比如說QQ語音通話最多選六路。主要原因,第一個是說話的人多了大家聽不清楚,第二個就是選擇的語音流路數越多越消耗服務器資源,這樣一臺服務器就支持不了多少人了。選路之後,就要進行解碼,解碼完再進行重採樣,進行混音和編碼,然後再通過Proxy進行傳輸。最後會傳輸到運營商的媒體SVR,進入到運營商網絡,通過用戶最近的基站下發到手機端,這樣就實現了手機端也可聽到多路語音的功能。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/d6/d61496a89570575d8ba2c35e527cf8ee.webp","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/01/0137217826f8238f91e9bff6ca6ad063.webp","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"01. 語音質量增強","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"語音通話中,提高語音質量是優化核心體驗較爲重要的一環。手機端的語音增強手段比較有限,因爲它在運營商的封閉專用網絡中,相對外網質量較好,少抖動和少丟包。但在VOIP端直接使用公網,所以要做的語音質量優化比較多。比如說語音採樣之後,會進行迴音消除和降噪。爲了避免抖動會引入jitterbuffer,jitterbuffer會緩存音頻包,它有一定大小,如果在緩存範圍外的丟包,則要通過PLC進行補包。還有爲了節省帶寬我們會做VAD,如果VOIP端長期不說話的時候,我們可以不發完整的靜音包,可以會發特殊的EOS包。網絡質量是隨時動態變化的,所以我們要進行自適應調節,以2秒爲一個單位來,實時統計一下當前網絡的延時、丟包、抖動等情況,綜合調節客戶端的採樣率和碼率。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/ba/ba754df4b83555bf265b7fd7bf37e272.webp","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"02. 優化語音延遲","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"實時音視頻,低延時是重中之重。在外網傳輸,延時大部分引入有很多是在媒體SVR的分配上面。如在不同運營商的延時會有10到25毫秒延時,而且不同的運營商某些城市可能會有丟包,不同的機房網絡延時差不多是20到35毫秒,如果直接外網,易抖動、質量不穩定。對於這些問題,我們可能通過調度分配來解決,我們儘量將媒體SVR分配到同一運營商,儘量分配到同機房。對於有條件的地方可以直接專線相連接。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/50/506c3d5e2f5c471f234b01542b86eac1.webp","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"03. 優化網絡丟包","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"抗網絡丟包有兩種方法,第一種是ARQ自動重傳。我們每一個媒體節點都是採用UDP來傳輸且每一個媒體節點都會緩存一定數量的音頻包,每個音頻包裏面會有一個序號,接收客戶端收包時會根據包中的序列號判斷是否是連續的,如果不是則有丟包,此時會去它的前一個媒體節點問一下,緩存中有沒有這個包,有的話就直接重發一次,沒有的話,它就再向前一個節點問一下,如果所有中間節點都沒有就會一直問到發送端,發送端再把這個包再傳一次。ARQ明顯缺點就是會增加延時。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"第二種是FEC,發送端在發音頻包的時候,可以多發幾個冗餘包。接收到如果發現音頻包丟了,而冗餘包沒有丟,則會嘗試使用冗餘包把音頻包恢復。增加FEC也是動態的,當網絡質量不好會多加一些冗餘包,反之則會少加一些。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/8b/8b373151de5f5fb92dc5aa5cebd54800.webp","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"04. 提高可用性","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"只要是大規模的應用或系統,這是必不可少的要解決的問題,解決這個問題簡單來說就兩個方面,第一個是增加冗餘資源,第二是實現自動切換。機器冗餘可以多運營商部署、多機房部署,多地部署,自動切換則是死機時可以自動切換、IDC異常時可以自動屏蔽出問題的IDC、自動屏蔽出問題的資源等方式。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/af/afd031fbb51d2788f4d65f94c3aec9e4.webp","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/5e/5e2de3f40ed2b2547568ee6d4d16acac.webp","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"綜上所述,融合系統的本質是一個尋找共性,適配差異的過程。本文給大家做融合類系統提供一個參考思路。如今這套融合系統已經上線公司內多個業務,目前整體服務穩定,當然還有很多需要優化的地方,如存在系統耦合模塊較多、整體複雜性較高、查找問題耗時長等問題。這提醒我們仍舊需要繼續努力,不斷優化和迭代,將整體系統做到更好。","attrs":{}}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章