这个题目很宏大,大的方向分为服务器和客户端,按具体业务又分为普通消息和VoIP
关于Voip,服务器使用asterisk,客户端使用WebRtc, 使用IAX2协议。下篇文章专门介绍。 暂时先列提纲吧。
- 介绍目前我们使用的技术大纲
- 目前WebIM实现的状况
- 还有哪些问题issue需要解决
好吧,先介绍下服务器的技术架构。 我司早期使用的技术为,服务器消息是PHP+Java+MySQL,媒体服务器是asterisk。这套技术只能说初步实现了业务,并发能力不强。从17年开始,消息架构替换为akka+Cassandra+kafka,算是比较先进的。媒体服务器依然是asterisk,使用IAX2协议,只能说,一对一通信是没问题的,对多人会话来说,我们自研了混音服务器,asterisk和Mixer之间的连接采用UDP自定义协议,这种模式下问题比较多。因此建议媒体服务器转向freeswitch,但未被公司采纳。
好,现在介绍下消息推送的架构。早期的版本,长连接采用的是MQTT,只是推送信令,具体消息是通过HTTP发get请求获取的。如下图
这种架构的好处是长连接load比较低,只是传输信令,但是如果是大规模的并发场景,例如500人的群组,http server可能无法应对。
升级AKKA后,我们的技术改为websocket直接推送,消息通过websocket直接推送,支撑了大规模消息通信。如下图
新版本分布式系统云端架构图
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
-- 提供至多九方的会议通话.