`
java-mans
  • 浏览: 11415101 次
文章分类
社区版块
存档分类
最新评论

(2011)构架师之路-闭眼设计系列-第一篇:IM后台构架

 
阅读更多

转载地址:http://hi.baidu.com/algorithms/blog/item/a17909d1bfc3712f9a5027c0.html

IM(即时通讯)系统(如QQMSN、飞信等),至少分为2个部分:客户端和服务器端。它属于典型的1对多服务。IM的特点有:

① PV很高,这里PV表示clientserver的一次通信;

② 有效在线UV很高,典型的为100w-1亿;

③ 主要的功能包括:登录、发文本消息、群发文本消息、发图片消息、群发图片消息、语音/视频。

Ok,基本特点了解了,开始设计构架。

1、登录

流程:

① 用户发送连接请求给接入点;

② 接入点去用户信息服务判断是否可以登录;

③ 如果可以登录,从用户信息服务获得数据到本地;

④ 发送登录成功给用户;

⑤ 设置用户登录状态到状态服务。

接入点功能:

① 提供网络传输,基于udp

② 存储接入用户信息,如个人信息、好友信息等;

③ 负载均衡,负载过高时,要求用户换一个登录,备选方案:3dns


用户信息服务(更多像一个数据库)功能:

① 存储用户的所有信息;

状态服务功能:

① 用户当前状态存储,如登录/隐身/ip/sessionid

设计理由:

① 多接入点+udp,可以同时接受更多用户;

② 状态服务,可以给其他应用(如发信息)使用,免去验证;

2、发文本消息

流程:

① A用户在接入点A登录,B用户在接入点B登录;

② A用户发送文本消息给接入点A

③ 接入点A从状态信息服务器中获得B用户状态;

④ 接入点A发送消息到消息服务;

⑤ 接入点A返回发送成功给A用户;

⑥ 消息服务调度消息,发送消息给接入点B

⑦ 接入点B发送消息给B用户。

消息服务功能:

① 存储消息,通过接入点发送给最终客户端;

② 负载均衡;

设计理由:

① 接入点功能复杂,内存紧张,增加一个消息服务更清晰。

3、群发文本消息

群发文本消息和普通文本消息的不同之处在于接收人有多个。一个最简单的做法就是沿用普通文本消息的策略,但产生多个内容一样的消息,消息发往多个消息服务器,等消息服务器调度。

群消息的安全性没有普通消息要求高,故可以设置一个较短延迟(最迟投递时间),超过了(如网络繁忙)就直接抛弃。

4、发图片消息

多媒体信息都很大,最佳解决方案是不通过服务器,客户端直接通过NAT打洞策略链接。

5、群发图片消息

群发图片采用客户端直连会比较麻烦,因为群里面人太多,客户端每个都去链接会造成资源紧张,也容易出错。故主要仍然需要采用服务器中转的模式。

6、语音/视频

语音/视频和图片处理策略差不多。在多人语音的时候,首先采用客户端直连的策略,在不通畅的时候,才采用服务器中转的策略。

7、进一步改进

① dns错误:客户端(每发布一个版本就更新一次)预先存储一些有效接入点(ip)。

② YY语音怎么弄?更快速的多媒体传输:

a)自建CDN,在每个接入商那里都放几台电脑。好处:大局域网用户快速中转。

b)多个IDC之间P2P传输,加快数据分发速度。

c)IDC建立内部光纤专线。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics