实时消息系统设计与实现
October 14, 2014
特点
难点
设计
设计权衡聊天记录要不要保存?保存多久?客户端保存还是服务器保存?要不要使用系统推送?应用长连接推送在应用没有启动或者退出到后台的时候无法接收消息?如苹果的ApnsPush,微软的WPPush,黑莓的BBPush等)。像苹果的ios系统,在app退出到后台10分钟后就会释放掉该app所持有的所有资源(如cpu,网络,内存等),导致之前建立的长连接通道也会一并断掉,此时通过业务长连接进行通知是不可达的,所以还需要依赖与苹果自身的apns通道来达到实时通知。 支持纯文本还是多媒体?至少要支持表情?支持群聊吗?要不要有群的概念?还是多人聊天的概念?要不要有在线状态的概念?要不要有好友的概念,聊天需要不要先通过验证?安全。聊天信息要不要加密?聊天记录的保存。服务器需要存储的信息
参考方案现在国内的移动IM霸主显然是微信。那么微信是怎么设计和实现的呢? 微信团队诞生于广研的QQ邮箱团队,所以整个微信后台架构都带着浓重的邮箱气息,特别是最核心的消息收发功能,就是基于邮箱的store-forward的机制演变而来的。大概思路如下:
这个设计足够简单粗暴,但也限制了一些产品特性,比如历史记录(新加一个群,显示几条前面的消息挺好的,省的再复制说一遍),比如朋友圈的评论(向所有共同好友发送消息)中没法看新加共同朋友之前的评论。 微信定位为即时通讯软件,对消息的收发有三个基本的要求:
在邮箱的存储转发机制上做了改良后,微信的消息收发实现了以上3个基本要求。 1. 近实时收发消息2. 消息防丢失机制3. 顺序到达参考文章 |
|