OpenIM 整体架构
OpenIM 是一个高性能、可扩展的即时通信解决方案,由 OpenIM Server(服务端)和 OpenIM SDK(客户端 SDK)两部分组成。
OpenIM Server
OpenIM Server 是 OpenIM 的服务端实现,采用微服务架构设计,提供完整的即时通信服务能力。
核心功能:
- 消息收发:支持实时消息、单聊、群聊等多种消息类型
- 用户与关系管理:提供完整的用户管理、好友关系、群组管理功能
- 多端接入:通过 WebSocket 网关和 REST API,支持移动端(iOS/Android)、Web 端(H5/PC)以及第三方应用集成
- 高可用架构:基于微服务架构,采用消息队列(Kafka)和缓存(Redis)技术,支持水平扩展,保障系统高可用和高性能
OpenIM SDK
OpenIM SDK Core 是 OpenIM 的核心 SDK,采用 Go 语言实现,作为跨平台 IM 的基础层,为上层各平台 SDK 提供统一的 IM 能力。
技术特点:
- 统一核心:各平台 SDK(iOS、Android、Flutter、UniApp 等)基于此核心构建,保证跨平台功能一致性
- 本地存储:支持消息与数据的本地持久化,提升用户体验和离线能力
- 消息同步:采用增量与全量同步机制,确保数据一致性和同步效率
- 事件驱动:基于回调的事件通知机制,方便开发者处理各种 IM 事件
该 SDK 为上层平台 SDK 提供统一的 IM 能力,开发者可基于此快速构建跨平台 IM 应用,大大降低开发成本和维护复杂度。
系统整体架构
graph TB
subgraph "外部平台层"
iOS[iOS App]
Android[Android App]
Web[Web/WASM]
PC[PC应用]
end
subgraph "API接口层 (open_im_sdk/)"
API[API接口]
Caller[调用器<br/>call/syncCall]
Listener[监听器管理]
end
subgraph "核心上下文层 (UserContext)"
UC[UserContext<br/>全局上下文管理]
Config[配置管理]
Status[登录状态管理]
end
subgraph "业务模块层 (internal/)"
Conv[Conversation<br/>会话管理]
Msg[ConversationMsg<br/>消息管理]
Group[Group<br/>群组管理]
User[User<br/>用户管理]
Relation[Relation<br/>好友关系]
Third[Third<br/>第三方服务]
end
subgraph "交互层 (interaction/)"
LConn[LongConnMgr<br/>长连接管理]
MSync[MsgSyncer<br/>消息同步器]
WS[WebSocket连接]
Heartbeat[心跳机制]
Reconnect[重连机制]
end
subgraph "基础设施层 (pkg/)"
DB[(数据库<br/>SQLite)]
Cache[缓存层]
HTTP[HTTP客户端]
Syncer[数据同步器]
API_Client[API调用器]
end
subgraph "回调层 (open_im_sdk_callback/)"
ConnCB[连接回调]
MsgCB[消息回调]
GroupCB[群组回调]
UserCB[用户回调]
FriendCB[好友回调]
end
subgraph "OpenIM服务器"
Server[IM Server]
API_Server[API Server]
WS_Server[WebSocket Server]
end
%% 外部平台到API层
iOS --> API
Android --> API
Web --> API
PC --> API
%% API层到核心上下文
API --> Caller
Caller --> UC
Listener --> UC
%% 核心上下文到业务模块
UC --> Conv
UC --> Msg
UC --> Group
UC --> User
UC --> Relation
UC --> Third
%% 业务模块到交互层
Conv --> LConn
Msg --> MSync
Group --> LConn
User --> LConn
Relation --> LConn
%% 交互层内部
LConn --> WS
LConn --> Heartbeat
LConn --> Reconnect
MSync --> LConn
%% 业务模块到基础设施
Conv --> DB
Msg --> DB
Group --> DB
User --> DB
Relation --> DB
Conv --> Cache
User --> Cache
Group --> Cache
%% 业务模块到API调用
Conv --> API_Client
Msg --> API_Client
Group --> API_Client
User --> API_Client
Relation --> API_Client
API_Client --> HTTP
%% 同步器
User --> Syncer
Group --> Syncer
Relation --> Syncer
Syncer --> API_Client
%% 回调层
UC --> ConnCB
UC --> MsgCB
UC --> GroupCB
UC --> UserCB
UC --> FriendCB
ConnCB --> iOS
MsgCB --> iOS
GroupCB --> Android
UserCB --> Web
FriendCB --> PC
%% 网络连接
WS --> WS_Server
HTTP --> API_Server
WS_Server --> Server
API_Server --> Server
style UC fill:#e1f5ff
style LConn fill:#fff4e1
style DB fill:#ffe1f5
style Server fill:#e1ffe1
graph TB
subgraph "客户端层"
Client1[移动端客户端<br/>iOS/Android]
Client2[Web端客户端<br/>H5/PC]
Client3[第三方应用<br/>集成SDK]
end
subgraph "接入层"
Gateway[消息网关<br/>openim-msggateway<br/>WebSocket连接管理]
API[REST API服务<br/>openim-api<br/>HTTP接口]
end
subgraph "业务服务层 - RPC服务"
AuthRPC[认证服务<br/>openim-rpc-auth]
UserRPC[用户服务<br/>openim-rpc-user]
FriendRPC[好友服务<br/>openim-rpc-friend]
GroupRPC[群组服务<br/>openim-rpc-group]
MsgRPC[消息服务<br/>openim-rpc-msg]
ConversationRPC[会话服务<br/>openim-rpc-conversation]
ThirdRPC[第三方服务<br/>openim-rpc-third]
end
subgraph "消息处理层"
MsgTransfer[消息传输服务<br/>openim-msgtransfer<br/>Kafka消息处理]
Push[推送服务<br/>openim-push<br/>消息推送]
end
subgraph "任务调度层"
Cron[定时任务服务<br/>openim-crontask]
end
subgraph "基础设施层"
Kafka[消息队列<br/>Kafka<br/>异步消息处理]
Redis[缓存层<br/>Redis<br/>数据缓存/会话]
MongoDB[数据存储<br/>MongoDB<br/>持久化存储]
end
subgraph "外部服务"
Webhook[业务回调<br/>Webhooks<br/>事件通知]
BusinessServer[业务服务器<br/>第三方系统]
end
%% 客户端连接
Client1 -->|WebSocket| Gateway
Client2 -->|WebSocket| Gateway
Client3 -->|HTTP/REST| API
Client3 -->|WebSocket| Gateway
%% API层调用RPC服务
API -->|gRPC| AuthRPC
API -->|gRPC| UserRPC
API -->|gRPC| FriendRPC
API -->|gRPC| GroupRPC
API -->|gRPC| MsgRPC
API -->|gRPC| ConversationRPC
API -->|gRPC| ThirdRPC
%% 网关调用RPC服务
Gateway -->|gRPC| AuthRPC
Gateway -->|gRPC| UserRPC
Gateway -->|gRPC| MsgRPC
Gateway -->|gRPC| ConversationRPC
%% RPC服务之间的调用关系
FriendRPC -->|gRPC| UserRPC
FriendRPC -->|gRPC| MsgRPC
MsgRPC -->|gRPC| UserRPC
MsgRPC -->|gRPC| GroupRPC
MsgRPC -->|gRPC| FriendRPC
MsgRPC -->|gRPC| ConversationRPC
%% 消息处理流程
MsgRPC -->|发布消息| Kafka
Gateway -->|发布消息| Kafka
Kafka -->|消费消息| MsgTransfer
MsgTransfer -->|推送消息| Push
Push -->|推送通知| Gateway
Push -->|推送通知| Client1
Push -->|推送通知| Client2
%% 数据访问
AuthRPC --> Redis
AuthRPC --> MongoDB
UserRPC --> Redis
UserRPC --> MongoDB
FriendRPC --> Redis
FriendRPC --> MongoDB
GroupRPC --> Redis
GroupRPC --> MongoDB
MsgRPC --> Redis
MsgRPC --> MongoDB
ConversationRPC --> Redis
ConversationRPC --> MongoDB
ThirdRPC --> Redis
ThirdRPC --> MongoDB
MsgTransfer --> MongoDB
MsgTransfer --> Redis
%% Webhook回调
AuthRPC -.->|事件回调| Webhook
UserRPC -.->|事件回调| Webhook
FriendRPC -.->|事件回调| Webhook
GroupRPC -.->|事件回调| Webhook
MsgRPC -.->|事件回调| Webhook
Webhook --> BusinessServer
%% 定时任务
Cron --> MongoDB
Cron --> Redis
style Gateway fill:#e1f5ff
style API fill:#e1f5ff
style AuthRPC fill:#fff4e1
style UserRPC fill:#fff4e1
style FriendRPC fill:#fff4e1
style GroupRPC fill:#fff4e1
style MsgRPC fill:#fff4e1
style ConversationRPC fill:#fff4e1
style ThirdRPC fill:#fff4e1
style MsgTransfer fill:#e8f5e9
style Push fill:#e8f5e9
style Kafka fill:#f3e5f5
style Redis fill:#f3e5f5
style MongoDB fill:#f3e5f5
消息流转架构
sequenceDiagram
participant Client as 客户端
participant Gateway as 消息网关
participant MsgRPC as 消息RPC服务
participant Kafka as Kafka队列
participant Transfer as 消息传输服务
participant Push as 推送服务
participant MongoDB as MongoDB
participant Redis as Redis
Client->>Gateway: WebSocket连接
Gateway->>MsgRPC: 发送消息请求
MsgRPC->>Redis: 检查缓存
MsgRPC->>MongoDB: 存储消息
MsgRPC->>Kafka: 发布消息到队列
MsgRPC-->>Gateway: 返回消息ID
Gateway-->>Client: 确认消息已发送
Kafka->>Transfer: 消费消息
Transfer->>MongoDB: 持久化消息
Transfer->>Redis: 更新缓存
Transfer->>Push: 触发推送
Push->>Gateway: 推送消息
Gateway->>Client: 实时推送消息
核心组件说明
接入层
- openim-msggateway: WebSocket 消息网关,管理客户端长连接,支持百万级并发连接
- openim-api: RESTful API 服务,提供 HTTP 接口供业务系统调用
业务服务层(RPC服务)
- openim-rpc-auth: 用户认证、Token 管理
- openim-rpc-user: 用户信息管理、用户资料
- openim-rpc-friend: 好友关系管理、好友申请
- openim-rpc-group: 群组管理、群成员管理
- openim-rpc-msg: 消息发送、消息存储、消息查询
- openim-rpc-conversation: 会话管理、会话列表
- openim-rpc-third: 第三方服务集成
消息处理层
- openim-msgtransfer: 消息传输服务,从 Kafka 消费消息并处理
- openim-push: 推送服务,负责消息推送通知
定时任务层
- openim-crontask: 定时任务服务,处理定时清理、统计等任务
基础设施
- MongoDB: 持久化存储,存储用户、消息、群组等数据
- Redis: 缓存层,存储热点数据、会话信息
- Kafka: 消息队列,异步处理消息,解耦服务
扩展功能
- Webhooks: 事件回调机制,支持业务系统集成
- Prometheus: 监控指标收集
- 服务发现: 支持 Kubernetes、Etcd 等服务发现机制
技术特点
- 微服务架构: 服务间通过 gRPC 通信,支持独立部署和扩展
- 高可用: 支持集群部署,服务可水平扩展
- 高性能:
- Redis 缓存热点数据
- Kafka 异步消息处理
- WebSocket 长连接支持
- 可扩展:
- Webhook 回调机制
- REST API 接口
- 支持第三方系统集成