在移動(dòng)互聯(lián)網(wǎng)快速推動(dòng)創(chuàng)業(yè)浪潮的今天,絕大多數(shù)應(yīng)用在構(gòu)建之初都將社交元素潛意識(shí)的列入到了其產(chǎn)品功能清單中,即時(shí)通訊服務(wù)作為強(qiáng)社交的載體,又一次強(qiáng)勢(shì)回歸到應(yīng)用設(shè)計(jì)者的視野中來(lái)。同時(shí)也涌現(xiàn)出了大量以即時(shí)通訊服務(wù)為賣(mài)點(diǎn)的產(chǎn)品,如具有代表性的用友IM。
企業(yè)級(jí)市場(chǎng),即時(shí)通訊服務(wù)的產(chǎn)品設(shè)計(jì)與技術(shù)架構(gòu)也發(fā)生了巨大的變化:1、從原本僅支持自身軟件業(yè)務(wù)的場(chǎng)景轉(zhuǎn)變?yōu)樾柚尉(xiàn)上與線(xiàn)下業(yè)務(wù)的混合場(chǎng)景;2、服務(wù)架構(gòu)更開(kāi)放與透明,完全無(wú)狀態(tài)化;3、配合云計(jì)算、大數(shù)據(jù)等成熟技術(shù),支持具備接入海量數(shù)據(jù)及業(yè)務(wù)服務(wù)的能力;4、支持更多種類(lèi)的客戶(hù)端及協(xié)議,服務(wù)端具備接入適配功能。
從客戶(hù)端設(shè)計(jì)角度出發(fā),移動(dòng)化催生了設(shè)備的多樣性,保障各終端的使用統(tǒng)一成為了客戶(hù)端設(shè)計(jì)的關(guān)鍵。要求即時(shí)通訊服務(wù)不限制服務(wù)接入的方式和協(xié)議,不管服務(wù)是通過(guò)移動(dòng)網(wǎng)絡(luò)還是固定網(wǎng)絡(luò)接入,也不管協(xié)議是否支持HTTP、XMPP、MQTT、TCP等,都應(yīng)可以得到所需消息的響應(yīng)服務(wù)。企業(yè)級(jí)客戶(hù)端通常功能比較復(fù)雜,需要應(yīng)用設(shè)計(jì)者重新劃分功能層次,最終可歸納為2種形式(API和SDK)。站在通訊協(xié)議角度,應(yīng)根據(jù)客戶(hù)端自身特點(diǎn),從輕到重進(jìn)行技術(shù)選型,如:推薦HTML5采用WebSocket協(xié)議實(shí)現(xiàn),避免使用HTTP長(zhǎng)短輪詢(xún)及一些RIA插件實(shí)現(xiàn)。
客戶(hù)端形態(tài)方面,桌面及移動(dòng)原生APP對(duì)比WEB APP相對(duì)較重,通常采用SDK + TCP/UDP實(shí)現(xiàn),應(yīng)用設(shè)計(jì)者在設(shè)計(jì)客戶(hù)端SDK時(shí)候應(yīng)關(guān)注提升性能和擴(kuò)展性上,通用SDK一般包含線(xiàn)程控制、編解碼、鎖與資源、粘包丟包、壓縮與加密、內(nèi)存管理等處理模塊。
包含即時(shí)通訊服務(wù)的企業(yè)應(yīng)用客戶(hù)端也在朝著更簡(jiǎn)潔、碎片的方向發(fā)展,下面重點(diǎn)談?wù)勅绾螛?gòu)建企業(yè)級(jí)即時(shí)通訊的核心“通訊服務(wù)”。首先先回顧一下目前即時(shí)通訊服務(wù)面臨的挑戰(zhàn):1、海量通訊數(shù)據(jù)處理;2、高并發(fā),高事務(wù);3、復(fù)雜協(xié)議轉(zhuǎn)換;4、大規(guī)模集群下穩(wěn)定性及容災(zāi)問(wèn)題;5、快速通訊消息響應(yīng);6、平滑服務(wù)擴(kuò)展;以上6大問(wèn)題將影響保障通訊服務(wù)能力的基礎(chǔ)問(wèn)題。
雖然通過(guò)云計(jì)算架構(gòu)、容器架構(gòu)、微服務(wù)架構(gòu)等流行技術(shù)可以解決即時(shí)通訊服務(wù)中彈性、容災(zāi)、自動(dòng)化及異地網(wǎng)絡(luò)問(wèn)題,但是其自身特性決定了其技術(shù)的細(xì)致程度,類(lèi)似鐘表行業(yè)的瑞士,需要追求極致。很難像其他應(yīng)用一樣去適應(yīng)通用云平臺(tái),其中一個(gè)簡(jiǎn)單的例子,即時(shí)通訊服務(wù)的負(fù)載均衡器很少通過(guò)軟負(fù)載去實(shí)現(xiàn),如果采用軟負(fù)載去實(shí)現(xiàn),負(fù)載均衡本身將成為瓶頸點(diǎn),尤其是在僅維持連接狀態(tài)的長(zhǎng)連場(chǎng)景下。云平臺(tái)的設(shè)計(jì)勢(shì)必要向即時(shí)通訊服務(wù)傾斜,成為專(zhuān)有云。
針對(duì)企業(yè)級(jí)即時(shí)通訊服務(wù)本身,企業(yè)在構(gòu)建服務(wù)之初,應(yīng)合理規(guī)劃接入連接規(guī)模的階段,避免資源浪費(fèi)和設(shè)計(jì)的不合理,例如:處理C10K架構(gòu)和C100K的架構(gòu)將截然不同。在協(xié)議選擇上可以劃分為多層,客戶(hù)端接入層選擇自定義協(xié)議或輕量級(jí)的協(xié)議,減少數(shù)據(jù)包體積,網(wǎng)關(guān)后幾層由于構(gòu)建在內(nèi)網(wǎng)或者一個(gè)數(shù)據(jù)中心中,應(yīng)選擇一些擴(kuò)展性強(qiáng)并且健壯的協(xié)議,如:XMPP等。協(xié)議加密方面可以設(shè)計(jì)成插件方式,選擇性支持二層、三層、四層加密、過(guò)濾等機(jī)制,也可使用簽名證書(shū)。當(dāng)通訊服務(wù)構(gòu)建完成需要進(jìn)行2步核心測(cè)試,分別是單機(jī)0思考?jí)毫y(cè)試及集群調(diào)度測(cè)試。
企業(yè)級(jí)即時(shí)“通訊服務(wù)”存在一個(gè)重要的特點(diǎn),要求服務(wù)具備極高的穩(wěn)定性,保障消息的可靠不丟失,尤其在移動(dòng)場(chǎng)景下,例如:2G切換3G又切換4G后到?jīng)]信號(hào)的極端場(chǎng)景下,消息始終不能丟失。這需要服務(wù)端在擁有極大并發(fā)的情況,保障通訊業(yè)務(wù)事務(wù)的健壯性,不管是通過(guò)消息回執(zhí)的方式,還是消息鎖機(jī)制保障,目的是一樣的。從數(shù)據(jù)層面考慮,也將面臨新的問(wèn)題“數(shù)據(jù)持久化”,單純談數(shù)據(jù)持久化可能不是問(wèn)題,但如果轉(zhuǎn)換成海量消息數(shù)據(jù)的場(chǎng)景,這又將是一個(gè)服務(wù)端設(shè)計(jì)的挑戰(zhàn),消息與消息之間是存在多級(jí)關(guān)系的,例如:消息A屬于用戶(hù)B,消息A屬于群組B中用戶(hù)A發(fā)送給用戶(hù)B的圖片類(lèi)型消息等。單純使用關(guān)系型數(shù)據(jù)庫(kù)和NoSQL數(shù)據(jù)庫(kù)是很難解決這個(gè)問(wèn)題,通常需要應(yīng)用設(shè)計(jì)者自行設(shè)計(jì)一套數(shù)據(jù)散列算法進(jìn)行消息對(duì)象分區(qū),同時(shí)服務(wù)端還應(yīng)實(shí)現(xiàn)一套查詢(xún)引擎或數(shù)據(jù)調(diào)度中心。數(shù)據(jù)存儲(chǔ)設(shè)計(jì)方面應(yīng)遵循一個(gè)原則:“先規(guī)劃一期規(guī)模數(shù)據(jù),同時(shí)設(shè)計(jì)升級(jí)方案”。當(dāng)這些都搞定后,數(shù)據(jù)層面還應(yīng)考慮提升數(shù)據(jù)服務(wù)的穩(wěn)定性和安全性,通常云平臺(tái)是無(wú)法實(shí)現(xiàn)這些需求,服務(wù)可以彈性,但數(shù)據(jù)無(wú)法彈性,這里就需要應(yīng)用開(kāi)發(fā)者根據(jù)穩(wěn)定性和安全級(jí)別設(shè)定數(shù)據(jù)庫(kù)容災(zāi)及彈性方案。
資源存儲(chǔ)層面,建議單獨(dú)部署文件服務(wù)器(大、小文件服務(wù)器分開(kāi))、流媒體服務(wù)器。如果規(guī)模有限,可以采用開(kāi)源文件服務(wù)器,如FastDFS、MogileFS、MooseFS,或租用第三方存儲(chǔ)服務(wù)資源。當(dāng)即時(shí)通訊服務(wù)中以資源服務(wù)為核心時(shí),應(yīng)考慮自行構(gòu)建分布式文件系統(tǒng),通常采用集中式方式實(shí)現(xiàn)。
構(gòu)建企業(yè)級(jí)“即時(shí)通訊”服務(wù)已不僅僅是滿(mǎn)足一些:?jiǎn)瘟摹⑷毫、語(yǔ)音、附件等基礎(chǔ)功能,而是要從客戶(hù)端及服務(wù)端兩個(gè)層面分開(kāi)考慮,每一個(gè)層面?zhèn)戎攸c(diǎn)都不同。構(gòu)建服務(wù)之初的規(guī)劃與設(shè)計(jì)非常重要,不同的階段化規(guī)模都將影響最終服務(wù)的架構(gòu)。