IM设计思考:试问
用过IM很多年了,直到最近才开始好好想想IM的实现需要考虑哪些方面?
特别是在海量用户的IM环境下,需要考虑哪些方面,自己大概思考了下总结如下:
1. 海量接入
QQ的最高在线用户超过了1亿,那么大约每台服务器能接入多少用户?
如何将海量的登陆用户平均负载到接入服务器集群?
某台接入服务器过载崩溃时如何平滑转移,避免“多米诺”骨牌效应。
2. 安全认证
登陆认证时如何保障安全?何种加密机制,验证方式?
消息传递时的安全性,加密或不加密?
自动登陆时的验证模式?
3. 消息转发
不同用户可能登陆在不同的服务器上(存在跨IDC机房可能),如何保证即时性和可靠性?
如何定位用户的登陆位置进行转发?
每条消息的大小限制多少?
4. 离线消息
离线消息是否100%可靠?
每个用户允许多大的离线消息存储?
离线消息是否有过期时间?如何管理?
5. 状态广播
上线、下线、离开、用户自定义等多种状态消息向好友的转播,可能形成的广播洪流拥塞网络如何解决?
6. 多点登陆
如何支持用户多点登陆(PC、手机、PAD同时登陆)?
多点登陆的情况下消息如何转发,状态如何通知?
7. 关系管理
海量用户关系如何管理?
允许每个用户关联多少好友?(关联的数目越多关系数据网越复杂,对消息和状态通知带来更大压力)
好友关系的版本管理机制如何设计?(方便和本地客户端对比,减少网络传输流量,进行差异更新)
8. 多媒体通信
复杂网络环境下的语音、视频如何通信,协议协商?
9. 文件传输
传输协议协商机制?
中转传输时的可靠性、并发能力和流量控制?(单台服务器可同时服务于多少用户的中转传输?)