5G因高速率、大容量和低時延三個主要特徵,爲咱們帶來了無限遐想,但若是底層通訊能力及設計架構不足以支撐高併發的場景,高延時仍然不可避免,那麼5G技術所賦予的全新應用體驗也將大打折扣,所以,掌握高併發的通訊技術在5G時代相當重要。算法
在2019全球互聯網通訊雲(WIIC)大會上,融雲技術總監高曉光在「架構演進與性能優化」論壇演講中毫無保留地分享了融雲高併發通訊技術的系統設計與實踐,但願給廣大開發者提供一些實戰幫助。做爲通訊雲行業的技術領導者,融雲連續五年保持IM即時通信市場佔有率第一,是業內惟一承諾在高併發和弱網環境下,仍然能夠保障消息不丟、不重、不亂序的廠商,融雲的高併發通訊技術和系統架構也已成爲業界爭相學習的技術標杆。
融雲技術總監高曉光演講數據庫
高併發系統的設計要點緩存
WICC會上,高曉光首先分享了融雲在整個通訊平臺上經常使用的系統性能優化手段。在系統運行的性能上,融雲主要關注業務、系統和存儲三個層面的問題。在業務層面,建議開發者關注每一個業務請求接口的響應時長,動態掌握正確的響應時長,過長和太短都不合理,並對程序運行中的性能拐點,儘量的優化,延長其到來的時間,這可極大提高高併發的業務承載能力。在系統層面,程序運行過程當中關注CPU、內存和I/O這三方面的使用狀況,合理配置資源;在存儲層面,根據實際業務場景作數據庫選型,選擇合適的存儲介質。性能優化
基於以上性能問題關注點,高曉光坦言融雲高併發系統的設計要點主要集中在如下四個方面:
數據結構
融雲高併發系統的設計要點架構
採用異步化的請求處理。目前,融雲採用基於Actor模型自研的分佈式RPC框架來實現整個通訊雲平臺,不但能夠把請求的源數據,像流水線同樣在每一個節點處理完後直接下轉,還能夠將最終處理的結果經過溯源直接投遞回去,從而減小數據的調用次數。相對於同步的方式,異步化能夠提升資源的複用程度,中間須要被處理的節點越多,異步化的優點會越明顯。併發
合理的緩存策略。經過數據、分佈式緩存、本地緩存、客戶端緩存層層遞進的緩存策略,使越活躍的數據越逼近客戶。目的在於讓熱的數據離它要處理的位置更近,以提升緩存的利用率,加快數據處理的速度。框架
選用適合的數據結構與算法,能夠極大的提升整個程序的計算性能。例如一致性哈希算法,可用於整個服務的數據的散列,或者節點的定位;LRU緩存,一個帶數據淘汰的緩存組件,把冷的數據淘汰掉,把位置騰給熱的數據,提升數據利用率;BitMap,每個比特位均可用來標識一個狀態位,可用於快速的狀態判斷和節省存儲空間;Bloom Filter能夠認爲是BitMap的一種應用,能夠用來快速斷定數據是否存在,避免緩存穿透。異步
高效的數據存取模型。在融雲整個系統裏面會經常使用到幾種不一樣的存儲類型,沒有高下之分,高曉光說選用的原則是必定要符合業務場景。例如,存用戶的在線和離線狀態,融雲會選用KV存儲;存儲消息,因爲消息對於時序的要求很高,因此能夠選擇時序型數據庫。數據怎麼用起來方便,就怎麼去存取它。分佈式
高併發系統架構的最佳實踐解讀
WICC上,高曉光談到消息分發的典型場景有單聊、羣聊、聊天室,不一樣場景應具體分析、分別應對,纔是解決高併發問題的祕訣。會上特別針對羣聊和聊天室的不一樣特色,融雲分享了不一樣的最佳實踐方案。
針對羣聊場景。首先,融雲在系統中使用消息分發控制策略,在羣消息分發中引進快、中、慢三個隊列,分別設置不一樣的延時值,根據不一樣的羣成員數量,映射到不一樣處理隊列中,將絕大多數百人如下的羣放入快速隊列,進行快速處理,可極大地減輕分發的壓力。
其次,融雲採用消息直推與通知拉取相結合的方式,在消息不頻繁時用直推模式,當消息量爆增,產生積壓時即轉爲通知拉取模式。同時,使用 ACK 機制進行消息可靠同步,且同步的消息嚴格按照時間戳有序進行,這個時間戳由服務端保證惟一性,這也是融雲勇於承諾消息不重不丟不亂序的祕籍所在。
再則,融雲經過「引用分發」機制下降消息緩存的存儲佔用。原則上,是按消息大小及羣成員數量來斷定是否採用「引用分發」。當消息體大,如發送語音或圖片時,就採用「引用分發」機制,只分發一個索引,當終端實際拉取消息時,再推送實體消息。
針對聊天室場景。聊天室和羣聊的不一樣之處在於:聊天室的成員關係是臨時性的,出入頻繁,若遇大型直播,成員瞬時可達幾萬甚至幾十萬,消息極其活躍,瞬時峯值極高。融雲承諾的是成員無上限的聊天室服務,最高服務過15萬人同時在線,每秒消息的分發量超過2000萬條,日消息峯值超2218億條。
爲知足高併發消息的服務請求,融雲部署了環形隊列的內存緩存,滾動保存最近的50條消息。在終端徹底改用通知拉取的方式,用戶收到通知後,可從服務端的緩存中獲取消息,這起到了很好的限流做用,直接緩解了終端壓力。
另外,對於聊天室而言,融雲根據多年服務客戶的經驗以及自身的技術模型,制定了一套按消息類型進行消息拋棄的處理機制。例如大型直播的場景,消息可能頻繁到每秒瞬間幾萬條消息涌向終端,即使終端可以處理過來,用戶也未必看得過來,體驗反而不好。因此當直播間消息量過大或消息頻率太高時,融雲會爲消息設置優先級,並將連續消息和類似消息優化成一條「疊加消息」,同時根據優先級機制拋棄無用戶屬性消息,確保消息併發量極大的狀況下,用戶端也能夠享受流暢的直播互動體驗。對於聊天室,融雲還額外對消息上行進行限流,也有效提高了用戶體驗。
將來所面臨的挑戰和改進
隨着5G+物聯網時代的到來,各類終端設備甚至會延伸到觸手可及的任意一物,海量消息激增將直接致使高併發的場景無處不在,底層的通訊系統架構也將面臨難於想象的考驗。
高曉光表示,融雲一直以來在服務性能上都圍繞着三大重心去進行優化,1、合理的算法,下降CPU使用;2、合理的內存結構,下降內存用量,提升緩存利用率;3、儘量的下降I/O的頻次。同時,高曉光在演講中還着重強調:任何的優化都須要符合特定的場景,若是沒有場景,任何優化都毫無心義。
回顧前文,融雲的雲通訊系統架構之因此可以經受住各類高併發的極端考驗,與融雲正確分析場景的特色,進而採起有效對策密切相關。這次融雲在WICC上的技術分享,但願幫助開發者瞭解到,在單羣聊及聊天室這樣典型的消息分發場景下,通訊雲技術如何對高併發業務進行支撐。經過高併發系統設計及最佳實踐的解讀,融雲但願引領業界技術領袖一塊兒,持續推進通訊雲技術對5G多應用場景的服務性能優化與提高。