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 等服务发现机制

技术特点

  1. 微服务架构: 服务间通过 gRPC 通信,支持独立部署和扩展
  2. 高可用: 支持集群部署,服务可水平扩展
  3. 高性能:
    • Redis 缓存热点数据
    • Kafka 异步消息处理
    • WebSocket 长连接支持
  4. 可扩展:
    • Webhook 回调机制
    • REST API 接口
    • 支持第三方系统集成