IM 技术路线

418 阅读3分钟

这个题目很宏大,大的方向分为服务器和客户端,按具体业务又分为普通消息和VoIP

关于Voip,服务器使用asterisk,客户端使用WebRtc, 使用IAX2协议。下篇文章专门介绍。 暂时先列提纲吧。

  1. 介绍目前我们使用的技术大纲
  2. 目前WebIM实现的状况
  3. 还有哪些问题issue需要解决

好吧,先介绍下服务器的技术架构。 我司早期使用的技术为,服务器消息是PHP+Java+MySQL,媒体服务器是asterisk。这套技术只能说初步实现了业务,并发能力不强。从17年开始,消息架构替换为akka+Cassandra+kafka,算是比较先进的。媒体服务器依然是asterisk,使用IAX2协议,只能说,一对一通信是没问题的,对多人会话来说,我们自研了混音服务器,asterisk和Mixer之间的连接采用UDP自定义协议,这种模式下问题比较多。因此建议媒体服务器转向freeswitch,但未被公司采纳。

好,现在介绍下消息推送的架构。早期的版本,长连接采用的是MQTT,只是推送信令,具体消息是通过HTTP发get请求获取的。如下图

image.png 这种架构的好处是长连接load比较低,只是传输信令,但是如果是大规模的并发场景,例如500人的群组,http server可能无法应对。

升级AKKA后,我们的技术改为websocket直接推送,消息通过websocket直接推送,支撑了大规模消息通信。如下图

IS~38%O{6CHXXL1{3HW1W6B.png

新版本分布式系统云端架构图

image.png

Server技術架构特点

  • 以最先进的Scala语言开发
  • 基于 SMACK stack框架开发
  • SMACK是cloud service最热门的技术
  • SMACK是指Spark, Mesos, Akka, Cassandra, and Kafka
  • 每一部分都可以平行扩容
  • Server的扩充是非常简单的水平扩充即可
  • 从几万个user到几亿个user只需做水平式扩充增加server即可

服务器各模块功能介绍

APINode

HTTP/WEBSOCKET 接入服务 核心服务器

SessionNode

验证用户请求,分发任务。 核心服务器

Shardnode

提供分片集群。 核心服务器

Relay Server

音视频转发服务器 无法P2P时转发音视频

Mixser Server

多方会议混音服务器 混音服务器

Neo4j

社交关系分析服务器 分析用户行为

ElasticSerach

全文检索服务器 查找用户,agent

Spark

用户统计,官方推送服务 统计在线人数、活跃人数

Kafka

消息缓存服务器 用来沟通JMC和spark、JSC

Zookeeper

集群调度 协调kafka、spark

Cassandra

NoSql数据库,主存储服务器 去中心化数据库

Zabbix

监控服务器 监控所有集群状态

Kibana

日志服务器 收集所有集群日志

Server 云端服务

账户系统

-- 提供用户注册以及校验功能

开放式朋友圈

-- 向在线所有人开放 -- 文字/图片/短视频/点赞/评论/分享

Call Server

-- 音频/视频通话

Data Server

-- 数据存储服务

消息服务

-- 富媒体消息的收发, 包括1对1以及群发, 消息类型为文字、图片、附件、短视频、语音、涂鸦、手写、Stickers.

Analytic Server

-- 基于大数据系统架构,提供系统各种不同统计数据报告.

Mixer Server

-- 提供至多九方的会议通话.