## **背景**
OpenIM成立之初就将“开源”作为核心战略来推进,开源充分体现了自由、平等、分享的互联网精神。
全球范围频繁发生的数据泄露、勒索病毒、隐私滥用等安全事件一次次给企业敲响警钟,企业管理者对数据资产的价值、数据安全的重要性有了更清晰的认识,数据安全成就企业核心价值。
IM作为核心业务数据,安全的重要性毋庸置疑,OpenIM开源以及私有化部署让企业能更放心使用。
如今IM云服务商收费高企,如何让企业低成本、安全、可靠接入IM服务,是OpenIM的历史使命,也是我们前进的方向。
## **优势**
OpenIM:由前微信技术专家打造的基于 Go 实现的即时通讯(IM)项目,从服务端到客户端SDK开源即时通讯(IM)整体解决方案。开发文档完善,代码100%开源,支持Andorid、iOS原生开发,支持Flutter、uni-app跨端开发,支持小程序、React等所有主流web前端技术框架, PC支持Electron,可以轻松替代第三方IM云服务
OpenIM已经具备IM和音视频实时通话的能力,提供SDK 接入和服务端私有化部署。
现在项目star增长迅速,短短几周内达到1k,微信群的开发者500人,社区开发者30人。
OpenIM诚邀现诚邀全球技术极客加入开源社区贡献代码,充分发扬自由、平等、分享的互联网精神,共同打造全球开源IM的第一社区。
官方文档:
https://doc.rentsoft.cn/
github地址:
https://github.com/OpenIMSDK/Open-IM-Server![图标](https://pic3.zhimg.com/v2-5ec0d3b00b2e05b2768e1d3d20e61cc3_180x120.jpg)
欢迎大家贡献Star和Fork ,转发并邀请开发者进群,打造开源IM的No1
## **为什么要开源**
虽然开源工作可能会产生有益的结果,但它不是慈善行为。将工作发布为开放源代码和相应的贡献过程最终会比其他封闭源代码过程带来更高的初始投资回报。约翰·纳什是著名数学家,也是奥斯卡获奖电影《美丽的心灵》的主角,他因在“合作博弈”方面的工作而获得诺贝尔经济学奖。他证明了合作不是零和博弈,通过合作,所有参与者可能会产生比他们的投资更高的回报。现实世界中最好的例子可能是开源软件。对于OpenIM来说,主要解决两类需求,第一对于成本敏感的初创企业,每年几万的IM云服务费用是个不小的开支,而使用OpenIM可以零成本进行替代;第二对于信息安全比较敏感的企业,比如航天、政务等,如果使用公有云IM服务,企业内部的敏感信息可能存在泄露的风险,可能会给企业带来灭顶之灾。
## **后台架构**
![img](https://pic1.zhimg.com/80/v2-326fdd6de6f30d2dc70224ffa3d673bc_720w.png)
服务端由接入层、逻辑层和存储层组成,好处在于各个层次能够依据业务特点专注于自己的事情,提高系统复用性,降低业务间的耦合。
(1)接入层:消息通过 websocket 协议接入,其他通过 http/https 协议接入,消息是高频及核心功能,通过双协议路由,体现了轻重分离的设计思想。
(2)逻辑层:通过 rpc 实现无状态逻辑服务,易于平行扩展,消息通过 MQ 解耦。
(3)存储层:redis 存储 token 和 seq;mongodb 存储离线消息,并定时删除 14 天(可自行配置)前数据;mysql 存储全量历史消息以及用户相关资料。数据分层存储,充分利用不同存储组件的特性。
(4)Etcd:服务注册和发现、以及分布式配置中心。
## **消息流程**
![img](https://pic1.zhimg.com/80/v2-bbb763ffe09cf59ab629a7d7c1b0b452_720w.jpeg)
Open-IM 消息模型采用经典的收件箱模型,并通过全局 seq 做消息对齐,这里带来架构的简化,体现了简单美的架构设计理念。很多开发者通过网络文章,了解到收件箱模型的原理,也知道 seq 的概念,但如何在项目中做权衡和取舍,爱因斯坦曾经说过“事情应该力求简单,不过不能过于简单”,我们看到很多技术文章对收件箱模型和 seq 的滥用,要么系统设计复杂,要么过于简单,最后的结果是系统不稳定,消息可达率无法达到要求。以下我们简单讲解消息如何发送,系统如何简单解耦,接收方如何实时收到消息,并如何利用 seq 做全局消息对齐,确保消息百分百可达。
## **客户端架构**
![img](https://pic1.zhimg.com/80/v2-f30996a5152678c8b7b7b3b05089266d_720w.jpeg)
客户端 SDK 负责和 IM 服务端交互,本地数据存储和同步,消息、事件回调。开发者通过集成 SDK,自行开发聊天界面 UI,设置事件监听回调实现数据和 UI 对接。OpenIMSDK 分为三层:网络层、逻辑层、存储层。分层治理,各司其职,实现高效、稳定、统一的客户端架构。通过golang实现,全终端覆盖。
## **OpenIM服务端一键部署**
![img](https://pic1.zhimg.com/80/v2-864199f07c98ba51d5135a8420c4fa3a_720w.png)
## **OpenIM集成流程**
![img](https://pic2.zhimg.com/80/v2-861d0f5d37a1869a7cf19009b3a0a65b_720w.png)
OpenIM SDK 集成非常简单,由于开发者私有化部署,代码、配置、数据都在自家服务器上,不用向云平台申请 AppKey 和 Secret,相比第三方 IM 云服务,可见 OpenIM 更安全、可控、自由度更高。
##### **加入我们:**
**OpenIMgithub开源地址:**
https://github.com/OpenIMSDK/Open-IM-Server
**OpenIM官网 :** https://www.rentsoft.cn
**OpenIM官方论坛**:https://forum.rentsoft.cn/
有疑问加站长微信联系(非本文作者))