導讀:2021年10月21日,「QCon 全球軟體開發大會」在上海舉辦,網易智企技術 VP 陳功作為出品人發起了「AI 時代下的融合通訊技術」專場,邀請到多位技術專家與大家一起分享相關技術話題。
從本期開始,我們會針對四個演講專題逐一進行介紹與分享,本期是我們的第一期,融合通訊技術趨勢和演進方向。
嘉賓介紹:曹佳俊,網易雲信資深伺服器開發工程師,畢業於中國科學院,碩士畢業後加入網易,負責網易雲信 IM/RTC 信令等業務的伺服器開發。專注於即時通訊、RTC 信令以及相關中介軟體等技術,是雲信開源專案 Camellia 的作者。
前言
近年來通訊技術呈現成熟的趨勢,與人工智慧和5G 緊密結合,在新冠疫情的催動下,已應用於各行各業中。定位在一站式融合通訊雲服務的網易雲信,為業務層面帶來了新的氣象。本次 QCon2021雲信專場將為大家帶來融合通訊技術的前沿探索和落地實踐。
本次分享的內容如下,首先介紹融合通訊的概念,其次介紹融合通訊的技術演進方向以及雲信在技術架構演進過程中做的一些技術探索,最後介紹網易雲信在融合通訊多行業場景下的落地實踐經驗。
融合通訊的概念
融合通訊的概念最早闡述為企業辦公場景下的統一通訊。統一通訊指的是傳統通訊技術(如簡訊、傳真、電子郵件等)和網際網路技術融合後產生的一種新的通訊方式,統一通訊的核心概念是指可以在任意時間和任意地點,通過任意的網路和任意的裝置獲取到我們想要的資訊,比如文字、圖片、聲音、視訊等等。隨著通訊技術的發展,融合通訊的概念也在不斷的擴充套件。目前已經逐漸形成了以 IM 和 RTC 為核心的,融合多種通訊方式的,內容非常豐富的概念。
對於融合通訊來說,它的核心概念當然是融合。對於融合,我們可以從兩個方面來理解。首先是業務的融合,對於一款應用來說,不管是娛樂社交也好或者是金融也好,業務邏輯的實現往往依賴一些底層的通訊技術的融合。其次是技術的融合,我們只有做好了技術的融合,打通底層的技術,這樣業務方才能夠更輕易更高效的通過我們融合通訊的技術去實現自己的業務邏輯。
融合通訊具體的內容包括哪些呢?從網易雲信或者融合通訊雲服務商的角度來說,融合通訊可以劃分為六個方面:
首先是業務場景。所謂的業務場景指的是,線上教育、音樂教學、企業辦公等場景。我們會提供各種各樣針對各行各業的一站式解決方案,用來降低客戶的接入成本。
其次是應用元件層。應用元件可以理解成對通用的場景化解決方案的進一步昇華。通用的業務場景比如說視訊會議等,網易雲信會提供從客戶端到伺服器的一站式完整的元件服務,通過遮蔽一些底層的技術細節,來降低客戶接入的成本,提升研發效率。
第三層是客戶端層。網易雲信提供了全平臺覆蓋的 SDK,並且我們的 SDK 致力於提供一致的功能以及一致的體驗。
第四層是服務層。我簡單劃分了幾個型別,包括即時通訊、RTC、直播、運營商能力等。對於服務模組來說這不是簡單的功能劃分,而是包含了深度融合的過程。
舉個例子,比如對於即時通訊和 RTC 來說,即時通訊給 RTC 提供了信令的能力;RTC 和直播點播的融合則帶來了互動直播、低延時直播這樣融合通訊的能力;再比如運營商能力和 RTC 能力的融合,通過底層能力的打通再結合即時通訊的能力,在音視訊呼叫場景下可以有效提高呼叫的成功率。
服務層之下是我們的核心能力層,這裡的核心能力層我特別提一下 AI 這部分,網易雲信組建了專門的 AI 演算法團隊來負責 AI 演算法在各個業務服務場景的落地。
以運營商裡面的呼叫中心為例,其中可能包含了智慧機器人,這依賴於底層 AI 的 NLP 演算法能力;再比如說今年網易雲信推出了重磅產品安全通,安全通是一個面向融合通訊的一站式內容安全解決方案,通過安全通,我們可以在享受融合通訊技術便利的同時,加上一道內容安全的保障。
最後是基礎設施。其中包括網易和網易雲信自研的元件和平臺,同時也包括開源專案的引入,此外對於一些底層的通用能力,網易雲信也在計劃做一些開源來回饋技術社群,後續可以關注我們的微信公眾號、技術部落格、技術社群等,我們會第一時間釋出相關資訊。
融合通訊的技術演進方向
本次分享的核心內容是融合通訊的技術演進方向。單獨看這個話題有點大,我這裡列了一些關鍵詞,比如5G、AI 的技術發展顯然帶動了融合通訊技術進一步的發展;比如物聯網技術,隨著智慧硬體的興起,物聯網成為了融合通訊新的技術舞臺。而本次分享將圍繞全球化和單元化這兩個關鍵詞,介紹網易雲信在融合通訊技術架構演進過程中的一些技術探索。
為什麼要做單元化和全球化
對於這個問題,這裡列了三個關鍵詞,可以部分解答這個問題。
首先是容量。隨著融合通訊整個市場規模的擴大,網易雲信的規模也在持續增長,隨著系統規模的不斷擴大,單一的機房甚至單一的城市都可能成為限制系統水平擴充套件能力的瓶頸,對於該問題,單元化和全球化是一個很好的解決方法。
其次是風險。同樣隨著系統規模的不斷擴大,覆蓋的終端覆蓋的群體越來越大,如果我們這個系統產生任意的抖動,它的影響是非常大的。比如今年國慶期間,不知道大家有沒有關注,facebook 旗下的業務全站當機了六小時以上,影響非常大。對於這種全域性性的風險,單元化是很好的策略,可以避免單點故障,而且能防止故障蔓延到整個系統。
最後是質量。對於通訊服務來說,能否更快的送達,是我們衡量一個通訊服務質量的重要的指標之一。終端和終端之間的通訊,如果是跨國的或者距離很遙遠的,物理距離實際上是一個很難克服的問題。對於這個問題,單元化提供了一種非常好的解決方案,既然無法克服,那就離你更近一點。
說完痛點,那單元化和全球化具體有哪些優勢呢?
提升系統整體的承載能力。在單元化的架構下,多單元的水平擴充套件能力將有效提升系統整體的承載能力。
能夠分散風險。單元化架構的設計原則之一就是單元之間要保持邏輯的獨立甚至是物理的隔離。單元化的架構,可以有效的避免單點風險,並且可以避免風險在整個系統裡面的蔓延,假如這個單元當機了,那麼把它切走就可以了。
異地容災能力。在單元化的架構下,我們通過單元互備的方式,提供了異地容災能力,從而提升了服務的整體可用性。
優化最後一公里。只有單元化的架構才能做到真正的就近接入。
單元化和全球化的前置條件
具體要怎麼做單元化、全球化的通訊服務,在講這個問題之前,我先講一下我認為很關鍵的兩個點,或者說是做好單元化、全球化的前置條件。
首先是傳輸通訊網。在一個單元化的架構下,我們遍佈全球的邊緣節點以及布在各大洲的資料中心,它們之間的網路傳輸問題將直接影響到整個通訊網路的傳輸質量。
其次是服務質量監控系統。在一個單元化全球化的通訊系統裡面,終端遍佈全球並且是海量的。伺服器也是遍佈全球,如何去搜集來自海量終端以及世界各地服務節點的資料,對監控和改善我們整個服務的質量非常重要。
傳輸網路
關於傳輸網路,網易雲信構建了一個全球實時傳輸網路——WE-CAN。WE-CAN 是一個架設在公共網際網路上的,通過對各種資源智慧排程來實現提高資料傳輸質量、降低資料傳輸成本目標的複雜網路系統。下圖是 WE-CAN 簡單的架構圖。
為了讓大家理解它的工作原理,舉一個簡單的例子。圖上的左邊是一個終端,右邊也是一個終端,比如從上海發到新加坡,假設需要傳輸一個報文,它的傳輸路徑是怎麼樣的呢?
首先客戶端需要通過統一排程系統 dispatcher 去獲取到邊緣加速節點,我們叫他 edge,edge 獲取到報文後,會傳輸給同機房或者同一個單元內的 delay 節點,隨後經過一條或者多條的路由到達新加坡對端的邊緣 edge 節點,最終再傳輸給目標終端。
整個傳輸過程可以分為兩部分,一部分是終端到 edge,我們叫最後一公里。主要是通過前面說的排程系統,配合 edge 的心跳負載資訊來實現最佳接入;第二部分是網內傳輸,也就是 relay 節點之間的智慧路由,這個主要依賴於 contrller 服務,該服務會收集 relay 節點間的網路探測資料,形成一份動態的智慧路由表。
WE-CAN的設計原則和目標可以歸納成幾句話:
Faster than CDN
Checker than SD-WAN
More versatile than RTN
前兩個比較好理解,最後一個是什麼意思呢,什麼叫多功能,這其實也是 WE-CAN 區別於一般的 RTN 網路的地方,WE-CAN 大網不僅可以傳輸流媒體的媒體資料,同時還可以提供一種可靠傳輸的模式,我們叫 msgbus。所謂的可靠傳輸,首先是保證訊息必達,其次保證訊息傳遞的有序性,msgbus 已經廣泛應用在雲信的訊息、資料、信令等的傳輸。
針對單元化和全球化場景,WE-CAN 解決了兩個關鍵的問題,一個是網路加速和動態路由的問題,通過 WE-CAN 內部的智慧節點排程,可以幫助我們選擇節點和節點之間,就是邊緣節點和中心機房之間的邊緣路徑,並且可以對網路上的單點故障做一個自動避障功能。
還有就是最後一公里的問題,WE-CAN 通過靜態配置以及參考動態的負載資訊的上報來實現就近接入,提高服務的接入質量,此外在一些特殊場景下,比如一個 RTC 的大型房間,排程系統還會有節點匯聚的功能來減少跨節點的網路傳輸,從而減少成本。
服務質量監控系統
在全球化的架構下,建設服務質量監控系統時有一個點很重要,也可以說是難點,就是如何去實時蒐集遍佈全世界的終端和伺服器的資料。下圖是整個架構簡圖。
左邊展示的是資料來源,一類是 SDK,還有我們的伺服器,包括邊緣節點也包括異地的資料中心。
對於 SDK 來說我們會根據資料的型別和特點的不同,選擇 http 或者 websocket 協議進行資料的上報,伺服器主要是通過日誌+agent 的方式進行採集,隨後通過 websocket 協議進行上報。
對於資料來源來說,在上報之前會先請求排程系統獲取到邊緣收集叢集的接入地址,資料到達邊緣收集叢集后,再通過 WE-CAN 的 msgbus 把資料路由到中心叢集,隨後經過資料清洗,分流到不同的資料處理單元。比如進入我們的指標計算系統,實時計算相關資料的指標,並對接到我們的監控報警系統;其他的還包括一些離線和線上的系統進行資料分析和問題定位。
通過服務質量監控系統,我們可以實時的瞭解到我們整個通訊系統的健康狀態,就和跑車的儀表盤一樣,可以讓我們很直觀的瞭解到系統執行狀態,什麼時候該加油,什麼時候該轉彎,都能一目瞭然。
IM/RTC 伺服器單元化/全球化方案
說完了單元化和全球化的兩大前置條件,下面介紹我們具體怎麼構建一個單元化和全球化的系統,我會分別介紹 RTC 和 IM 兩類通訊系統的單元化/全球化的架構。
RTC伺服器單元化
首先是 RTC 伺服器的單元化,我會通過單元化部署架構和容災方案兩部分展開。
單元化部署架構
這是一個 RTC 伺服器架構的簡圖,對於它的部署架構,右邊這三個關鍵詞可以非常形象的描述它的整體設計理念。
首先是分層解耦。整個 RTC 伺服器可以劃分成三個層次,首先是信令接入層,這是整個 RTC 伺服器的入口。其次是媒體信令層,這層是 RTC 伺服器的控制中心,會和底下的媒體服務層進行大量的信令互動。
對於每個服務層來說,可以看到都是支援多單元的部署的。對於信令接入層來說,它的主要功能包括客戶端請求的鑑權,以及一些全域性或者說應用級別的的配置的下發等,信令接入層的單元劃分是應用級別的,也就是說每個應用只會被一個信令接入單元處理,信令接入層收到請求後,會根據請求的一些引數資訊(如客戶端 ip 等)將請求轉發給某個合適的媒體信令單元,媒體信令單元是以房間維度做的單元劃分,主要功能包括房間管理、流管理、排程分配等,每個媒體信令單元有都一個媒體單元一一對應,對於媒體來說,各個媒體單元邏輯獨立,但是物理資源是共享的。
其次是資料的隔離和同步。對於媒體信令和媒體服務來說,單元都是以房間維度做的資料隔離,而對於信令接入層來說,因為是請求的入口,還涉及到資料的同步和轉發。
資料的同步包括2種型別,首先是全域性和應用級別的一些配置資訊的同步,採用了一寫多讀的方式,保證各個單元間資料的一致性;其次是房間相關資料的同步,主要是房間的一些鑑權資訊以及每個房間到媒體信令單元的一一對映關係,這些資料是兩兩同步,每個單元都有一個邏輯上的備份單元;
此外,信令接入層還涉及到資料的轉發,通過請求轉發來保證每個應用的請求只會被一個單元處理。
最後是單元的互備。可以看到,每個服務層均支援單元化的部署,通過單元間的互備,可以避免單點的故障影響全域性。
單元化容災方案
對於 RTC 伺服器,包括三個層次的容災,分別是信令層、媒體層和鏈路災害。
信令層可以細分為信令接入層和媒體信令層。對於媒體信令層來說,因為它是房間維度的單元劃分,因此在某個單元不可用時,信令接入層會直接遮蔽到該單元,所有的新請求都不再轉發給該單元,從而快速恢復;
對於信令接入層來說,每個單元都有邏輯上的備份單元,當一個單元不可用時,通過切換請求入口(包括閘道器配置、dns 等),並且配合資料的變更來把切換資訊快速擴散給所有單元,從而進行單元的災備切換;
對於媒體服務層來說,每個媒體伺服器都會定時上報心跳資訊給媒體信令服務,當出現某個節點故障時,媒體信令服務會快速的檢測到並自動下線該節點。
最後是鏈路的災備,對於一個通訊系統來說,你的所有服務節點可能都沒問題,但是網路鏈路掛了,對於鏈路故障的情況,我們主要是通過 WE-CAN 大網的智慧路由來感知和處理這種 case。
舉個實際的例子,我們有一個機房,它所在的省份的某個運營商的骨幹網故障了,導致所有外地的該運營商的機房和終端都無法連線到該機房,在 WE-CAN 之前這可能就是一個大事故,但是 WE-CAN 的智慧路由自動感知到了這種情況,並通過其他三線機房的路由,通過其他運營商的線路繞回來,避免了事故的發生。
IM伺服器單元化
說完了 RTC,接下來我們聊聊 IM,不同於 RTC,IM 更加依賴資料中心,因此其單元化的架構也會有一些不同,我會分三部分展開,首先是如何構建一個全球的即時通訊網路,其次是在全球通訊網路基礎如何支援多資料中心,最後是如何進行災備和冗餘。
全球通訊網路
在 IM 全球通訊網路裡,我們的服務可以劃分為兩類,一類是邊緣節點,上面主要部署了我們的長連線伺服器,我們叫 link,link 可以部署在多個單元,通過排程系統就近分配;另一類是我們的資料中心,承載了即時通訊的核心能力。
邊緣節點和資料中心通過 WE-CAN 大網互聯,當 link 伺服器收到來自客戶端的一個請求後,會通過 WE-CAN 的 msgbus 路由到中心機房的 bridge 叢集,隨後轉發給我們的協議路由服務,最後路由到我們的服務叢集,包括訊息服務、推送服務等等。
這樣一個架構有什麼好處呢?首先通過長連線的前置部署,可以有效的改善接入的質量;其次是通過廣播訊息下推給邊緣 link 節點,可以降低中心機房的頻寬壓力,提升系統的水平擴充套件能力,這個在超大型的聊天室場景或者超大群場景中,效果特別明顯。
多資料中心支援
在這樣一個全球即時通訊網路的架構下怎麼支援多資料中心?
在這個架構裡面,為了支援多資料中心的要求,我們抽離出了兩個專門的服務,其中一個租戶服務,內容主要是一些全域性的配置資訊、應用級別的配置資訊和開關等,每個資料中心以及每個邊緣機房都會部署租戶服務,當一個客戶端請求到達某個 link 節點時,link 服務會訪問就近的租戶服務,獲取到該請求所屬的應用歸屬的單元,隨後通過 WE-CAN 的 msgbus 的 topic 機制,來路由到正確的資料中心;
還有一個是 lbs 服務,lbs 服務同樣會多機房部署,並且通過統一的配置資訊來進行統一資源的分配和排程。
在多資料中心的架構裡面,有一個很重要的點是單元隔離。
可以從兩方面理解,首先每個應用都會歸屬於一個單元,也就是說一個應用的請求只會路由到某一個資料中心,所以各個資料中心的資料是歸屬於不同的應用的,做到了資料的隔離。
還有一個是資料的全域性唯一,以發訊息為例,每條訊息都有一個全域性唯一的訊息 id,這個唯一性不僅僅是單個資料中心內部的唯一,還需要保證全域性的唯一,這樣的好處是未來進行單元的拆分和合並時不會產生資料的衝突。
災備和冗餘
在多資料中心的架構下,如何實現災備和冗餘呢。最關鍵的是資料的同步,在我們的架構裡,每個應用都歸屬於一個資料中心,而實際上,每個應用還有一個邏輯上的備份單元,主備單元之間會有一個資料的同步,這樣才可以進行切換。
資料同步我們採用了兩種策略,根據資料的型別、特點,採取不同的策略。首先是雙寫同步,這個主要是處理一些有時效性的資料,比如線上狀態、漫遊、快取等等,雙寫的邏輯是通過 proxy 服務來進行的,以便減少對業務的侵入,對於一個寫請求會被 proxy 轉發給 msgbus,最終路由到備份單元進行雙寫同步;
其次,是針對持久化資料的同步,主要通過 dts 訂閱 binlog 的方式,進行跨單元的複製,為了減少延遲,可以看到 binlog 的訂閱是異地的,而同步操作則是在目標單元內部進行的。
目前我們的同步都是單向同步配合自動化的指令碼進行切換,後續會改造成雙向同步的模式,那樣將會進一步降低整個運維操作的成本和複雜度。
IM/RTC 伺服器單元化架構的好處
整個網易雲信的 IM 和 RTC 伺服器單元化的架構具體有哪些好處?
優化最後一公里。對於 RTC 來說,不管是信令還是媒體,全流程的就近接入,將顯著的降低延遲,比如可以提升首屏的速度;對於 IM 來說,不管是接入節點還是資料中心,單元化方案下,將可以更靠近終端,從而有效降低訊息的延遲。
提升可用性。單元化/全球化的架構,可以有效的提升整個通訊網路應對機房,甚至城市級別的抗風險能力。
資料隔離和風險隔離。各單元間邏輯獨立,物理隔離,可以降低風險,避免故障蔓延;特別的,單元間資料的隔離,某些情況下還可以避免政策風險。
融合通訊的落地實踐經驗
說完了單元化/全球化的技術架構,那麼有哪些落地實踐呢?
以大型直播活動解決方案為例,該方案融合了多種通訊方式,在單元化的架構下,直播服務通過多機房的部署,確保了直播穩定高可用;對於連麥互動的場景,通過全球化的節點可以做到全球多地實時互動;而對於彈幕互動,在單元化的架構下,通過分散接入節點,雲信最高可以支撐千萬級的線上。
下圖展示的是去年8月底的活動,這網易雲音樂 TFBOYS 七週年演唱會,雲信提供了底層的通訊能力,最高同時線上人數達78.6萬,打破線上付費演唱會吉尼斯記錄,可以說充分驗證了單元化/全球化架構的水平擴充套件能力和穩定性。
下圖是一個社交場景的案例,這是某款出海社交 app,通過就近單元的接入,有效的提升了通訊服務的質量和穩定性。
IM 訊息方面,相比於連線中心機房,訊息延遲降低30%,而 RTC 點對點呼叫場景下的首屏速度也提升了20%以上。
總結和展望
隨著融合通訊技術不斷髮展,市場也在不斷的擴大。作為一個融合通訊雲服務商,全球化和單元化對於雲信來說是一個必經之路,網易雲信也將會持續打磨技術,更好的服務我們的客戶。
融合通訊的技術演進方向絕不只是單元化和全球化,AI、5G、物聯網等技術的發展都是融合通訊的技術演進的重要方向。
以上就是今天分享的全部內容,謝謝大家!