默認
打賞 發表評論 10
想開發IM:買成品怕坑?租第3方怕貴?找開源自已擼?盡量別走彎路了... 找站長給點建議
來自阿里OpenIM:打造安全可靠即時通訊服務的技術實踐分享
閱讀(31984) | 評論(10 收藏4 淘帖1 1

前言


即時通訊作為移動應用的常用組件,開發起來卻并不簡單,除了需要研究通訊協議,保證安全性,還要應對復雜的移動網絡情況,以提供高可用性的服務。OpenIM是阿里巴巴推出的,集成于阿里百川項目中的移動端IM開放服務。阿里百川是阿里巴巴集團無線開放平臺,為移動開發者(涵蓋移動創業者)提供快速搭建APP、加速APP商業化、提升用戶體驗的解決方案。

受訪者介紹


敖閏(符小寶),旺旺團隊技術總監。一直從事移動互聯網相關產品研發工作。加入阿里前,主導開發Qualcomm BREW平臺上WWW Embedded Browser。2009年加入阿里后負責云OS Framework及Apps工作,2012年開始負責阿里旺旺團隊的研發工作。

OpenIM目前的團隊配置情況


OpenIM來自于旺旺事業部,旺旺事業部歷史比較悠久,從2003年淘寶成立初期,旺旺團隊同時成立,旺旺產品和淘寶一起成長,迅速成長為全球最大的客服溝通平臺(日均消息量10億級,DAU億級)。目前團隊上百人,包括產品運營團隊,技術團隊,測試團隊等,其中技術團隊含 IM服務端技術團隊,及全平臺的客戶端技術團隊(Android, iOS, Windows, Mac, H5) 。已授權IM相關專利數近百項。

OpenIM介紹以及在業務上的特色


OpenIM是阿里巴巴面向應用開發者開放的免費即時通信服務,由阿里旺旺團隊提供。作為即時通訊基礎組件,已經支持了手機淘寶,阿里旺旺,旺信,天貓,聚劃算,去啊等阿里系內部應用。現在,開發者基于OpenIM,可量身定制“類微信”“類旺信”“類千牛”的應用。

阿里希望構建云(阿里提供的基礎服務)+端(各類APP)的全新移動時代商業生態,來滿足消費者個性化、場景化的無線生活和無處不在的需求。移動互聯網時代,為了增強人與人之間的連接,各類App都需要基礎的溝通功能。開發者開發一套高可用性的IM系統,成本非常高。我們將擁有12年技術沉淀、歷經多次雙十一考驗的即時通訊能力及客服平臺能力開放出來,幫助開發者輕松實現溝通功能,降低App開發成本。

OpenIM除了基礎的IM功能之外,同時開放的還有全球最大的客服平臺功能。基于該客服平臺的旺旺/千牛,目前在電商行業已服務上千萬賣家。

大規模即時通訊技術上的難點


大概有下面四個技術難點:

  • 如何確保系統的高可用性?因為IM服務一旦中斷,對用戶體驗的傷害非常大,所以,一定要保證服務的高可用性。
  • 如何在移動網絡環境下優化電量,流量,及長連接的健壯性?現在移動網絡有2G、3G、4G各種制式,并且隨時可能切換和中斷,移動網絡優化可以說是面向移動服務的共同問題。
  • 如何確保IM系統的整體安全?因為用戶的消息是個人隱私,因此要從多個層面來保證IM系統的安全性。
  • 如何降低開發者集成門檻?這個是針對第三方IM服務來說的,如果集成成本太高,開發者用起來不方便,在實際使用中也會出現各種問題。

如何確保IM的高可用性?OpenIM的服務端架構又是怎樣的?


經過多年雙11的考驗,我們IM服務的可用性持續保持99.99%以上。旺旺團隊逐步形成了系統高可用性解決方案。

具體策略包括:

  • 水平伸縮的系統架構:
    全系統無單點設計,各個業務系統環節均可水平伸縮,同時負載均衡系統,會實時的進行流量分配,讓整個系統運行在合理的水位。
  • 異地多活去中心化部署:
    去中心化的異地多機房部署,多個機房同時提供服務,任何一個點的故障,其他機房能夠即時承接。
  • 自動化故障隔離容災系統:
    對于服務器的故障,能夠實時的檢測并且自動的隔離,快速的切換流量到正常的服務器。
  • 完備的監控和預警體系:
    基于阿里巴巴運維體系的完備的監控和預警,讓我們對整個系統的運行狀態了如指掌。

來自阿里OpenIM:打造安全可靠即時通訊服務的技術實踐分享_62622356gw1etky8s9ar7j20ok0i6dh8.jpg

整個系統分為:

  • 接入層(客戶端):
    負責客戶端接入。
  • 接入層(服務端):
    負責App Server和OpenIM服務器的對接。
  • 協議路由:
    消息路由和業務邏輯層,負責消息路由和各種業務邏輯處理。
  • 數據層:
    負責用戶、業務數據的緩存,持久化等。

OpenIM針對移動網絡的特點做了哪些優化?


做的優化有:

  • 極簡協議:
    OpenIM采用完全私有的二進制協議:確保數據加密安全的同時,流量消耗極少。同時心跳包協議對IM的電量和流量影響很大,OpenIM在心跳包協議上進行了極簡設計:僅 1 Byte 。
  • 智能心跳:
    OpenIM獨特的保活機制,自動適應不同的網絡環境,智能調整心跳頻率,將參數調整到最優狀態。
  • 智能喚醒:
    眾所周知,Android手機電量消耗一直為大家所詬病。 后臺各種應用不斷喚醒手機,致使手機待機時間大為縮短。OpenIM能以最低限度喚醒手機進行必要的保活,保證連接的健康及消息的及時到達: OpenIM與系統以及其他應用進行交互,如果有其他應用喚醒了手機,OpenIM將避免冗余喚醒,節約設備的電量消耗。
  • 多路復用,共享連接:
    OpenIM的SDK廣泛使用在阿里的各移動應用中,如手機淘寶、天貓、旺信、千牛、去啊等。通常來說,多個IM App會有多條物理TCP長連接,OpenIM支持多應用共享復用一條TCP長連接,保活的流量將從N倍變為1倍; 喚醒手機次數也由N個應用喚醒變為1個應用喚醒。由于這些阿里應用覆蓋用戶群較大,OpenIM會自動共享阿里應用已經存在的物理連接,極大減少電量和流量開銷。
  • 多路復用, 共同保活:
    同時,Android系統資源緊張時會在后臺清理進程,當某個OpenIM所在應用被清理后,通常OpenIM消息也就無法實時觸達。但由于“多路復用”機制,只要當前任一應用(包括阿里應用)還存活,OpenIM均能順利工作,有效提升了長連接的健壯性。

OpenIM在安全上做了哪些事情?


基于旺旺海量消息(每日十億級)數據樣本及旺旺安全的多年技術沉淀,OpenIM為開發者提供了與支付寶,淘寶,天貓同等級別的安全服務,從賬號安全,傳輸安全,存儲安全,內容安全等各個維度提供了完整的安全方案。

  • 帳號安全:
    OpenIM各自域的用戶帳號經過MD5加密后進行傳輸和存儲,保證開發者用戶數據的私密性及安全。OpenIM客服帳號,享受阿里系賬號的所有安全功能:數字證書,一鍵校驗,手機驗證等。
  • 數據傳輸安全:
    包括:完全私有的二進制通訊協議;動態秘鑰,全鏈路加密傳輸。
  • 本地存儲安全:
    就是將本地數據庫加密。
  • 內容安全:
    • 惡意內容檢測:支持可配置的關鍵字系統,支持風險提醒和過濾;支持惡意鏈接(釣魚鏈接等)和二維碼圖片的風險識別:基于阿里系內最大的惡意鏈接庫(WenKing)。
    • 反垃圾安全:基于每天海量消息(十億級)和用戶(億級)綜合行為的基礎數據,構建的大型反垃圾系統,實現惡意行為的實時監控。基于文本及圖片模型的垃圾識別算法,支持惡意內容的實時監控。惡意內容樣本的系統自學習,提升系統的召回率。

全站即時通訊技術資料分類


[1] 網絡編程基礎資料:
TCP/IP詳解 - 第11章·UDP:用戶數據報協議
TCP/IP詳解 - 第17章·TCP:傳輸控制協議
TCP/IP詳解 - 第18章·TCP連接的建立與終止
TCP/IP詳解 - 第21章·TCP的超時與重傳
理論經典:TCP協議的3次握手與4次揮手過程詳解
理論聯系實際:Wireshark抓包分析TCP 3次握手、4次揮手過程
計算機網絡通訊協議關系圖(中文珍藏版)
NAT詳解:基本原理、穿越技術(P2P打洞)、端口老化等
UDP中一個包的大小最大能多大?
Java新一代網絡編程模型AIO原理及Linux系統AIO介紹
NIO框架入門(三):iOS與MINA2、Netty4的跨平臺UDP雙向通信實戰
NIO框架入門(四):Android與MINA2、Netty4的跨平臺UDP雙向通信實戰
>> 更多同類文章 ……

[2] 有關IM/推送的通信格式、協議的選擇:
為什么QQ用的是UDP協議而不是TCP協議?
移動端即時通訊協議選擇:UDP還是TCP?
如何選擇即時通訊應用的數據傳輸格式
強列建議將Protobuf作為你的即時通訊應用數據傳輸格式
移動端IM開發需要面對的技術問題(含通信協議選擇)
簡述移動端IM開發的那些坑:架構設計、通信協議和客戶端
理論聯系實際:一套典型的IM通信協議設計詳解
58到家實時消息系統的協議設計等技術實踐分享
>> 更多同類文章 ……

[3] 有關IM/推送的心跳保活處理:
Android進程保活詳解:一篇文章解決你的所有疑問
Android端消息推送總結:實現原理、心跳保活、遇到的問題等
為何基于TCP協議的移動端IM仍然需要心跳保活機制?
微信團隊原創分享:Android版微信后臺保活實戰分享(進程保活篇)
微信團隊原創分享:Android版微信后臺保活實戰分享(網絡保活篇)
移動端IM實踐:實現Android版微信的智能心跳機制
移動端IM實踐:WhatsApp、Line、微信的心跳策略分析
>> 更多同類文章 ……

[4] 有關WEB端即時通訊開發:
新手入門貼:史上最全Web端即時通訊技術原理詳解
Web端即時通訊技術盤點:短輪詢、Comet、Websocket、SSE
SSE技術詳解:一種全新的HTML5服務器推送事件技術
Comet技術詳解:基于HTTP長連接的Web端實時通信技術
WebSocket詳解(一):初步認識WebSocket技術
socket.io實現消息推送的一點實踐及思路
>> 更多同類文章 ……

[5] 有關IM架構設計:
淺談IM系統的架構設計
簡述移動端IM開發的那些坑:架構設計、通信協議和客戶端
一套原創分布式即時通訊(IM)系統理論架構方案
從零到卓越:京東客服即時通訊系統的技術架構演進歷程
蘑菇街即時通訊/IM服務器開發之架構選擇
騰訊QQ1.4億在線用戶的技術挑戰和架構演進之路PPT
微信技術總監談架構:微信之道——大道至簡(演講全文)
如何解讀《微信技術總監談架構:微信之道——大道至簡》
快速裂變:見證微信強大后臺架構從0到1的演進歷程(一)
17年的實踐:騰訊海量產品的技術方法論
>> 更多同類文章 ……

[6] 有關IM安全的文章:
即時通訊安全篇(一):正確地理解和使用Android端加密算法
即時通訊安全篇(二):探討組合加密算法在IM中的應用
即時通訊安全篇(三):常用加解密算法與通訊安全講解
即時通訊安全篇(四):實例分析Android中密鑰硬編碼的風險
傳輸層安全協議SSL/TLS的Java平臺實現簡介和Demo演示
理論聯系實際:一套典型的IM通信協議設計詳解(含安全層設計)
微信新一代通信安全解決方案:基于TLS1.3的MMTLS詳解
來自阿里OpenIM:打造安全可靠即時通訊服務的技術實踐分享
>> 更多同類文章 ……

[7] 有關實時音視頻開發:
即時通訊音視頻開發(一):視頻編解碼之理論概述
即時通訊音視頻開發(二):視頻編解碼之數字視頻介紹
即時通訊音視頻開發(三):視頻編解碼之編碼基礎
即時通訊音視頻開發(四):視頻編解碼之預測技術介紹
即時通訊音視頻開發(五):認識主流視頻編碼技術H.264
即時通訊音視頻開發(六):如何開始音頻編解碼技術的學習
即時通訊音視頻開發(七):音頻基礎及編碼原理入門
即時通訊音視頻開發(八):常見的實時語音通訊編碼標準
即時通訊音視頻開發(九):實時語音通訊的回音及回音消除概述
即時通訊音視頻開發(十):實時語音通訊的回音消除技術詳解
即時通訊音視頻開發(十一):實時語音通訊丟包補償技術詳解
即時通訊音視頻開發(十二):多人實時音視頻聊天架構探討
即時通訊音視頻開發(十三):實時視頻編碼H.264的特點與優勢
即時通訊音視頻開發(十四):實時音視頻數據傳輸協議介紹
即時通訊音視頻開發(十五):聊聊P2P與實時音視頻的應用情況
即時通訊音視頻開發(十六):移動端實時音視頻開發的幾個建議
即時通訊音視頻開發(十七):視頻編碼H.264、V8的前世今生
簡述開源實時音視頻技術WebRTC的優缺點
良心分享:WebRTC 零基礎開發者教程(中文)
>> 更多同類文章 ……

[8] IM開發綜合文章:
移動端IM開發需要面對的技術問題
開發IM是自己設計協議用字節流好還是字符流好?
請問有人知道語音留言聊天的主流實現方式嗎?
IM系統中如何保證消息的可靠投遞(即QoS機制)
談談移動端 IM 開發中登錄請求的優化
完全自已開發的IM該如何設計“失敗重試”機制?
微信對網絡影響的技術試驗及分析(論文全文)
即時通訊系統的原理、技術和應用(技術論文)
開源IM工程“蘑菇街TeamTalk”的現狀:一場有始無終的開源秀
>> 更多同類文章 ……

[9] 開源移動端IM技術框架資料:
開源移動端IM技術框架MobileIMSDK:快速入門
開源移動端IM技術框架MobileIMSDK:常見問題解答
開源移動端IM技術框架MobileIMSDK:壓力測試報告
開源移動端IM技術框架MobileIMSDK:Android版Demo使用幫助
開源移動端IM技術框架MobileIMSDK:Java版Demo使用幫助
開源移動端IM技術框架MobileIMSDK:iOS版Demo使用幫助
開源移動端IM技術框架MobileIMSDK:Android客戶端開發指南
開源移動端IM技術框架MobileIMSDK:Java客戶端開發指南
開源移動端IM技術框架MobileIMSDK:iOS客戶端開發指南
開源移動端IM技術框架MobileIMSDK:Server端開發指南
>> 更多同類文章 ……

[10] 有關推送技術的文章:
iOS的推送服務APNs詳解:設計思路、技術原理及缺陷等
Android端消息推送總結:實現原理、心跳保活、遇到的問題等
掃盲貼:認識MQTT通信協議
一個基于MQTT通信協議的完整Android推送Demo
求教android消息推送:GCM、XMPP、MQTT三種方案的優劣
移動端實時消息推送技術淺析
掃盲貼:淺談iOS和Android后臺實時消息推送的原理和區別
絕對干貨:基于Netty實現海量接入的推送服務技術要點
移動端IM實踐:谷歌消息推送服務(GCM)研究(來自微信)
為何微信、QQ這樣的IM工具不使用GCM服務推送消息?
>> 更多同類文章 ……

[11] 更多即時通訊技術好文分類:
http://www.emxvra.tw/forum.php?mod=collection&op=all

(原文鏈接:http://www.infoq.com/cn/news/2015/07/openim-interview

即時通訊網 - 即時通訊開發者社區! 來源: - 即時通訊開發者社區!

上一篇:微信團隊原創分享:Android版微信后臺保活實戰分享(進程保活篇)下一篇:即時通訊安全篇(一):正確地理解和使用Android端加密算法

本帖已收錄至以下技術專輯

推薦方案
評論 10
那阿里悟空又是個什么鬼!
簽名: 好久沒來了,簽個到
態感謝了!
簽名: asdf
好全的資料!這是一個寶庫
簽名: asdf
沒有用過
簽名: 來看看啊
最近公司在使用openfire
握草,阿里還整了這么個東東,長見識了,這個OpenIM能直接拿來用嗎?有沒有大神用過?
簽名: 該會員沒有填寫今日想說內容.
引用:ashura12342000 發表于 2017-05-03 20:04
握草,阿里還整了這么個東東,長見識了,這個OpenIM能直接拿來用嗎?有沒有大神用過?

跟那阿里悟空云IM一樣,差不多都是面子貨,整著整著就沒聲音了
簽名: 《極致優化,iOS版微信編譯速度3倍提升的實踐總結》http://www.emxvra.tw/thread-2873-1-1.html
剛開發了一個基于openIM的app,可惜老板要我推翻openIM,自己寫個即時通訊服務器,我的內心是崩潰的
簽名: 該會員沒有填寫今日想說內容.
引用:tiandao 發表于 2017-06-28 09:04
剛開發了一個基于openIM的app,可惜老板要我推翻openIM,自己寫個即時通訊服務器,我的內心是崩潰的

好悲情
簽名: 《極致優化,iOS版微信編譯速度3倍提升的實踐總結》http://www.emxvra.tw/thread-2873-1-1.html
不錯
簽名: 心情好
打賞樓主 ×
使用微信打賞! 使用支付寶打賞!

返回頂部
777彩票走势图表