RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

聚焦 | 高并發(fā)場景下分布式實時信令系統(tǒng)的架構(gòu)實踐

BYXG_shengwang ? 來源:YXQ ? 2019-06-20 17:00 ? 次閱讀

在5 月 27 日舉行的 Qcon 廣州站上,聲網(wǎng) Agora 資深技術(shù)架構(gòu)師吉奇 以《高并發(fā)場景下分布式實時信令系統(tǒng)的架構(gòu)實踐》作為話題,分享了 RTM SDK 背后的架構(gòu)設(shè)計經(jīng)驗。

以下為演講實錄:

大家好!我叫吉奇,來自聲網(wǎng)?,F(xiàn)在負責聲網(wǎng)RTM 實時信令云服務后臺及SDK技術(shù)架構(gòu)設(shè)計。這次演講會按照RTM的系統(tǒng)架構(gòu)上的分布或子系統(tǒng)的層級關(guān)系來展開。

首先,RTM 是一個通用的消息系統(tǒng),主要是為了解決實時場景下信令的低延遲和高并發(fā)問題。我們聲網(wǎng)是業(yè)務遍布全球的平臺,因此在所有的后臺設(shè)計中,把分區(qū)作為一個比較重要的事情來看。目前 RTM 有幾個大區(qū)域,有美洲、亞洲、東南亞、中國大陸,還有歐洲、非洲幾個大區(qū)。區(qū)與區(qū)之間相對獨立,每個區(qū)會有跨區(qū)傳輸網(wǎng)絡(luò)。每個區(qū)之間由三個子系統(tǒng)組成,首先是消息核心(Message Core),還有事件中心(Event Center),最后是應用服務(Application Services)。我會分別講一下各個子系統(tǒng)內(nèi)部的架構(gòu)實現(xiàn),即消息核心、事件中心、應用服務和跨區(qū)網(wǎng)絡(luò)。

消息核心(Message Core)

首先是消息核心,它是目前成熟度最高,也是最復雜的子系統(tǒng)。在該系統(tǒng)里面有幾個主要的組件,首先有接入服務器、點對點消息轉(zhuǎn)發(fā)服務、頻道消息的轉(zhuǎn)發(fā)服務、簡單的狀態(tài)管理(包括用戶狀態(tài)和頻道狀態(tài)),還有頻道分布狀態(tài)服務器。

在消息核心,所有的服務都是分布式,沒有一個單點或者中心式的情況,因此可以保證高可用,并且性能方面可以支持高吞吐量和低延遲Messaging Core 有一個特點,具有非常大的擴展性,但是它的問題是只支持基本核心的功能,剩下的都要放在其它子系統(tǒng)中。

分布式的信息核心有幾個優(yōu)勢特性:

?完全排除單點故障

?接近100%可用

?端到端延遲 < 100ms

?任何節(jié)點都可水平擴展

?支持數(shù)百萬人同頻道(無理論上限)

?大型活動中支持數(shù)百萬QPS消息下發(fā)

?核心功能超高響應

所謂核心功能,目前消息核心支持的功能是點對點消息、頻道消息,可以加入頻道、退出頻道。用戶也可以同時加入多個頻道,使用一些頻道管理的功能,比如獲取用戶屬性、頻道狀態(tài),能查詢頻道中有多少人,其他用戶是否在線等基本功能。

在此,以點對點消息為例,和大家分享一下擴展性是怎么樣做的。首先 SDK 登錄系統(tǒng)的時候,會通過 DNS 來訪問我們的 AP 服務,AP 知道附近的邊緣節(jié)點 R 的地址,會根據(jù)當前的客戶端的地理分布,包括邊緣節(jié)點的負載情況來給 SDK 回一組地址。SDK 在拿到地址之后,可以登錄連接邊緣節(jié)點,然后發(fā)消息。這些消息到達邊緣節(jié)點后會投遞給本區(qū)的點對點消息轉(zhuǎn)發(fā)節(jié)點 F。F 知道本區(qū)內(nèi)所有用戶登錄在哪個邊緣節(jié)點,這是由本區(qū)所有邊緣節(jié)點 R 上報給轉(zhuǎn)發(fā)節(jié)點 F 的。圖中的 U 是用戶在線狀態(tài)服務器,那么一個用戶給另外的用戶發(fā)消息,有三種情況,第一種情況,對端在線并且在同一個區(qū)里面,F(xiàn) 可以直接投遞;第二種情況對端在線但在別的區(qū)里面;第三種情況對端不在線。在后兩種情況中,消息轉(zhuǎn)發(fā)服務器 F 不知道該用戶的信息,也不知道在哪個節(jié)點上。這時候就可以通過 U 來獲取這些用戶狀態(tài),因為 U 知道全網(wǎng)跨區(qū)情況下的用戶生命周期,也知道這個用戶是否在線,F(xiàn) 去問 U 是否在線,如果在線在哪個區(qū)里面,可以通過跨區(qū)投入到別的用戶。

這里的可擴展體現(xiàn)在哪里呢?首先,所有的節(jié)點都是可以水平擴展的,隨著業(yè)務量增長,可以增加部署。邊緣節(jié)點是可以隨意增加的,而核心節(jié)點 F 和 U 不能做任意的水平擴展,因為他們保留了一定的狀態(tài),我們用了一個一致性哈希的分片方法,所以把所有用戶的賬號哈希之后產(chǎn)生一個 32 位的隨機數(shù),想象把這些數(shù)放到一個環(huán)上,每個服務器各自產(chǎn)生一組隨機數(shù),在環(huán)上均勻分布。這樣所有的消息會被映射到比自己的哈希值小的那一個服務器上面。所有的節(jié)點的 partition 都是可以動態(tài)地增加和減少的。假如說有一個核心服務器故障或者下架了,那么它可以重新分布到別的服務器上,實際上我們地消息核心中除了邊緣節(jié)點R之外還有十幾種核心節(jié)點,它們都是做了分片的。這就是所謂的可擴展性。

高可用怎么樣做呢?首先如上圖所示介紹一下頻道消息簡單的流程。假定邊緣服務器收到用戶的頻道消息,會把該消息投遞給 F,F(xiàn) 是點對點消息的轉(zhuǎn)發(fā)服務器,它看到是頻道消息的話會自動拋給 D,D 專門負責頻道消息分發(fā),D 采用是級聯(lián)的模式,每一個區(qū)都有一組總的頻道消息分發(fā)服務器,在每個數(shù)據(jù)中心會有一組機房級別的代理。區(qū)域級根服務器發(fā)消息到機房級別的代理服務器,機房級服務器往該機房所有的邊緣節(jié)點 R 轉(zhuǎn)發(fā),這樣可以保證在超大頻道下面的性能?,F(xiàn)在有一個問題,之前我說了 U 是保存用戶的生命周期的,而頻道的生命周期與用戶不一樣,頻道不是一個特定的個體。比如說用戶要么在中國或美國,不可能同時在中國和美國,但頻道可以。尤其當頻道比較大的時候,分布會非常廣,很有可能是跨區(qū)頻道,甚至在中國、美國、歐洲都有用戶處于同一頻道。那么你該怎樣獲取某頻道的用戶分布呢?我們用頻道分布服務器 O 來處理。所有的 R 都會在本地頻道創(chuàng)建、銷毀的時候,把該事件通知給 O。O 把頻道分布的信息告訴頻道消息轉(zhuǎn)發(fā)服務 D,D 會從中獲得兩個信息,第一個信息是對于某頻道來說,在本區(qū)內(nèi)該頻道的用戶分布在哪幾個邊緣服務器上,第二個信息是可以知道該頻道是否跨區(qū),如果跨區(qū)的話,又是哪幾個區(qū)域。D 通過第一個信息可以判斷在本區(qū)投遞給哪些用戶,通過第二信息可以知道需要通過跨區(qū)傳輸網(wǎng)絡(luò)投遞給哪些別的區(qū)域的 D,讓它們在別的區(qū)域來負責下發(fā)。

在這里高可用主要體現(xiàn)在 O 是對等部署的。我們每一條消息或者每一次狀態(tài)改變或者每一個查詢請求都會有一個全局唯一的 ID,這個 ID 由兩部分組成,第一部分保證其唯一性,第二部分保證在某一個 session 之內(nèi)前后的請求有一個單調(diào)遞增的大小關(guān)系。這樣的話,從多臺對等部署的 O 同步給 D 的頻道分布信息,就相當于要保證一個單一來源但多路徑的信息同步的一致性問題,我們是可以通過這個 ID 來做到版本控制和除重從而保證一致的。當然對等部署只是其中一個手段,還有很多別的模式用到不同的服務上面,比如事件中心的高可用就是由雙數(shù)據(jù)中心主備切換來保證的。但消息核心中的服務一般都是采用的比較激進的對等部署的方式,這樣的好處是任何一個服務器掛了都不會有切換的事件,保證服務 100% 可用。

事件中心(Event Center)

Messaging Core 下面是 Event Center。就像我在開頭說到的,Messaging Core 有一個限制,它是靠多重冗余和相對激進的策略來保證低延遲和高可靠的系統(tǒng),因此很多擴展的功能沒有辦法做,所以會通過 Event Center 來支持這些擴展功能。

舉個例子,比如用戶屬性是在消息核心中完成的,而頻道屬性在消息核心中就做不了。因為頻道屬性和用戶屬性不一樣的地方在于,對于某一個用戶,他的用戶屬性只有他自己能夠編輯,他是該屬性的主人,由該用戶的客戶端來保證屬性的一致性。所以就算在服務端有多重冗余的情況下,該屬性也可以達到最終一致。但頻道屬性不同。頻道里可能同時有多個人在同時編輯頻道屬性,也可能同時有多個人在讀該屬性,怎樣達到一致性?這里就需要對頻道消息的編輯操作有一個統(tǒng)一的來源。但這個來源又不能是單點,否則很容易出故障也很容易成為瓶頸。

因此我們決定將所有的事件,包括狀態(tài)改變、消息的投遞都統(tǒng)一寫到 Event Center 里面。Event Center 分為兩個部分,Event Storage 和 Event Queue。我們的實現(xiàn)原則是傳輸與狀態(tài)隔離,數(shù)據(jù)與索引隔離。傳輸是 Messaging Core 和跨區(qū)傳輸網(wǎng)絡(luò)來負責,狀態(tài)是存在 Event Center,而 Application Services 是消費的狀態(tài),這樣可以做到傳輸與狀態(tài)的隔離。

那什么叫數(shù)據(jù)與索引隔離呢?對于所有的事件來說我們都會把它的 meta data,或者叫事件的 header 放到 Event Queue 里,這樣消費者去消費事件隊列的話就會很快,而事件的內(nèi)容本身則放在 Event Storage。我之前說過對于 RTM 的所有消息、事件、查詢都有一個ID,這樣的話就能建立一個事件 Header - 事件ID - 事件Body 之間的映射。消費者可以通過 Event Queue 建立對事件 Header 的索引,通過這個索引來做各種業(yè)務邏輯,然后再通過 ID 來找到對應的事件 Body。比如對于歷史消息的條件查詢就是這么做的。在這種模式下我們可以做到比如查詢當前在線的所有用戶里屬性屬性滿足 "gender:female","age:24" 的用戶。

應用服務(Application Services)

Application Services 是一個微服務的架構(gòu),在 Event Center 的支持下可以支持很多的業(yè)務邏輯。還包括實時的監(jiān)控、計費、問題調(diào)查、分析等。它的好處是易于開發(fā),我們通過 Event Center 把傳輸和事件解耦了,讓我們可以更容易地實現(xiàn)更多的功能。目前已經(jīng)落地的功能包括頻道屬性和歷史消息,還有很多其他的功能在開發(fā)中。

下面講一下跨區(qū)傳輸網(wǎng)絡(luò),它負責所有區(qū)域到區(qū)域之間的通信。我們有去中心化地實時路由計算策略,會根據(jù)延遲和負載來動態(tài)挑選跨區(qū)路由。實際上你發(fā)現(xiàn)在很多場景下面,跨境傳輸是最難的問題,尤其是在教育場景下。例如,老師在東南亞某個地方,學生在國內(nèi),他們之間建立連接、收發(fā)一些消息的過程中,穩(wěn)定性和到達率會遇到很多問題。聲網(wǎng)全球有 200 多個數(shù)據(jù)中心,我們通過智能路由來進行實時傳輸,比如中國到菲律賓,當前網(wǎng)絡(luò)不好的時候,我們可能會通過新加坡進行中轉(zhuǎn),如果新加坡到菲律賓好但是到國內(nèi)不好,我們會也許會通過國內(nèi)某個機房先中轉(zhuǎn)到新加坡。RTM SDK 今年上線后,從運營數(shù)據(jù)來看高峰期的跨洋平均 RTT 是 250ms,該數(shù)據(jù)已經(jīng)比較接近實際網(wǎng)絡(luò)傳輸延遲。

如上圖所示是簡化版的跨區(qū)傳輸網(wǎng)絡(luò),這個算法有點類似于 BGP 算法。自治域與自治域之間全連接,每個節(jié)點都有自己的路由表,每個節(jié)點會定期廣播自己的路由表到別的節(jié)點。比如 A 知道到自己到 B、C、D 的延遲是多少,一輪廣播之后 B、C、D 就會知道自己如果通過 A,到其他節(jié)點的延遲會有多少。各節(jié)點會選擇延時較短的路線傳輸。當然,實際策略肯定不會這么簡單,因為如果所有節(jié)點都采用相同策略,流量可能會匯集到某一些節(jié)點上去,在流量高峰期時會對這些節(jié)點造成沖擊。因此我們有一套很復雜的策略來進行負載均衡。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 信令
    +關(guān)注

    關(guān)注

    0

    文章

    40

    瀏覽量

    14176
  • 架構(gòu)
    +關(guān)注

    關(guān)注

    1

    文章

    513

    瀏覽量

    25468

原文標題:高并發(fā)場景下分布式實時信令系統(tǒng)的架構(gòu)實踐

文章出處:【微信號:shengwang-agora,微信公眾號:聲網(wǎng)Agora】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    輸電線路分布式故障定位系統(tǒng)的智能化發(fā)展與創(chuàng)新實踐

    TLKS-PMG-DSC輸電線路分布式故障定位系統(tǒng)。該系統(tǒng)采用分布式傳感器技術(shù),實現(xiàn)對輸電線路的全面實時監(jiān)控,能夠在故障發(fā)生時迅速鎖定故障位
    的頭像 發(fā)表于 11-29 10:51 ?192次閱讀
    輸電線路<b class='flag-5'>分布式</b>故障定位<b class='flag-5'>系統(tǒng)</b>的智能化發(fā)展與創(chuàng)新<b class='flag-5'>實踐</b>

    測試儀器的技術(shù)原理和應用場景

    過程中,測試儀器用于驗證系統(tǒng)在不同的環(huán)境的性能和功能。例如,測試
    發(fā)表于 10-31 14:45

    并發(fā)物聯(lián)網(wǎng)云平臺是什么

    來看,并發(fā)物聯(lián)網(wǎng)云平臺需要具備高效的處理能力和優(yōu)秀的擴展性,以應對大量的并發(fā)請求。這通常需要采用分布式架構(gòu),比如微服務
    的頭像 發(fā)表于 08-13 13:50 ?248次閱讀

    分布式光纖測溫系統(tǒng)DTS

    隨著城市用電量的持續(xù)增長,電纜負荷日益加重,電纜故障頻發(fā)成為一個不容忽視的問題。傳統(tǒng)的電纜監(jiān)測手段已經(jīng)無法滿足對電纜狀態(tài)實時、精準監(jiān)控的需求,因此部分供電公司采用鼎分布式光纖測溫系統(tǒng)
    的頭像 發(fā)表于 06-27 17:18 ?549次閱讀

    鴻蒙ArkTS聲明開發(fā):跨平臺支持列表【分布式遷移標識】 通用屬性

    組件的分布式遷移標識,指明了該組件在分布式遷移場景可以將特定狀態(tài)恢復到對端設(shè)備。
    的頭像 發(fā)表于 06-07 21:15 ?390次閱讀

    分布式智慧終端在金融行業(yè)安全監(jiān)管的應用實踐

    訊維分布式智慧終端在金融行業(yè)安全監(jiān)管方面的應用實踐,展現(xiàn)出了其在保障金融安全、提升監(jiān)管效率方面的顯著優(yōu)勢。以下是對其應用實踐的詳細分析: 一、全面安全監(jiān)管與風險預警 訊維分布式智慧終端
    的頭像 發(fā)表于 04-08 15:30 ?296次閱讀

    分布式智慧終端在金融行業(yè)安全監(jiān)管的應用實踐

    訊維分布式智慧終端在金融行業(yè)安全監(jiān)管方面的應用實踐,展現(xiàn)出了其在保障金融安全、提升監(jiān)管效率方面的顯著優(yōu)勢。以下是對其應用實踐的詳細分析: 一、全面安全監(jiān)管與風險預警 訊維分布式智慧終端
    的頭像 發(fā)表于 04-07 15:33 ?335次閱讀

    基于分布式運維管理平臺的智慧城市運維實踐

    基于分布式運維管理平臺的智慧城市運維實踐是一個涉及多個層面和維度的復雜過程。下面將從幾個關(guān)鍵方面對其實踐進行概述: 首先,智慧城市運維的核心在于實現(xiàn)對城市各個系統(tǒng)和服務的全面感知、智能
    的頭像 發(fā)表于 03-26 16:12 ?515次閱讀

    分布式系統(tǒng)在交通監(jiān)控工程中的創(chuàng)新應用案例

    應用,為交通管理帶來了革命性的改變。 在某大型城市的交通監(jiān)控工程中,訊維分布式系統(tǒng)成功應用,實現(xiàn)了對全市交通監(jiān)控設(shè)備的統(tǒng)一接入和管理。通過該系統(tǒng)分布式
    的頭像 發(fā)表于 03-18 16:14 ?502次閱讀

    分布式大屏控制系統(tǒng)對網(wǎng)絡(luò)環(huán)境的要求

    數(shù)據(jù),因此需要具備帶寬的網(wǎng)絡(luò)環(huán)境。足夠的帶寬可以確保信號傳輸?shù)牧鲿承院?b class='flag-5'>實時性,避免數(shù)據(jù)擁堵和延遲。通常情況,系統(tǒng)需要千兆級別或更高的帶寬。 穩(wěn)定性:由于
    的頭像 發(fā)表于 01-29 14:52 ?573次閱讀

    分布式大屏控制系統(tǒng)的應用場景

    分布式大屏控制系統(tǒng)具有廣泛的應用場景,主要涉及以下幾個方面: 監(jiān)控指揮中心:如交通指揮中心、電力調(diào)度中心、應急指揮中心等,用于實時監(jiān)控、調(diào)度和指揮,保證
    的頭像 發(fā)表于 01-29 14:25 ?738次閱讀

    分布式無紙化交互系統(tǒng)的應用場景:企業(yè)、教育、政府

    分布式無紙化交互系統(tǒng)的應用場景主要包括以下幾個方面: 來百度APP暢享高清圖片 企業(yè) :適用于各種類型和規(guī)模的企業(yè),尤其在跨國公司和連鎖經(jīng)營中更能體現(xiàn)其優(yōu)勢。這些企業(yè)需要實現(xiàn)不同地區(qū)、不同語言的
    的頭像 發(fā)表于 01-15 14:42 ?404次閱讀

    什么是分布式架構(gòu)?

    分布式架構(gòu)是指將一個系統(tǒng)或應用拆分成多個獨立的節(jié)點,這些節(jié)點通過網(wǎng)絡(luò)連接進行通信和協(xié)作,以實現(xiàn)共同完成任務的一種架構(gòu)模式。這種架構(gòu)模式旨在提
    的頭像 發(fā)表于 01-12 15:04 ?1229次閱讀
    什么是<b class='flag-5'>分布式</b><b class='flag-5'>架構(gòu)</b>?

    分布式節(jié)點服務器是什么?

    分布式節(jié)點服務器是一種將多個服務器分布式連接、協(xié)同工作,以實現(xiàn)負載均衡、提高系統(tǒng)性能和可靠性、提供可用性的服務器架構(gòu)。 具體來說,
    的頭像 發(fā)表于 01-12 15:04 ?737次閱讀
    <b class='flag-5'>分布式</b>節(jié)點服務器是什么?

    分布式IO工業(yè)自動化數(shù)據(jù)采集與分析的核心

    代替人工操縱機器和機器體系進行加工生產(chǎn)的趨勢,分布式I/O可以與各種傳感器、執(zhí)行器和控制系統(tǒng)相連接,實現(xiàn)生產(chǎn)線的自動化控制。通過實時采集和傳輸數(shù)據(jù),分布式I/O能夠精確控制生產(chǎn)過程中的
    發(fā)表于 12-28 14:47
    RM新时代网站-首页