背景
OpenIM成立之初就將“開源”作為核心戰(zhàn)略來推進,開源充分體現(xiàn)了自由、平等、分享的互聯(lián)網(wǎng)精神。
全球范圍頻繁發(fā)生的數(shù)據(jù)泄露、勒索病毒、隱私濫用等安全事件一次次給企業(yè)敲響警鐘,企業(yè)管理者對數(shù)據(jù)資產(chǎn)的價值、數(shù)據(jù)安全的重要性有了更清晰的認識,數(shù)據(jù)安全成就企業(yè)核心價值。
IM作為核心業(yè)務(wù)數(shù)據(jù),安全的重要性毋庸置疑,OpenIM開源以及私有化部署讓企業(yè)能更放心使用。
如今IM云服務(wù)商收費高企,如何讓企業(yè)低成本、安全、可靠接入IM服務(wù),是OpenIM的歷史使命,也是我們前進的方向。
優(yōu)勢
OpenIM:由前微信技術(shù)專家打造的基于 Go 實現(xiàn)的即時通訊(IM)項目,從服務(wù)端到客戶端SDK開源即時通訊(IM)整體解決方案。開發(fā)文檔完善,代碼100%開源,支持Andorid、iOS原生開發(fā),支持Flutter、uni-app跨端開發(fā),支持小程序、React等所有主流web前端技術(shù)框架, PC支持Electron,可以輕松替代第三方IM云服務(wù)
OpenIM已經(jīng)具備IM和音視頻實時通話的能力,提供SDK 接入和服務(wù)端私有化部署。
現(xiàn)在項目star增長迅速,短短幾周內(nèi)達到1k,微信群的開發(fā)者500人,社區(qū)開發(fā)者30人。
OpenIM誠邀現(xiàn)誠邀全球技術(shù)極客加入開源社區(qū)貢獻代碼,充分發(fā)揚自由、平等、分享的互聯(lián)網(wǎng)精神,共同打造全球開源IM的第一社區(qū)。
官方文檔:
github地址:
https://github.com/OpenIMSDK/Open-IM-Server

歡迎大家貢獻Star和Fork ,轉(zhuǎn)發(fā)并邀請開發(fā)者進群,打造開源IM的No1
為什么要開源
雖然開源工作可能會產(chǎn)生有益的結(jié)果,但它不是慈善行為。將工作發(fā)布為開放源代碼和相應(yīng)的貢獻過程最終會比其他封閉源代碼過程帶來更高的初始投資回報。約翰·納什是著名數(shù)學(xué)家,也是奧斯卡獲獎電影《美麗的心靈》的主角,他因在“合作博弈”方面的工作而獲得諾貝爾經(jīng)濟學(xué)獎。他證明了合作不是零和博弈,通過合作,所有參與者可能會產(chǎn)生比他們的投資更高的回報?,F(xiàn)實世界中最好的例子可能是開源軟件。對于OpenIM來說,主要解決兩類需求,第一對于成本敏感的初創(chuàng)企業(yè),每年幾萬的IM云服務(wù)費用是個不小的開支,而使用OpenIM可以零成本進行替代;第二對于信息安全比較敏感的企業(yè),比如航天、政務(wù)等,如果使用公有云IM服務(wù),企業(yè)內(nèi)部的敏感信息可能存在泄露的風(fēng)險,可能會給企業(yè)帶來滅頂之災(zāi)。
后臺架構(gòu)

服務(wù)端由接入層、邏輯層和存儲層組成,好處在于各個層次能夠依據(jù)業(yè)務(wù)特點專注于自己的事情,提高系統(tǒng)復(fù)用性,降低業(yè)務(wù)間的耦合。
(1)接入層:消息通過 websocket 協(xié)議接入,其他通過 http/https 協(xié)議接入,消息是高頻及核心功能,通過雙協(xié)議路由,體現(xiàn)了輕重分離的設(shè)計思想。
(2)邏輯層:通過 rpc 實現(xiàn)無狀態(tài)邏輯服務(wù),易于平行擴展,消息通過 MQ 解耦。
(3)存儲層:redis 存儲 token 和 seq;mongodb 存儲離線消息,并定時刪除 14 天(可自行配置)前數(shù)據(jù);mysql 存儲全量歷史消息以及用戶相關(guān)資料。數(shù)據(jù)分層存儲,充分利用不同存儲組件的特性。
(4)Etcd:服務(wù)注冊和發(fā)現(xiàn)、以及分布式配置中心。
消息流程

Open-IM 消息模型采用經(jīng)典的收件箱模型,并通過全局 seq 做消息對齊,這里帶來架構(gòu)的簡化,體現(xiàn)了簡單美的架構(gòu)設(shè)計理念。很多開發(fā)者通過網(wǎng)絡(luò)文章,了解到收件箱模型的原理,也知道 seq 的概念,但如何在項目中做權(quán)衡和取舍,愛因斯坦曾經(jīng)說過“事情應(yīng)該力求簡單,不過不能過于簡單”,我們看到很多技術(shù)文章對收件箱模型和 seq 的濫用,要么系統(tǒng)設(shè)計復(fù)雜,要么過于簡單,最后的結(jié)果是系統(tǒng)不穩(wěn)定,消息可達率無法達到要求。以下我們簡單講解消息如何發(fā)送,系統(tǒng)如何簡單解耦,接收方如何實時收到消息,并如何利用 seq 做全局消息對齊,確保消息百分百可達。
客戶端架構(gòu)

客戶端 SDK 負責(zé)和 IM 服務(wù)端交互,本地數(shù)據(jù)存儲和同步,消息、事件回調(diào)。開發(fā)者通過集成 SDK,自行開發(fā)聊天界面 UI,設(shè)置事件監(jiān)聽回調(diào)實現(xiàn)數(shù)據(jù)和 UI 對接。OpenIMSDK 分為三層:網(wǎng)絡(luò)層、邏輯層、存儲層。分層治理,各司其職,實現(xiàn)高效、穩(wěn)定、統(tǒng)一的客戶端架構(gòu)。通過golang實現(xiàn),全終端覆蓋。
OpenIM服務(wù)端一鍵部署

OpenIM集成流程

OpenIM SDK 集成非常簡單,由于開發(fā)者私有化部署,代碼、配置、數(shù)據(jù)都在自家服務(wù)器上,不用向云平臺申請 AppKey 和 Secret,相比第三方 IM 云服務(wù),可見 OpenIM 更安全、可控、自由度更高。
加入我們:
OpenIMgithub開源地址:
https://github.com/OpenIMSDK/Open-IM-Server
OpenIM官網(wǎng) : https://www.rentsoft.cn
OpenIM官方論壇:https://forum.rentsoft.cn/
更多技術(shù)文章:
開源OpenIM:高性能、可伸縮、易擴展的即時通訊架構(gòu)https://forum.rentsoft.cn/thread/3
【OpenIM原創(chuàng)】簡單輕松入門 一文講解WebRTC實現(xiàn)1對1音視頻通信原理https://forum.rentsoft.cn/thread/4
【OpenIM原創(chuàng)】開源OpenIM:輕量、高效、實時、可靠、低成本的消息模型https://forum.rentsoft.cn/thread/1