乾貨 | 日訪問過億,辦公IM及開放式平臺在攜程的實踐
{"type":"doc","content":[{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"簡介"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"攜程內部的辦公IM項目最早在2016年立項,經歷了初期簡單辦公場景下的純IM服務,到支持簡單辦公組件的IM應用,又演變爲一體化辦公集成平臺,進而演變爲目前集成IM功能的開放式企業效率平臺。本文總結了這些年的發展歷程及未來的演進方向,並着重從高可用、高性能和可擴展的角度,探討開放式平臺的技術實現及發展方向。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"一、什麼是IM"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/f9\/f9a8c1ee97a16e6c1e6f14b931476391.jpeg","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"IM(Instant Message)即時消息,是一種通過網絡提供實時消息傳輸的在線溝通技術。在移動互聯網時代,IM的使用變得越來越廣泛,通過各種技術手段使得用戶之間的交流成本變的極低,溝通效率和用戶體驗有極大的提升。而且IM的出現極大地改變了目前互聯網應用的形態,多數互聯網應用只要做到了一定規模,一定會有自身IM的需求,而不是單純地僅僅依託第三方(例如微信、雲信等)。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"二、攜程辦公IM的發展歷程"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/3a\/3ad37371278a330e73afcee70df25f5f.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"早期攜程使用微軟的IM軟件lync和自研的純IM軟件CtripTeam來支持企業內的溝通需求,這些軟件在維護性、拓展性和可用性上都或多或少存在一些缺陷。同時隨着互聯網的發展,也逐漸不適合日益增長的辦公需求和用戶體驗。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2017年左右,使用基於ejabberd+erlang的自研IM服務的Cchat項目應運而生,該項目的主要目標是在採用自研IM的基礎上,實現IM與辦公的結合。在完善IM服務的基礎上,支持了一些常規的辦公場景,如電話、假單、考勤、OA等,通常採用嵌入外部頁面、跳轉外部地址等方式提供服務。這個改造項目奠定了攜程辦公IM繼續發展的基礎。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"隨着項目的深入,最初的系統交互模式及服務管理模式逐漸不適用越來越複雜的辦公場景及服務治理需求。於是在2019年上馬了TripPal的改造項目,在結合公司國際化戰略的基礎上,傾力打造小程序平臺,服務號等基礎服務。在梳理、優化原有服務的同時,打造了諸多衍生服務。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2020年中開始,在繼續推進企業內辦公一站式平臺的基礎上,我們需要支持更多的外部場景,實際需求促使我們向開放式平臺轉型,這在服務整體架構、安全性、擴展性等方面都提出了新的要求及挑戰。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"三、攜程TripPal開放平臺實踐"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"3.1 總體架構"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/85\/854f68655de6803e49bc45e3fa68a77a.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"3.1.1 Gateway網關層"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這一層是所有請求調用流量的入口,主要功能如下:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"服務路由;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"集中式限流、風控、日誌監控等功能;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"調用IDS (Identity Service) 驗證請求的合法性,驗證通過後,可以將用戶ID、Token等基本信息,通過 HttpHeader 的方式向後端服務透傳,後端服務可以直接使用UserID,也可以再次對Token進行認證;"}]}]}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"3.1.2 IDS (Identity Service) 服務"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"IDS同時支持多種不同類型的訪問令牌的鑑權,同時還負責令牌的頒發,以及RBAC+模塊級別的接口控權。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"另外,針對開放小程序,TripPal提供兩種認證方式:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1)常規的Oauth第三方模式接入。"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/36\/361a33fa582f462e55505d8c7459df22.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2)另一種是基於Oauth+開放平臺簽名的第三方認證,對於接入方相對簡單。"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/39\/394c0b9d42eec4359074ef81b5449484.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"3.1.3 微服務層"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這一層是整個系統的業務層,具體包含三種類型的微服務:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"TripPal開放平臺內部系統微服務,只有在特定用戶認證和權限驗證通過之後,外部才能訪問;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"開放平臺對外提供的OpenAPI;採用Oauth+RBAC的方式控制權限;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"自研小程序後端服務,根據安全需要,所有使用Oauth+模塊權限的第一方小程序服務端;"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"目前TripPal自身的核心微服務應用達到28個,提供全集團的多端(C端、B端)基礎服務能力,服務全公司超過500個業務應用,在線C端用戶均值超過2萬,日訪問量超過億。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"3.2 IM服務"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/62\/6239abce091966addaef20ddd9a8421a.jpeg","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"目前TripPal使用完全自研的基於Java實現的類ejabberd架構,底層採用的XMPP協議進行通訊。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"Tips:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"XMPP全稱是ExtensibleMessageing and Presence Protocol,可擴展消息與存在協議。是目前網絡上開源,最靈活,應用最廣泛的一種即時消息通信協議。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1999年Jeremie Miller,首先提出了Jabber,一種爲實現即時消息和存在的開放技術,後續基於這個協議,開發了一個開源的服務實現jabberd。後續,IETF國際標準組織介入,成立Extensible Messageing and Presence Protocol(XMPP)工作組,並開始標準化工作。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2000年,jabberd服務器1.0版本發佈,那時Jabber協議的基本特點(基於XML的流,消息,存在,聯繫人列表等)都被固定下來。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2004年,IETF出版了RFC 3902和RFC3921,定義了XMPP的核心功能,成爲推薦標準。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"後續在2011年,IETF出版了RFC6120和RFC 6121,更新了XMPP的核心定義,替代了之前的RFC 3920和3921。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"目前XMPP協議被XMPP Standards Foundation負責管理運作,集中於在IETF定義的基礎XMPP規範之上,如何開發開放的協議擴展。"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"IM服務端做了大量的系統性的優化,從底層的數據庫調優、底層通訊服務升級,到上層消息、羣、羣成員等核心功能的大幅改造。底層通訊服務由之前的erlang完整遷移至java技術棧,服務可靠性、彈性伸縮、安全性和性能獲得了提升;同時對上層偏業務的服務進行了改造,極大地提升了接口響應,服務穩定性也得到了提升,爲整個產品的研發提供了重要支撐。目前這套自研的IM3.0服務在生產環境穩定運行,整體資源消耗比2.0時期有較大下降。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"3.3 TripPal辦公衍生服務"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在實際的企業辦公場景下,尤其是大型企業複雜組織架構和管理模式的場景下,TripPal逐漸摸索出了自己的一套行之有效且契合攜程場景的辦公智能應用,如搜索中臺,消息卡片,智能審批中臺,角色服務,工作流引擎等。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"本文簡單介紹其中3個服務:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"1)智能審批中臺"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/55\/5576e0a82f3fcc0ddc0616842acc981e.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"智能審批中臺在集成攜程自有的審批系統的同時也集成了自研的智能審批配置服務,該服務支持用戶自定義整個審批單及審批流的全部細節。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":"br"}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/97\/977f334f0dfe4ebb387ecb057734253c.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/6a\/6a5684145e44e1a6aa263a72670ef5bb.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"2)角色服務"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/58\/58f20404940b184c96a51d7546cae9ce.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"角色服務在靈活定義角色範圍及基礎角色的基礎上,支持用戶靈活調整,動態管理,且自動接入審批中臺,同時打通應用對接渠道。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"整個角色服務在產品定義上分爲如下表4個主要概念:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"embedcomp","attrs":{"type":"table","data":{"content":"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.