1、即时通讯架构1 “社交,是人们运用一定的方式(工具)传递信息,交流思想,以达到某种目的的社会活动。”2 常见于即时通讯,私信应用 游戏服务器 长连接信息推送3 通讯服务器组成iOSAndroid客户端WPConnector连接集群LVSLogic逻辑集群服务化数据集群(Session/Message)IM数据层4 消息中转LogicSession ClusterMessage ClusterUser A1Connector2345User B6ConnectorLogic5 “对安全性、高可用、扩展性的要求越高,架构的变化越大。”6 iOSAndroid客户端WPIMLVSConnector连
2、接集群Logic逻辑集群服务化数据集群(Session/Message)数据层连接层1.连接层的作用 2.“允许随时重启更新/只允许晚上重启/不允许重启断线”3.总的来说简单/异步7 陌陌连接层总连接数 1200万+单台服务器压测70万连接,一般使用50%(主流配置)8 AndroidWP客户端IMiOSConnector连接集群LVSLogic逻辑集群服务化数据集群(Session/Message)数据层逻辑层1.2.3.4.用户会话验证 消息存取 异步队列 随时重启9 AndroidWP客户端IMiOSConnector连接集群LVSLogic逻辑集群服务化数据集群(Session/Mes
3、sage)数据层通讯协议“安全性要求 流量要求 传输要求可靠&高效 ”10 通讯协议常见协议XMPP/SIP 缺点:1.流量大 2.不可靠 3.交互复杂ClientServerWIFI/2G/3G/地铁/电梯10ms/200ms/12s/TCP half-closed11 通信协议设计目标:高效:弱网络快速的收发 可靠:不会丢消息 易于扩展12 FlagLength DataFlagLength DataFlagLength Datamsg:协议格式良好的协议可以:简化系统设计 提供可靠个高效的消息传输 易于扩展需求13 REDIS协议CR LF$bytes of argument 1byte
4、s of argument 2bytes of argument 3CR LFCR LFCR LFdatadatadataCR LFCR LFCR LFRedis协议*number of argumentsSET name latermoon *3$3 SET$4 name$9 latermoon下面都用Redis协议来描述逻辑14 READ REDIS COMMAND15 FIFOmsg6msg5msg4msg3msg2msg1基于队列的消息协议S:msg-send msg1 C:msg-recv 1 S:msg-send msg2 C:msg-recv 2 S:msg-send msg3
5、msg4 msg 5 msg 6 C:msg-recv 3 4 5 6Redis List:16 Clientmsg-sendmsg-recvmsg-sendmsg-recvmsg-sendmsg-recvList Base基于队列的交互Server 传统的IM协议 前提是基于网线、WIFI,网络延迟极小 移动网络下,交互极其费时,服务器要维护每个状态容易出错17 “通讯协议优化,尽量减少一次交互中数据往返的次数。”18 VersionMessage106msg105msg104msg103msg102msg101msg基于版本号的消息协议Redis Sorted Set:S:msg-psh
6、C:msg-sync S:msg v 101 msg S:msg v 102 msg S:msg v 103 msg S:msg v 104 msg C:msg-fin v 10419 基于版本号的交互ClientServermsg-pshmsg-syncmsg-sendmsg-sendmsg-sendmsg-sendmsg-finSorted Set Base针对弱网络的优化协议 消息通过版本号维护顺序 新消息到达,Server只负责push通知 Client收到轻量的msg-psh后发出同步请求 Server按照版本号连续发送msg Client告诉Server收到最后的版本20 其它问题核心的长连接只用于传输轻量的实时数据 图片、语音等都可以开新的TCP或HTTP连接21 “一切就绪后,最重要的就是监控。”22 监控23 “完”24