容聯(lián)云通訊張靖宇:重構(gòu)架構(gòu) IM5.0將更快、更省、更穩(wěn)
原創(chuàng)隨著4G網(wǎng)絡(luò)和無線大面積覆蓋,移動互聯(lián)網(wǎng)迅速壯大,我們的通訊方式已經(jīng)發(fā)生了巨大的改變。移動端已經(jīng)逐漸替代PC端,成為最主要的通訊載體。
業(yè)內(nèi)人士認(rèn)為,XMPP協(xié)議作為PC互聯(lián)網(wǎng)時(shí)代IM通信的標(biāo)準(zhǔn),已經(jīng)不能適應(yīng)移動互聯(lián)網(wǎng)的發(fā)展。正如此,傳統(tǒng)的IM產(chǎn)品也必將有所改變,才能適應(yīng)移動網(wǎng)的發(fā)展。
什么樣的IM產(chǎn)品最契合移動互聯(lián)網(wǎng)?近日,容聯(lián)云通訊宣布,針對移動互聯(lián)網(wǎng)的需求,重構(gòu)架構(gòu),發(fā)布IM5.0。51CTO專訪容聯(lián)云通訊產(chǎn)品總監(jiān)張靖宇,解讀移動互聯(lián)網(wǎng)時(shí)代的云通訊IM產(chǎn)品。
記者:容聯(lián)云通訊IM的基本功能有哪些?
張靖宇:云通訊平臺是一個(gè)全通訊能力的平臺,圍繞通訊的各個(gè)環(huán)節(jié)都有產(chǎn)品。IM只是其中一項(xiàng)。基本功能有:單聊,是指點(diǎn)對點(diǎn)之間的功能,支持文本、語音、圖片、附件、表情的發(fā)送,支持已發(fā)送的消息回執(zhí),發(fā)送的概念是指你發(fā)送一個(gè)消息,發(fā)送到服務(wù)端了,服務(wù)端會給你確認(rèn),說這個(gè)消息服務(wù)端已經(jīng)收到了;群聊功能,支持2000人的群組,一個(gè)群組可以加入2000人,每個(gè)人可以加入500個(gè)群組。支持私有群組和公開群組;設(shè)備推送功能;服務(wù)器發(fā)送廣播消息,在服務(wù)器端給固定的群組或全部的用戶發(fā)送消息;數(shù)據(jù)統(tǒng)計(jì):統(tǒng)計(jì)在一個(gè)時(shí)間段內(nèi)的APP當(dāng)中有多少用戶使用了IM功能,發(fā)了多少條消息,分布來自什么設(shè)備。
記者:容聯(lián)云通訊2013年才發(fā)布了***個(gè)版本,現(xiàn)在已經(jīng)發(fā)布到了5.0版本,經(jīng)歷了怎樣的演變?
張靖宇:我們一開始做的時(shí)候,商業(yè)模式是模仿國外的一家公司,通過網(wǎng)絡(luò)接口的方式撥打固定電話,在***版本中主要是集成了VoIP功能。企業(yè)用VoIP,要解決內(nèi)部的通訊問題,降低通訊費(fèi),因此有了IM的需求,我們在2.0版本中增加了IM功能;到了3.0版本SDK的能力基本全了,有IM能力、視頻音頻能力、視頻會議能力、電話會議能力。這四個(gè)版本都是用戶需求推著我們走,沒有自己的頂層設(shè)計(jì)。我們團(tuán)隊(duì)原來主要是做通訊的,采取的都是PC端的思維,在易用性方面考慮不是太多,所以前期用戶反饋回來很多問題。4.0版本時(shí),我們對易用性做了一些優(yōu)化,用戶接入時(shí)就會相對輕松。這個(gè)問題解決后,用戶還反饋了流量、耗電等問題,我們做了比較全面的分析,原有的架構(gòu)完全適配不了移動端,所以我們就決定把前面這些架構(gòu)推翻掉,完全基于移動端重構(gòu)了架構(gòu),推出了5.0版本。
記者:推翻原有的架構(gòu),重構(gòu)基于移動端的架構(gòu),具體都做了哪些事情?
張靖宇:首先,我們分析移動通訊的特點(diǎn),網(wǎng)絡(luò)不穩(wěn)定、丟包率高、延時(shí)高、流量敏感、流量收費(fèi)高、耗電等等。主要從幾個(gè)方面來考慮:
網(wǎng)絡(luò)的考慮:我們有2G、3G、4G、WIFI,且不同運(yùn)營商網(wǎng)絡(luò)狀況不同,要做出不同的應(yīng)對;
消息中間件:消息中間件的作用主要是解耦的作用,考慮是否使用消息中間件;
數(shù)據(jù)庫:選擇什么樣的數(shù)據(jù)庫,是關(guān)系型還是非關(guān)系型,還是混用?非關(guān)系型數(shù)據(jù)庫效率更高;
IM協(xié)議:XMPP是文本協(xié)議,它的定義協(xié)議可讀性、擴(kuò)展性都很強(qiáng),但是它更適用于PC端;simple協(xié)議比較消耗流量;Redis協(xié)議,業(yè)內(nèi)用的不多;
***,我們確定了移動端的目標(biāo),一個(gè)是登陸要快,發(fā)送消息要快;二是要省,要省電、省流量;三是要穩(wěn)定,不要丟消息,穩(wěn)定性要達(dá)到99.99%以上。
記者:基于這些目標(biāo),容聯(lián)云通訊采用了什么樣的方案?
張靖宇:我們采取了無DNS設(shè)計(jì),滿足登錄快的需求。移動端登錄分為幾個(gè)過程,首先是建立信道,二是做DNS解析,你有個(gè)域名,他去連接你的域名,有個(gè)域名解析。第三你要做TCP連接。DNS解析里面,DNS這一步我們認(rèn)為是可以省掉的,因?yàn)镈NS解析通常消耗的時(shí)間比較多,一般快的情況下是100到200毫秒,慢的甚至3、4秒,所以我們首先采取的是無DNS設(shè)計(jì)。去掉注冊流程,通常用到第三方通訊云的時(shí)候會遇到這樣的情況,用戶在你的平臺注冊以后,同時(shí)要到第三方通訊云去注冊一個(gè)帳號。現(xiàn)在用戶在注冊的時(shí)候不必再到第三方通訊云來注冊了,登錄的時(shí)候直接輸入帳號,第三方通訊會直接驗(yàn)證用戶是不是合法登錄,如果不是會直接記錄到后臺里面去,再加上其他的一些應(yīng)用機(jī)制,省去了用戶注冊返回帳號的流程,因?yàn)閹ぬ柌荒苡浽诳蛻舳恕?/p>
采用小包體協(xié)議,業(yè)務(wù)層的協(xié)議完全可以自定義,但在最小的基礎(chǔ)上,消息是一種固定的格式。舉個(gè)例子,對于文本消息,文本消息是大家發(fā)送最多的,在文本消息里面我們把消息類型去掉,服務(wù)端收到消息的時(shí)候,發(fā)現(xiàn)沒有消息類型,就認(rèn)為這是一條文本消息。這樣就可以減少很多流量。同時(shí),我們采取了“protobuffer+自定義”的協(xié)議,非常省流量。
穩(wěn)定性方面,我們主要采取多段的ACK確認(rèn)以及***花存儲,發(fā)送消息會發(fā)送到連接器、中間件到邏輯服務(wù)器,在我的消息***化存儲之前我們會給用戶一個(gè)ACK的確認(rèn),經(jīng)過***化之后,才會給用戶一個(gè)應(yīng)答的消息,你已經(jīng)發(fā)送成功了。另外,通過架構(gòu)保證服務(wù)穩(wěn)定性。通常來講傳統(tǒng)一般會有一個(gè)導(dǎo)航,用戶一開始登錄的時(shí)候會先到導(dǎo)航服務(wù)器,然后拿到對應(yīng)的IP地址過來登錄。我們?nèi)サ袅藢?dǎo)航,所以我們會直連。這是一個(gè)連接器的集群,它不做任何的業(yè)務(wù)邏輯,只去管理連接。目前我們做到的是一臺連接器,8核16G的服務(wù)器是可以做到80萬的長連接。80萬是慢負(fù)荷,發(fā)送文本消息的時(shí)候處理速度就會比較慢,所以我們采取了服務(wù)端留控的策略,每臺可以允許50萬,對整個(gè)消息的處理是完全沒有影響的。在連接器下面我們采取了消息中間件的方式,它雖然可能會帶來系統(tǒng)災(zāi)難的節(jié)點(diǎn),但是它在編程的時(shí)候,在系統(tǒng)維護(hù)的時(shí)候帶來了很多的方便性。
記者:這次5.0的發(fā)布,特別指出是架構(gòu)的重構(gòu),這個(gè)重構(gòu)體現(xiàn)在哪里?
張靖宇:我們采取了全新的架構(gòu)叫push-pull系統(tǒng)架構(gòu),微信和陌陌都采用了push-pull系統(tǒng)架構(gòu)來滿足大規(guī)模的用戶需求。
嚴(yán)格意義上講的推拉,不僅僅是多媒體消息,對于文本的消息也要采取推拉的方式。文本消息有大文本,有小文本,如果是大文本在你網(wǎng)絡(luò)狀況不小的情況下,接收端的人也會拿不到,所以我們采取的是完全的推拉。原來是推不下去,你就只能等離線了,即使網(wǎng)絡(luò)狀況好,你這條消息也拿不到了。現(xiàn)在是網(wǎng)絡(luò)狀態(tài)一旦好,就能夠把這條消息拿到。在結(jié)構(gòu)方面主要解決的是接收快,正是因?yàn)檫@個(gè)架構(gòu)我們把原來的架構(gòu)都推翻掉的,引用了版本號的邏輯。
總結(jié):
采訪中,張靖宇一直強(qiáng)調(diào),重構(gòu)架構(gòu)后推出的IM5.0產(chǎn)品是最契合移動互聯(lián)網(wǎng)的需求,它具備更快、更省、更穩(wěn)的特點(diǎn)。目前,產(chǎn)品已開放下載,期待來自市場的反應(yīng)。