自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

融云首席架構(gòu)師李淼:直播互動系統(tǒng)的設(shè)計與實踐

原創(chuàng)
開發(fā) 項目管理 企業(yè)動態(tài)
在直播過程中,出現(xiàn)閃退、卡頓等問題,會非常影響用戶體驗。 當用戶量達到一定規(guī)模,高并發(fā)之下,IM功能的穩(wěn)定性將會面對前所未有的考驗。基于此,記者在51CTO主辦的WOT2017全球架構(gòu)與運維技術(shù)峰會上,對融云首席架構(gòu)師李淼進行了專訪,話題主要圍繞直播互動系統(tǒng)的設(shè)計與實踐展開。

【51CTO.com原創(chuàng)稿件】社交垂直化的今天,APP利用垂直社交關(guān)系鏈來提升用戶黏性是通往成功的重要手段,選擇直播互動是打通陌生人社交關(guān)系鏈的最佳方式?;谥辈I(yè)務(wù)場景的實時特性,直播互動目前主要通過聊天室產(chǎn)品實現(xiàn)??此屏奶焓抑皇且粋€功能,但消息處理是最大的難點。在直播過程中,出現(xiàn)閃退、卡頓等問題,會非常影響用戶體驗。 當用戶量達到一定規(guī)模,高并發(fā)之下,IM功能的穩(wěn)定性將會面對前所未有的考驗?;诖?,記者在51CTO主辦的WOT2017全球架構(gòu)與運維技術(shù)峰會上,對融云首席架構(gòu)師李淼進行了專訪,話題主要圍繞直播互動系統(tǒng)的設(shè)計與實踐展開。

直播互動系統(tǒng)的一些特性

融云首席架構(gòu)師李淼:直播互動系統(tǒng)的設(shè)計與實踐

李淼·融云首席架構(gòu)師兼聯(lián)合創(chuàng)始人

融云于14年成立之時,只提供聊天室這樣的服務(wù),國內(nèi)直播平臺還未大批興起。15年,源于大量客戶對直播互動的需求,融云預(yù)見直播平臺未來會有很好的前景,開始與客戶積極交流來挖掘需求,最終將聊天室轉(zhuǎn)變?yōu)橹辈セ悠脚_。經(jīng)歷了16年一個完整的直播元年,直播互動系統(tǒng)也正式步入了成熟期。

當問及直播互動系統(tǒng)的特性,李淼表示:

其一,直播互動平臺的用戶量實際上是沒有上限的,因為不可能去限制一個主播加入觀眾的成員數(shù)量。

其二,通過把消息進行分級控制的方式來保證禮物、紅包等消息傳輸?shù)目煽啃浴?/p>

其三,瞬時消息吞吐量大,融云某個聊天室曾經(jīng)一秒鐘產(chǎn)生過近千萬的消息。

其四,就是針對伸縮及穩(wěn)定性方面的高要求。

消息平臺的邏輯設(shè)計及這樣做的原因

消息是直播互動系統(tǒng)最重要的元素,消息的處理做的好不好會直接影響用戶的體驗。融云的消息平臺邏輯設(shè)計是怎樣的呢?

如上圖,李淼用一張時序圖針對這個問題進行了解答。A客戶端是發(fā)消息方、服務(wù)端是融云整個后端平臺,B客戶端是接收消息方。首先,客戶端向服務(wù)端發(fā)送消息,服務(wù)端接收消息先進行消息驗證,消息驗證里面包含了高危詞、敏感詞的過濾,反垃圾系統(tǒng)對消息進行反垃圾的過濾,以及權(quán)限驗證,當消息通過之后,對消息優(yōu)先進行存儲,之后會給A客戶端返回應(yīng)答,告知消息已經(jīng)發(fā)送成功。這時服務(wù)端會遍歷成員分發(fā)通知。值得注意的是,現(xiàn)在還沒有向客戶端發(fā)送消息實體,當接收客戶端接收消息通知時,會從自己本地存儲里面拿到當前直播間里面最新的消息版本號,同時向服務(wù)器發(fā)起同步請求,服務(wù)器獲取客戶提交的版本號之后,會以這個版本號為起點到最新版本號把所有消息全部拿回來返回給客戶端,客戶端收到這個消息進行消息展示以及存儲這個最新版本號。整個通信流程,版本號獲取方式,跟常用版本控制軟件比較類似。

之所以把流程變得這么復(fù)雜,在發(fā)送完通知之后再同步消息,主要原因如下:

  • 通知的推送無需服務(wù)質(zhì)量保證
  • 服務(wù)器端存儲的消息順序與到達的客戶端順序一致
  • 當消息密集時可以將多條消息進行合并
  • 可以控制下發(fā)的消息條數(shù)
  •  以存儲分級實現(xiàn)消息分級

消息平臺在服務(wù)端實現(xiàn)細節(jié)及最佳應(yīng)用實踐

當問及直播消息系統(tǒng)于服務(wù)端的實現(xiàn)細節(jié),李淼主要從數(shù)據(jù)預(yù)處理、消息分級、消息存儲和消息分發(fā)隊列四方面進行了介紹,但在實際服務(wù)開發(fā)過程中,優(yōu)化還有很多。

數(shù)據(jù)預(yù)處理。當服務(wù)端接收消息之后優(yōu)先對數(shù)據(jù)進行序列化以及存儲,序列化消息和要下發(fā)的客戶端數(shù)據(jù)要保持一致,通過這種預(yù)處理的方式,CPU的使用率在當前基礎(chǔ)上降低了30%。

消息分級存儲。根據(jù)消息類型按照中、高、低序列進行分級存儲。

Skiplist轉(zhuǎn)化為環(huán)形隊列存儲。每條消息有唯一且遞增版本號,消息按照版本號順序存儲。這樣的數(shù)據(jù)在內(nèi)存存儲情況下,跳表是一種非常合適的數(shù)據(jù)結(jié)構(gòu)。但是,跳表時間復(fù)雜度和空間復(fù)雜度比較大,同時往跳表中插入數(shù)據(jù)時使用的鎖范圍非常大,會對服務(wù)器產(chǎn)生一些額外的開銷。之后,由跳表演進成一種類似環(huán)形隊列的數(shù)據(jù)結(jié)構(gòu),對服務(wù)器性能開銷提升很多。

Map與隊列構(gòu)建復(fù)合數(shù)據(jù)結(jié)構(gòu),降低無意義消費。服務(wù)端下發(fā)通知,對于通知來講在這一時刻無論有多少條消息,每個用戶只有一條通知,通過Map與隊列構(gòu)建這樣的復(fù)合結(jié)構(gòu)進行存儲。隊列里面存儲是數(shù)據(jù)的指針,Map存儲用于下發(fā)的通知實體,Map使用的key為用戶標識,這樣可以降低無意義的消費。

融云最新版線上直播互動平臺的整體架構(gòu)

直播互動平臺的2.1架構(gòu)

談到直播平臺的架構(gòu),李淼表示,如上圖,融云目前正在使用的架構(gòu)分為連接層、業(yè)務(wù)層和存儲層等。連接層和業(yè)務(wù)層構(gòu)建成整個大的集群,然后進行服務(wù)。連接層主要是負責(zé)客戶端與服務(wù)器保持長連接,同時將客戶端的協(xié)議與內(nèi)部服務(wù)的協(xié)議進行相互轉(zhuǎn)化。

業(yè)務(wù)層負責(zé)IM相關(guān)業(yè)務(wù)處理,業(yè)務(wù)層采用的是微服務(wù)架構(gòu),線上服務(wù)有40多個類型,但對于直播互動平臺包含如下三項服務(wù):

第一:上行控制服務(wù),主要目的是用于處理接收的上行客戶端的消息,進行敏感詞和高危詞的過濾。這個服務(wù)的負載方式采用的是隨機分配的負載方式。

第二,直播服務(wù),負責(zé)維護直播間成員關(guān)系和負責(zé)接收上行控制服務(wù)給它的消息,上行控制服務(wù)會先期進行消息拋棄,拋棄到直播服務(wù)可以接收的范圍之內(nèi),將消息下發(fā)到直播服務(wù),直播服務(wù)再廣播到直播消息服務(wù)。

第三:直播消息服務(wù),負責(zé)給用戶進行分發(fā)通知,是以用戶ID進行一致的哈希方式進行負載。每個服務(wù)節(jié)點包含部分用戶關(guān)系。整個直播消息服務(wù)構(gòu)建了一個整體成員關(guān)系,他等同于直播消息服務(wù)上的一個節(jié)點。這層除分發(fā)通知外,還負責(zé)客戶端同步拉取獲取的消息。

寫在最后:

針對關(guān)于融云在直播互動核心競爭力的問題,李淼老師,這樣回答:“ 我們?nèi)谠铺峁┑氖侵辈セ悠脚_,是一個基礎(chǔ)PAAS服務(wù),本身并不會去做直接面對用戶的直播APP。融云最大的特點就是認準一件事死磕,不停優(yōu)化服務(wù)提升能力,之后再反哺給客戶。我們經(jīng)常與客戶進行溝通,收集他們對直播互動這塊的需求。需求拿來之后,產(chǎn)品人員會對這些需求進行抽象提煉,將他們變成平臺能力,再提供給更多的客戶。通過這種方式,我們擁有了豐富功能以滿足客戶的業(yè)務(wù)需要,同樣對新客戶也給他們提供了更多的產(chǎn)品可能性。性能上也得益于現(xiàn)在整個后端研發(fā)平臺的人才梯隊的建設(shè),融云目前有很多高端人才負責(zé)這一塊的工作,同時我們擁有大量各種業(yè)務(wù)模式的客戶,也遇到過各類場景下產(chǎn)生的突發(fā)事件,通過這些問題解決和能力提升,所以在性能完全可以滿足客戶的需要”。

【51CTO原創(chuàng)稿件,合作站點轉(zhuǎn)載請注明原文作者和出處為51CTO.com】

責(zé)任編輯:王雪燕 來源: 51CTO
相關(guān)推薦

2018-06-13 09:25:27

IT系統(tǒng)架構(gòu)隱私李聰

2017-04-20 14:41:35

融云WOT即時通訊云

2017-08-24 08:40:28

直播互動平臺海量消息

2016-08-29 11:33:23

京東云云計算云安全

2015-08-30 10:00:32

七牛云存儲計算

2016-04-07 10:35:46

架構(gòu)設(shè)計架構(gòu)師滴滴出行

2017-06-01 09:34:53

公有云數(shù)據(jù)遷移

2009-12-18 10:22:50

Ray Ozzie架構(gòu)師

2016-04-15 00:47:14

滴滴出行架構(gòu)師架構(gòu)設(shè)計

2009-06-30 16:34:44

微軟

2012-03-21 17:30:21

百度架構(gòu)師

2011-03-11 15:38:08

Java

2016-04-07 09:39:33

雪球唐福林實踐歷程

2012-04-26 10:29:55

新浪云計算SAE

2010-04-20 09:18:00

架構(gòu)師

2009-06-09 10:02:57

微軟云計算服務(wù)器

2011-07-15 09:44:20

Ruby

2012-11-01 15:14:49

京東數(shù)據(jù)部架構(gòu)師

2012-08-16 14:40:52

2010-12-16 11:05:36

數(shù)學(xué)程序員Google首席Jav
點贊
收藏

51CTO技術(shù)棧公眾號