开篇
自互联网诞生以来,即时通讯平台就始终存在。从世界范畴来看,WhatsApp、Facebook、微信、Telegram 是当先的音讯平台,用户次要应用这些平台与家人和敌人保持联系。随着互联网的倒退,人与人之间的沟通是刚需,无处不在,简直所有的 APP 都集成 IM 性能,从社交、游戏、到生存中的方方面面,打车、找房等。能够说 IM 作为一种通信能力,曾经成为互联网上的基础设施,成为许多 APP 不可或缺的性能。当初绝大多数 APP 应用 IM 云服务商的 SDK,不便接入的同时,也带来了几个深层次的问题:(1)老本问题:企业每年额定领取上万乃至数十万的云服务费用,是个不小的老本;(2)数据隐衷问题:企业的用户数据、聊天记录等外围数据存储在 IM 云服务商,如何保证数据的安全性是个极大挑战;(3)需要定制问题:IM 需要多样化,IM 性能只能由 IM 云服务商通过 SDK 的模式提供给大家应用,对于一些定制化的需要,是否反对,什么时候实现,都是个未知数;(4)云服务商绑架问题:一旦应用 IM 云服务,造成捆绑关系,迁徙老本高,受制于人。
OpenIM 采纳和 IM 云服务雷同的接口,提供服务端和客户端 SDK,让开发者以收费或低成本接入 IMSDK,并私有化部署,实现 IM 性能接入。
介绍
OpenIM:由前微信技术专家打造的基于 Go 实现的即时通讯(IM)我的项目,从服务端到客户端 SDK 开源即时通讯(IM)整体解决方案。开发文档欠缺,代码 100% 开源,反对 Andorid、iOS 原生开发,反对 Flutter、uni-app 跨端开发,反对小程序、React 等所有支流 web 前端技术框架,PC 反对 Electron,能够轻松代替第三方 IM 云服务。
后盾架构
服务端由接入层、逻辑层和存储层组成,益处在于各个档次可能根据业务特点专一于本人的事件,进步零碎复用性,升高业务间的耦合。
(1)接入层:音讯通过 websocket 协定接入,其余通过 http/https 协定接入,音讯是高频及外围性能,通过双协定路由,体现了轻重拆散的设计思维。
(2)逻辑层:通过 rpc 实现无状态逻辑服务,易于平行扩大,音讯通过 MQ 解耦。
(3)存储层:redis 存储 token 和 seq;mongodb 存储离线音讯,并定时删除 14 天(可自行配置)前数据;mysql 存储全量历史音讯以及用户相干材料。数据分层存储,充分利用不同存储组件的个性。
(4)Etcd:服务注册和发现、以及分布式配置核心。
音讯流程
Open-IM 音讯模型采纳经典的收件箱模型,并通过全局 seq 做音讯对齐,这里带来架构的简化,体现了简略美的架构设计理念。很多开发者通过网络文章,理解到收件箱模型的原理,也晓得 seq 的概念,但如何在我的项目中做衡量和取舍,爱因斯坦已经说过“事件应该力求简略,不过不能过于简略”,咱们看到很多技术文章对收件箱模型和 seq 的滥用,要么零碎设计简单,要么过于简略,最初的后果是零碎不稳固,音讯可达率无奈达到要求。以下咱们简略解说音讯如何发送,零碎如何简略解耦,接管方如何实时收到音讯,并如何利用 seq 做全局音讯对齐,确保音讯百分百可达。
客户端架构
客户端 SDK 负责和 IM 服务端交互,本地数据存储和同步,音讯、事件回调。开发者通过集成 SDK,自行开发聊天界面 UI,设置事件监听回调实现数据和 UI 对接。
Open-IMSDK 分为三层:网络层、逻辑层、存储层。分层治理,各司其职,实现高效、稳固、对立的客户端架构。
SDK 集成流程
OpenIM SDK 集成非常简单,因为开发者私有化部署,代码、配置、数据都在自家服务器上,不必向云平台申请 AppKey 和 Secret,相比第三方 IM 云服务,可见 OpenIM 更平安、可控、自由度更高。
地址
官网文档地址:
https://doc.rentsoft.cn/
OpenIM github 开源地址:
https://github.com/OpenIMSDK/…
OpenIM 官网:https://www.rentsoft.cn
OpenIM 官方论坛:https://forum.rentsoft.cn
咱们致力于通过开源模式,为寰球企业 / 开发者提供简略、易用、高效的 IM 服务和实时音视频通信能力,帮忙开发者升高我的项目的开发成本,并让开发者掌控业务的外围数据。
IM 作为外围业务数据,平安的重要性毋庸置疑,OpenIM 开源以及私有化部署让企业能更放心使用。
现在 IM 云服务商免费高企,如何让企业低成本、平安、牢靠接入 IM 服务,是 OpenIM 的历史使命,也是咱们后退的方向。