1 系统架构
1.1 概述
即时通讯:允许两人或多人跨多样网络即时传递文字、档案、语音和视频交流的终端服务。
1.2 逻辑架构
即时通讯软件的主要功能有:
即时会话:两人或多人之间,文字、视音频的交流,包括在线消息与离线消息的发送接收,耳机、话筒音量的控制等。
组织机构:包括部门、用户、群组等级别的管理,好友列表的增删与维护,个性化名片、图标的定制与修改等。
文件目录:在线文件传输、目录共享以及离线文件存储与下载;协同浏览、播放以及远程共享等。
注册登录:注册管理,用户的登录与退出记录,消息推送,以及在线状态的维护与更新。
系统设置:个性化本地配置,帮助信息,在线更新,历史记录的查看以及设定。
系统逻辑架构示意图:
即时通讯系统一般分为客户端与服务端,客户端较轻,关键逻辑在服务端,一般分为三到四层,采用B/S和C/S混合架构。
连接层:Connector连接集群。连接层需要尽可能简单,采用同步/异步多种方案,来支撑高并发与高在线。连接层需要承担的总连数可能超过1000万。
逻辑层:关键逻辑与业务逻辑、应用逻辑分离,将即时通讯的功能模块化颗粒化,抽象基础逻辑组件,在基础组件基础上构建业务逻辑子群。
数据层:根据逻辑层的模块化,设计对应的服务化数据集群,在逻辑和物理上对数据进行隔离存放。
监控层:将监控嵌入基础框架,多层进行监控和观测,故障可以迅速被预警,并在用户感知前排除掉。
1.3 物理架构
物理架构与逻辑架构有一定的映射关系,在逻辑架构的基础上,通过如防火墙等筑起安全防线,通过负载均衡等设备构建多点容灾,即通过成熟的硬件技术,在软件系统的设计支持下,增强系统的安全性、稳定性和可靠性。
2 关键技术
2.1 协议设计
即时通讯的开源参考协议有XMPP与SIP,但缺点很明显:1、流量大;2、不可靠;3、交互复杂。针对移动IM的通讯协议一般需要自行设计,改进缺点,并克服以下问题:
通讯协议设计的目标是:高效、可靠与易于扩展。能够实现弱网络的快速收发,不会丢失消息。并且要简化交互模式,实现增量传输,消息考传输并且按序到达。
考虑长链接和短链接相结合,核心的长链接用来传输轻量的实时数据,图片、语音等都可以开新的TCP与HTTP链接。
2.2 敏捷发布
即时通讯基于互联网,变更是非常频繁的,需要做到敏捷,而且不是基于单机系统的,基于有一定用户量(百万级?千万级)的系统上,实施敏捷开发与在线发布。
敏捷发布的技术理念:
1、 大系统小做:模块清晰,物理部署分离,区分关键逻辑与应用逻辑;
2、 一切可扩展:通讯协议可扩展,向前兼容;数据存储可扩展,多方式存储
3、 轻松上线部署:灰度部署,开发环境能快速部署到生产环境,可进可退
2.3 容灾设计
1、 多层容灾:系统设计一般分为接入层、逻辑层、存储层,从前到后多层容灾设计。
2、 存储上采用主备、双写等方案,进行容灾方案设计,防止雪崩,并避免蝴蝶效应。
2.4 监控设计
即时通讯一般是海量系统,一个精密的仪表盘非常重要,监控需要克服的问题:
1、 海量日志:一个小时达到数百G
2、 实时图片:1分钟实时图标展示
3、 需求灵活:复杂的关联统计,多样的监控需求
监控需要纳入基础框架,但不能给业务系统造成影响。