大家好呀,我是的开源小妹。
最近小妹新做了一款 APP,其中需要使用上高性能、高安全的即时通讯功能。我进行了一轮技术选型,其中包括腾讯 IM 等云服务商提供的 IM 产品。
最终因为 IM 云服务收费的高企,囊中羞涩的小妹最终决定使用一款由前微信技术专家打造的免费开源的即时通讯组件:Open-IM。
介绍
Open-IM 的创始团队来自前微信高级架构师、IM / WebRTC 专家团队,打造轻量级、高可用的 IM 架构,开发者只需简单调用 SDK,即可在应用内构建多种即时通讯及实时音视频互动场景。
Open-IM 拥有以下几点特色:
(1)开源永久免费
代码全部开源,永久免费,包括客户端和服务端,由前微信技术专家打造,并邀请全球技术极客参与建设。
(2)易扩展
服务端采用 golang 实现,首创“一切皆消息”的通讯模型,轻松实现自定义消息和扩展功能。
(3)技术服务
每个技术人员都承担技术客服的角色,强化社区,不提工单,及时解答。
(4)高性能
借鉴并优化通讯架构,抽象在线消息、离线消息、历史消息存储模型,分层治理架构,支持集群部署。
(5)安全
代码全部开源,服务端私有化部署,数据自我掌控。未来加入全球最安全的 signal 端到端加密协议。
(6)全平台支持
支持 Andorid、iOS 原生开发,支持 Flutter、uni-app 跨端开发,支持小程序、React 等所有主流 web 前端技术框架, PC 支持 Electron。
架构
即时通讯是一项需要高性能和高可靠的架构支撑的业务,所以一个能够很好解决业务解耦和组件解耦的架构尤其重要!
Open-IM 的服务端由接入层、逻辑层和存储层组成,好处在于各个层次能够依据业务特点专注于自己的事情,提高系统复用性,降低业务间的耦合。
(1)接入层:消息通过 Websocket 协议接入,其他通过 http/https 协议接入,消息是高频及核心功能,通过双协议路由,体现了轻重分离的设计思想。
(2)逻辑层:通过 RPC 实现无状态逻辑服务,易于平行扩展,消息通过 MQ 解耦。
(3)存储层:Redis 存储 token 和 seq;MongoDB 存储离线消息,并定时删除 14 天(可自行配置)前数据;mysql 存储全量历史消息以及用户相关资料。数据分层存储,充分利用不同存储组件的特性。
(4)Etcd:服务注册和发现、以及分布式配置中心。
快速使用
准备 Linux 系统,保证可用内存 2G 以上。
安装 Docker 版本 1.13 以上,Docker-Compose 版本 1.22 以上。
一键部署:
代码语言:javascript复制git clone https://github.com/OpenIMSDK/Open-IM-Server.git --recursive;
cd Open-IM-Server/script;
chmod x *.sh;
./env_check.sh;
cd ..;
docker-compose up -d;
cd script;
./docker_check_service.sh;
可下载官方自带的 Demo 客户端使用。
小结
现在越来越讲究「互联」和「社交」,所以即时通讯的功能必定有更多的使用场景和需求。既然云服务商的 IM 服务费用如此高企,为何不来试试这一款免费开源的高性能 IM 组件呢?