攜程技術(shù)分享:億級(jí)流量的辦公I(xiàn)M及開放平臺(tái)技術(shù)實(shí)踐
Posted on 2024-08-29 15:45 Jack Jiang 閱讀(99) 評(píng)論(0) 編輯 收藏本文由攜程技術(shù)Jim分享,原題“日訪問(wèn)過(guò)億,辦公I(xiàn)M及開放式平臺(tái)在攜程的實(shí)踐”,下文進(jìn)行了排版和內(nèi)容優(yōu)化。
1、引言
攜程內(nèi)部的辦公I(xiàn)M項(xiàng)目最早在2016年立項(xiàng),經(jīng)歷了初期簡(jiǎn)單辦公場(chǎng)景下的純IM服務(wù),到支持簡(jiǎn)單辦公組件的IM應(yīng)用,又演變?yōu)橐惑w化辦公集成平臺(tái),進(jìn)而演變?yōu)槟壳凹蒊M功能的開放式企業(yè)效率平臺(tái)。
本文總結(jié)了攜程辦公I(xiàn)M這些年的發(fā)展歷程及未來(lái)的演進(jìn)方向,并著重從高可用、高性能和可擴(kuò)展的角度,探討開放式平臺(tái)的技術(shù)實(shí)現(xiàn)及發(fā)展方向。

- 移動(dòng)端IM開發(fā)入門文章:《新手入門一篇就夠:從零開發(fā)移動(dòng)端IM》
- 開源IM框架源碼:https://github.com/JackJiang2011/MobileIMSDK(備用地址點(diǎn)此)
2、關(guān)于作者
Jim:攜程高級(jí)研發(fā)經(jīng)理,關(guān)注Java & Go技術(shù)棧后端研發(fā)。目前致力于TripPal開放平臺(tái)的高可用、開放化進(jìn)程及核心衍生服務(wù)。
3、什么是IM

IM(Instant Message)即時(shí)消息,是一種通過(guò)網(wǎng)絡(luò)提供實(shí)時(shí)消息傳輸?shù)脑诰€溝通技術(shù)。
在移動(dòng)互聯(lián)網(wǎng)時(shí)代,IM的使用變得越來(lái)越廣泛,通過(guò)各種技術(shù)手段使得用戶之間的交流成本變的極低,溝通效率和用戶體驗(yàn)有極大的提升。而且IM的出現(xiàn)極大地改變了目前互聯(lián)網(wǎng)應(yīng)用的形態(tài),多數(shù)互聯(lián)網(wǎng)應(yīng)用只要做到了一定規(guī)模,一定會(huì)有自身IM的需求,而不是單純地僅僅依托第三方(例如微信、云信等)。
PS:關(guān)于什么是IM,您也可詳讀專題文章《零基礎(chǔ)IM開發(fā)入門(一):什么是IM系統(tǒng)?》。
4、 攜程辦公I(xiàn)M的發(fā)展歷程

早期攜程使用微軟的IM軟件lync和自研的純IM軟件CtripTeam來(lái)支持企業(yè)內(nèi)的溝通需求,這些軟件在維護(hù)性、拓展性和可用性上都或多或少存在一些缺陷。同時(shí)隨著互聯(lián)網(wǎng)的發(fā)展,也逐漸不適合日益增長(zhǎng)的辦公需求和用戶體驗(yàn)。
2017年左右,使用基于ejabberd+erlang的自研IM服務(wù)的Cchat項(xiàng)目應(yīng)運(yùn)而生,該項(xiàng)目的主要目標(biāo)是在采用自研IM的基礎(chǔ)上,實(shí)現(xiàn)IM與辦公的結(jié)合。在完善IM服務(wù)的基礎(chǔ)上,支持了一些常規(guī)的辦公場(chǎng)景,如電話、假單、考勤、OA等,通常采用嵌入外部頁(yè)面、跳轉(zhuǎn)外部地址等方式提供服務(wù)。這個(gè)改造項(xiàng)目奠定了攜程辦公I(xiàn)M繼續(xù)發(fā)展的基礎(chǔ)。
隨著項(xiàng)目的深入,最初的系統(tǒng)交互模式及服務(wù)管理模式逐漸不適用越來(lái)越復(fù)雜的辦公場(chǎng)景及服務(wù)治理需求。于是在2019年上馬了TripPal的改造項(xiàng)目,在結(jié)合公司國(guó)際化戰(zhàn)略的基礎(chǔ)上,傾力打造小程序平臺(tái),服務(wù)號(hào)等基礎(chǔ)服務(wù)。在梳理、優(yōu)化原有服務(wù)的同時(shí),打造了諸多衍生服務(wù)。
2020年中開始,在繼續(xù)推進(jìn)企業(yè)內(nèi)辦公一站式平臺(tái)的基礎(chǔ)上,我們需要支持更多的外部場(chǎng)景,實(shí)際需求促使我們向開放式平臺(tái)轉(zhuǎn)型,這在服務(wù)整體架構(gòu)、安全性、擴(kuò)展性等方面都提出了新的要求及挑戰(zhàn)。
5、攜程TripPal開放平臺(tái)總體架構(gòu)

5.1Gateway網(wǎng)關(guān)層
這一層是所有請(qǐng)求調(diào)用流量的入口,主要功能如下:
- 1)服務(wù)路由;
- 2)集中式限流、風(fēng)控、日志監(jiān)控等功能;
- 3)調(diào)用IDS (Identity Service) 驗(yàn)證請(qǐng)求的合法性。
第 3)步中驗(yàn)證通過(guò)后,可以將用戶ID、Token等基本信息,通過(guò) HttpHeader 的方式向后端服務(wù)透?jìng)鳎蠖朔?wù)可以直接使用UserID,也可以再次對(duì)Token進(jìn)行認(rèn)證
5.2IDS (Identity Service) 服務(wù)
IDS同時(shí)支持多種不同類型的訪問(wèn)令牌的鑒權(quán),同時(shí)還負(fù)責(zé)令牌的頒發(fā),以及RBAC+模塊級(jí)別的接口控權(quán)。
另外,針對(duì)開放小程序,TripPal提供兩種認(rèn)證方式:
1)常規(guī)的Oauth第三方模式接入:

2)另一種是基于Oauth+開放平臺(tái)簽名的第三方認(rèn)證,對(duì)于接入方相對(duì)簡(jiǎn)單:

5.3微服務(wù)層
這一層是整個(gè)系統(tǒng)的業(yè)務(wù)層,具體包含三種類型的微服務(wù):
- 1)TripPal開放平臺(tái)內(nèi)部系統(tǒng)微服務(wù):只有在特定用戶認(rèn)證和權(quán)限驗(yàn)證通過(guò)之后,外部才能訪問(wèn);
- 2)開放平臺(tái)對(duì)外提供的OpenAPI:采用Oauth+RBAC的方式控制權(quán)限;
- 3)自研小程序后端服務(wù):根據(jù)安全需要,所有使用Oauth+模塊權(quán)限的第一方小程序服務(wù)端。
目前TripPal自身的核心微服務(wù)應(yīng)用達(dá)到28個(gè),提供全集團(tuán)的多端(C端、B端)基礎(chǔ)服務(wù)能力,服務(wù)全公司超過(guò)500個(gè)業(yè)務(wù)應(yīng)用,在線C端用戶均值超過(guò)2萬(wàn),日訪問(wèn)量超過(guò)億。
6、 TripPal的IM服務(wù)

目前TripPal使用完全自研的基于Java實(shí)現(xiàn)的類ejabberd架構(gòu),底層采用的XMPP協(xié)議進(jìn)行通訊。
Tips:
XMPP全稱是ExtensibleMessageing and Presence Protocol,可擴(kuò)展消息與存在協(xié)議。是目前網(wǎng)絡(luò)上開源,最靈活,應(yīng)用最廣泛的一種即時(shí)消息通信協(xié)議。
1999年Jeremie Miller,首先提出了Jabber,一種為實(shí)現(xiàn)即時(shí)消息和存在的開放技術(shù),后續(xù)基于這個(gè)協(xié)議,開發(fā)了一個(gè)開源的服務(wù)實(shí)現(xiàn)jabberd。后續(xù),IETF國(guó)際標(biāo)準(zhǔn)組織介入,成立Extensible Messageing and Presence Protocol(XMPP)工作組,并開始標(biāo)準(zhǔn)化工作。
2000年,jabberd服務(wù)器1.0版本發(fā)布,那時(shí)Jabber協(xié)議的基本特點(diǎn)(基于XML的流,消息,存在,聯(lián)系人列表等)都被固定下來(lái)。
2004年,IETF出版了RFC 3902和RFC3921,定義了XMPP的核心功能,成為推薦標(biāo)準(zhǔn)。
后續(xù)在2011年,IETF出版了RFC6120和RFC 6121,更新了XMPP的核心定義,替代了之前的RFC 3920和3921。
目前XMPP協(xié)議被XMPP Standards Foundation負(fù)責(zé)管理運(yùn)作,集中于在IETF定義的基礎(chǔ)XMPP規(guī)范之上,如何開發(fā)開放的協(xié)議擴(kuò)展。
IM服務(wù)端做了大量的系統(tǒng)性的優(yōu)化,從底層的數(shù)據(jù)庫(kù)調(diào)優(yōu)、底層通訊服務(wù)升級(jí),到上層消息、群、群成員等核心功能的大幅改造。
底層通訊服務(wù)由之前的erlang完整遷移至java技術(shù)棧,服務(wù)可靠性、彈性伸縮、安全性和性能獲得了提升。同時(shí)對(duì)上層偏業(yè)務(wù)的服務(wù)進(jìn)行了改造,極大地提升了接口響應(yīng),服務(wù)穩(wěn)定性也得到了提升,為整個(gè)產(chǎn)品的研發(fā)提供了重要支撐。
目前這套自研的IM 3.0服務(wù)在生產(chǎn)環(huán)境穩(wěn)定運(yùn)行,整體資源消耗比2.0時(shí)期有較大下降。
7、 TripPal辦公衍生服務(wù)
7.1概述
在實(shí)際的企業(yè)辦公場(chǎng)景下,尤其是大型企業(yè)復(fù)雜組織架構(gòu)和管理模式的場(chǎng)景下,TripPal逐漸摸索出了自己的一套行之有效且契合攜程場(chǎng)景的辦公智能應(yīng)用,如搜索中臺(tái),消息卡片,智能審批中臺(tái),角色服務(wù),工作流引擎等。
本文簡(jiǎn)單介紹其中3個(gè)服務(wù)。
7.2智能審批中臺(tái)

智能審批中臺(tái)在集成攜程自有的審批系統(tǒng)的同時(shí)也集成了自研的智能審批配置服務(wù),該服務(wù)支持用戶自定義整個(gè)審批單及審批流的全部細(xì)節(jié)。

7.3角色服務(wù)

角色服務(wù)在靈活定義角色范圍及基礎(chǔ)角色的基礎(chǔ)上,支持用戶靈活調(diào)整,動(dòng)態(tài)管理,且自動(dòng)接入審批中臺(tái),同時(shí)打通應(yīng)用對(duì)接渠道。
整個(gè)角色服務(wù)在產(chǎn)品定義上分為如下表4個(gè)主要概念:

7.4在線文檔

在線文檔服務(wù)主要提供文檔的在線協(xié)作能力,支持用戶同時(shí)/實(shí)時(shí)的查看、編輯、保存和分享的能力。同時(shí)結(jié)合IM實(shí)現(xiàn)通知和反饋等功能。
技術(shù)實(shí)現(xiàn)上,在線文檔是采用CRDT算法實(shí)現(xiàn)的無(wú)沖突merge(LastWrite Wins)、多端最終一致的分布式方案,同時(shí)兼具高可用、可容錯(cuò)的特性,在服務(wù)器發(fā)生故障時(shí),允許Shift至另一臺(tái)機(jī)器上繼續(xù)執(zhí)行,即使服務(wù)端完全宕機(jī),客戶端依然能夠離線工作。
8、 TripPal高可用的實(shí)踐

目前TripPal部署在3個(gè)機(jī)房,分為公有云1個(gè)機(jī)房及私有云2個(gè)機(jī)房。
總體架構(gòu)在應(yīng)用多機(jī)房部署、數(shù)據(jù)層跨機(jī)房DRC的基礎(chǔ)上,采用就近訪問(wèn)的原則進(jìn)行服務(wù)訪問(wèn),其中一旦發(fā)生任意2個(gè)機(jī)房全掛的情況,都能保證系統(tǒng)內(nèi)的核心應(yīng)用仍能提供服務(wù)。
其中公有云機(jī)房的一期部署方案已經(jīng)完成,二期部署方案和測(cè)試計(jì)劃預(yù)計(jì)于7月完成,屆時(shí)可以和大家分享一下混合云方案的一些細(xì)節(jié)和歷程。
9、 開放平臺(tái)的未來(lái)架構(gòu)及演進(jìn)方向
9.1概述
開放平臺(tái)主要面向兩類群體,開發(fā)者和用戶。
所以主要有兩個(gè)方向:
1)一是便捷開發(fā),主要圍繞降低開發(fā)者門檻、較低研發(fā)成本,打通不同開發(fā)者、應(yīng)用之間的壁壘,實(shí)現(xiàn)生態(tài)共享。
2)另一方面,針對(duì)實(shí)際用戶,在提高用戶體驗(yàn)、數(shù)據(jù)安全的同時(shí),實(shí)現(xiàn)用戶服務(wù)能力整合和主動(dòng)發(fā)現(xiàn)。
9.2開發(fā)者
在這方面,目前主流開放平臺(tái)已經(jīng)對(duì)開發(fā)者提供了強(qiáng)大的支持。
主要形式分為以下3種。
1)前端信任:
前端信任的目的是通過(guò)減少或杜絕開發(fā)者后端跟開放平臺(tái)OpenAPI交互的方式,來(lái)降低開發(fā)者接入門檻,減少工作量。主要的做法是通過(guò)權(quán)限控制、簽名、加密等手段使得小程序能夠在前端拿到可信數(shù)據(jù)。

2)低代碼(Low-Code):
由于大量的互聯(lián)網(wǎng)業(yè)務(wù)屬于簡(jiǎn)單交互或模型化交互,以此為出發(fā)點(diǎn),基于構(gòu)建合理模型、簡(jiǎn)單業(yè)務(wù)函數(shù)等形式,可以允許開發(fā)者通過(guò)拖拽組件、簡(jiǎn)單偽業(yè)務(wù)代碼等形式提供編程入口,可以大幅度降低開發(fā)者的研發(fā)門檻和成本,打破用戶和開發(fā)者界線,提高開放平臺(tái)整體生態(tài)的活力。

3)ServerLess:
基于云原生的ServerLess結(jié)合低代碼,開放開發(fā)者的云端編程入口,同時(shí)提供云端基礎(chǔ)組件,允許開發(fā)者無(wú)需部署實(shí)際的后端應(yīng)用服務(wù),極大降低的開發(fā)者的運(yùn)營(yíng)維護(hù)門檻。
9.3用戶層面
目前業(yè)界主流開放平臺(tái)在對(duì)用戶本身的服務(wù)能力整合和挖掘上,投入的都比較少,也沒(méi)有比較成熟的實(shí)踐,我們認(rèn)為在這方面可以圍繞兩個(gè)點(diǎn)展開。
一方面:第三方應(yīng)用治理模式向商城化的轉(zhuǎn)型。常規(guī)開放平臺(tái)的應(yīng)用治理和推廣,基本是應(yīng)用方獨(dú)立管理和推廣,但是隨著應(yīng)用數(shù)量的大幅度增加,以及應(yīng)用方單方面推廣難度較大等原因,亟需開放平臺(tái)從生態(tài)整體角度進(jìn)行支持和治理。這樣可以在安全性、可維護(hù)性、便捷性等維度上對(duì)應(yīng)用進(jìn)行正向反饋,實(shí)現(xiàn)開放平臺(tái)應(yīng)用生態(tài)的可持續(xù)性和能力共享。同時(shí),在特定場(chǎng)景下,結(jié)合用戶分析、大數(shù)據(jù)及AI,提高用戶主動(dòng)或被動(dòng)的應(yīng)用發(fā)現(xiàn)能力。

另一方面:構(gòu)建符合應(yīng)用間開放協(xié)議的軟件聯(lián)盟,打破應(yīng)用壁壘,圍繞服務(wù)集成、開放應(yīng)用的核心原則,使得不同的互聯(lián)網(wǎng)業(yè)務(wù)或行為在一定程度上實(shí)現(xiàn)數(shù)據(jù)/能力共享。一般情況下,一個(gè)復(fù)雜互聯(lián)網(wǎng)業(yè)務(wù)通常由多個(gè)異構(gòu)子業(yè)務(wù)/子應(yīng)用構(gòu)成,這樣,通過(guò)應(yīng)用拆分、開放共享等形式,在一定程度上使復(fù)雜的互聯(lián)網(wǎng)業(yè)務(wù)更加精細(xì)化、輕量化、可擴(kuò)展。
9.4開放平臺(tái)標(biāo)準(zhǔn)化、互通
目前國(guó)內(nèi)外各大互聯(lián)網(wǎng)公司、機(jī)構(gòu)和組織都搭建了多種開放平臺(tái),用于提供各種各樣的信息服務(wù),在可以預(yù)見(jiàn)的未來(lái),各個(gè)平臺(tái)之間會(huì)有一個(gè)整合、標(biāo)準(zhǔn)化、互通的可能性。
那么構(gòu)建標(biāo)準(zhǔn)開放協(xié)議,使得開放平臺(tái)向底層沉淀的過(guò)程則至關(guān)重要。
10、 本文小結(jié)
通過(guò)實(shí)現(xiàn)基本IM開放平臺(tái)架構(gòu),以及各種衍生服務(wù),我們總結(jié)出了IM開放平臺(tái)的一些核心能力。
主要是:
- 1)服務(wù)集成:根據(jù)不同的業(yè)務(wù)場(chǎng)景集成并提供相應(yīng)場(chǎng)景下的基礎(chǔ)服務(wù)能力;
- 2)開放應(yīng)用:提供第三方接入能力;
- 3)高性能、高可用。
11、參考資料
[1] 零基礎(chǔ)IM開發(fā)入門(一):什么是IM系統(tǒng)?
[2] 從零到卓越:京東客服即時(shí)通訊系統(tǒng)的技術(shù)架構(gòu)演進(jìn)歷程
[3] 瓜子IM智能客服系統(tǒng)的數(shù)據(jù)架構(gòu)設(shè)計(jì)(整理自現(xiàn)場(chǎng)演講,有配套PPT)
[4] 從游擊隊(duì)到正規(guī)軍(一):馬蜂窩旅游網(wǎng)的IM系統(tǒng)架構(gòu)演進(jìn)之路
[5] 一套高可用、易伸縮、高并發(fā)的IM群聊、單聊架構(gòu)方案設(shè)計(jì)實(shí)踐
[6] 淺談IM系統(tǒng)的架構(gòu)設(shè)計(jì)
[7] 簡(jiǎn)述移動(dòng)端IM開發(fā)的那些坑:架構(gòu)設(shè)計(jì)、通信協(xié)議和客戶端
[8] 一套海量在線用戶的移動(dòng)端IM架構(gòu)設(shè)計(jì)實(shí)踐分享(含詳細(xì)圖文)
[9] 一套原創(chuàng)分布式即時(shí)通訊(IM)系統(tǒng)理論架構(gòu)方案
[10] 一套億級(jí)用戶的IM架構(gòu)技術(shù)干貨(上篇):整體架構(gòu)、服務(wù)拆分等
[11] 從新手到專家:如何設(shè)計(jì)一套億級(jí)消息量的分布式IM系統(tǒng)
[12] 企業(yè)微信的IM架構(gòu)設(shè)計(jì)揭秘:消息模型、萬(wàn)人群、已讀回執(zhí)、消息撤回等
[13] 阿里IM技術(shù)分享(三):閑魚億級(jí)IM消息系統(tǒng)的架構(gòu)演進(jìn)之路
[14] 基于實(shí)踐:一套百萬(wàn)消息量小規(guī)模IM系統(tǒng)技術(shù)要點(diǎn)總結(jié)
[15] 跟著源碼學(xué)IM(十):基于Netty,搭建高性能IM集群(含技術(shù)思路+源碼)
[16] 一套十萬(wàn)級(jí)TPS的IM綜合消息系統(tǒng)的架構(gòu)實(shí)踐與思考
[17] 直播系統(tǒng)聊天技術(shù)(八):vivo直播系統(tǒng)中IM消息模塊的架構(gòu)實(shí)踐
[18] 融云技術(shù)分享:全面揭秘億級(jí)IM消息的可靠投遞機(jī)制
[19] 得物從0到1自研客服IM系統(tǒng)的技術(shù)實(shí)踐之路
[20] 一套分布式IM即時(shí)通訊系統(tǒng)的技術(shù)選型和架構(gòu)設(shè)計(jì)
[21] 微信團(tuán)隊(duì)分享:來(lái)看看微信十年前的IM消息收發(fā)架構(gòu),你做到了嗎
(本文已同步發(fā)布于:http://www.52im.net/thread-4690-1-1.html)
作者:Jack Jiang (點(diǎn)擊作者姓名進(jìn)入Github)
出處:http://www.52im.net/space-uid-1.html
交流:歡迎加入即時(shí)通訊開發(fā)交流群 215891622
討論:http://www.52im.net/
Jack Jiang同時(shí)是【原創(chuàng)Java
Swing外觀工程BeautyEye】和【輕量級(jí)移動(dòng)端即時(shí)通訊框架MobileIMSDK】的作者,可前往下載交流。
本博文
歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明出處(也可前往 我的52im.net 找到我)。