arod-im 是一个使用golang实现的微服务架构(MSA)的分布式即时通信server,通过HTTP接口接收请求并通过Websocket推送消息,各服务间使用GRPC协议通信。
本项目使用Kratos作为微服务框架,使用gnet作为网络框架,构建了一个高性能,高可靠,高可用的IM应用。
arod-im 支持用户多端登录,支持私聊,群聊,聊天室等应用场景,也可以用作直播间的弹幕服务。
- 高可靠、高可用、实时性、有序性
- 水平扩展
- 性能优化
- 拉取消息-批量拉取
- 组件式设计
- 指标监控,链路追踪
- 分布式事务
- 超时控制
- 注册中心、配置中心
通用性的设计,可以适应不同场景的需求,高度抽象,提供接口,根据业务需要自由扩展。底层的性能优化,为消息通信保驾护航。
在开始前需要先安装好以下开源组件:
- TODO
在开始前需要保证以及安装好上述组件并能正常使用。
首先将本项目clone到您的服务器
git clone https://github.com/gqzcl/arod-im.git
进入项目目录下,初始化项目
cd ./arod-im
export GOPROXY=https://goproxy.cn,direct
make init
make generate
然后修改配置文件,配置redis、nacos、kafka地址。
启动Logic服务
make run.logic
启动Connector服务
make run.connector
启动Job服务
make run.job
"事件驱动架构设计"1
group_members(gid, uid, last_ack_msgid);
group_msgs(msgid,gid,sender_uid,time,content);
数据传输格式选择的是 protobuf,原因如下:
- 易于使用,多语言支持,方便扩展
- 灵活(方便接口更新),高效,一条消息数据,用protobuf序列化后的大小是json的10分之一,xml格式的20分之一,是二进制序列化的10分之一,
- 添加refresh token机制,添加refresh-token接口
- 添加获取连接服务地址的接口
- 为部分接口添加幂等逻辑
- 添加Promentheus的指标监控
- 添加服务链路追踪
- 添加服务间的超时控制
- 增加消息的两阶段确认机制
arod-im is open-sourced software licensed under the MIT license.
Footnotes
-
事件驱动架构设计
↩