IM系统架构设计之浅见
【大咖・来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》
背景:除去大名鼎鼎的QQ这款即时聊天工具,还有许多细分行业的IM,比如淘宝阿里旺旺、网易泡泡、YY语音......。恰巧公司产品也要开发一款基于我 们自己行业的类IM系统,很有幸我担当了这个产品的架构师,核心代码编写、实现者。下面把我近年来从技术上我对IM系统(即时消息的传输,不包括语音,视频,文件的传输)的理解和设计分享出来,浅薄之见,望大家别见笑,欢迎给出批评意见。
一.网络传输协议的选择
目前我知晓的所有IM系统传输即时消息无外乎使用UDP、TCP、基于TCP的http这几种协议中的一种或几种。比如QQ主要采用UDP协议,MSN主要采用TCP协议,而且他们也都支持HTTP协议的代理模式。更多资料,请参加这篇文章《一些常用软件的网络端口协议分类介绍》。
我们该如何选择呢?
-
UDP协议实时性更好,但是如何处理安全可靠的传输并且处理不同客户端之间的消息交互是个难题,实现起来过于复杂;
-
HTTP协议属于扩展支持,我们在产品的初始阶段可以不用支持;
-
那就非TCP协议莫属了,要考虑的同样也有很多,特别是如果有海量用户的需求。如何保证单机服务器高并发量,如何做到灵活,扩展的架构。
Tips: QQ 为什么采用 UDP 协议,而不采用 TCP 协议实现?
二.应该选择什么格式的数据协议
二进制格式?文本格式?这个话题转到我的这篇文章《网络传输数据格式的选择》,从我们当前的需求和产品周期上我觉得选择JSON形式的数据协议是***的。
三.架构设计
首先我们来提炼一下一个IM系统的主要需求,包括账号,关系链,在线状态显示,消息交互......。
架构考量:
-
由于采用可靠传输协议TCP,考虑到负载问题(短连接实现账号、关系链相关业务,长连接实现上线、信息推送);
-
后台架构的灵活性、可扩展性,支持分布式部署——把网络层、业务逻辑层、数据层分离,网络层和业务层支持负载均衡策略、数据层支持分布式存储;
-
客户端SDK的易用性:把网络层、数据层分离、业务逻辑层分离;
后台架构简化图
架构示意图
架构细化图
说明
-
从< 架构细化图>中可以看出对于上线服务由于建立的是TCP长连接,对于单台服务器往往由于硬件资源、系统资源、网络资源的限制无法做到海量用户的同时 在线,所以设计为根据服务器负载支持多服务器上线,同时由于多服务器上线造成了对整个系统交互(不同的客户端的交互,协作部门应用服务和客户的交互)的分 割,引入消息转发服务器作为粘合点。另外对于多服务器上线造成的统一账户信息(在线状态,消息)数据的分割,引入统一的数据层(内存存储 层:session、状态信息存储、消息队列存储;数据库:账号信息存储)做到业务和数据的分离,也就做到了支持分布式部署。参见我的这篇文章《构建高性能服务的考量》
-
对于部分业务服务:做到网络层、业务层、数据层的完全分离。首先对于TCP短连接来说不会如长连接那般消耗资源,即使后期遇到海量的并发访问请求依然可以从容的通过负载均衡策略和数据分布式部署策略进行解决。参见我的这篇文章《服务端架构中的“网关服务器”》
服务端平台及技术选型
-
系统开发平台: CentOS——Linux发行版的一种,稳定可靠、可定制优化、支持丰富;
-
网络支撑层: libevent——减小开发成本,增强稳定性;
-
缓存存储层: Redis——支持丰富的存储结构,支持分布式存储;
-
数据库: MySQL——最适合互联网的数据库,免授权、高效稳定、可控性高;
-
开发语言: C/C++;
部分热点问题考量
-
系统性能考量:
-
编码角度:采用高效的网络模型,线程模型,I/O处理模型,合理的数据库设计和操作语句的优化;
-
垂直扩展:通过提高单服务器的硬件资源或者网络资源来提高性能;
-
水平扩展:通过合理的架构设计和运维方面的负载均衡策略将负载分担,有效提高性能;后期甚至可以考虑加入数据缓存层,突破IO瓶颈;
-
-
系统的高可用性:(防止单点故障)
-
在架构设计时做到业务处理和数据的分离,从而依赖分布式的部署使得在单点故障时能保证系统可用。
-
对于关键独立节点可以采用双机热备技术进行切换。
-
数据库数据的安全性可以通过磁盘阵列的冗余配置和主备数据库来解决。
-
主要学习资料: 请自行google。
-
《1.4亿在线背后的故事》;
-
《BasicDB的架构演变》;
-
《微信之道-至简》;
本文出自51博客 “永远的朋友” ,转载请务必保留此出处http://yaocoder.blog.51cto.com/2668309/1412029
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
移动支付倒底有多难?看看这4家苦逼的公司
【大咖・来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》 Square,LevelUp,还有Clinkle,他们都可以证明一个基本事实,那就是:做支付这一行真真的是不容易啊! 在一个星期六的早上,你外出逛了逛。你花了一整天逛街,为了能搭配***的春季时尚潮流,你买了许多新衣服。当你在市中心里转悠的时候,可能会停下来买杯咖啡,吃个三明治,再买一盒口香糖。你也可能走进一家五金店,随手买了几个钉子,然后 回家钉在墙上挂上一幅画。***,你走进了沃尔玛或Target超市,买了一个全新的洗衣筐。好了,所有这些行为,都有什么共同点呢? 答案就是,你刚才做的每件事儿,都花钱了。可是,在这个过程中,你有多大几率,会掏出自己的智能手机去支付买单呢? 移 动支付的概念已经推出有三年时间了,那么,你在实体零售店里使用过智能手机支付吗?现在想想看,似乎不少产品也是吹的天花乱坠。让我们回到2011年,当 时,从创业家的嘴巴里好像一下子冒出了许多和移动支付相关的技术术语,比如什么智能手机啦,移动钱包啦,二维码,近距离无线通讯技术(NFC),等等。大 家都觉得,这些技术很快就能彻底改变人们支付交易的方...
- 下一篇
5款可穿戴设备的反面教材
【大咖・来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》 在可穿戴技术的发展历程当中,我们看到过不少让人眼前一亮的产品,而失败的例子也不在少数。不过话说回来,有意义的失败对于技术发展的贡献并不比那 些举世瞩目的产品要小,因此我们也有进行回顾的必要。日前,科技网站TechRadar就盘点了可穿戴电子设备发展历程当中5款最失败的产品: 1.PrivateEye和Twiddler键盘 发布日期:1989年 售价:未知 ReflectionTechnology的PrivateEye头戴显示器可以算作是最早一批可穿戴计算机,尽管其便携性有点受限。 这款设备被安装在了一副眼镜上,并装备了720x280分辨率单色显示屏。设备的机身规格为8.89x3.81x3.18mm,实际显示屏尺寸是1.25英寸,但可以为佩带者提供相当于在18英寸以外使用15英寸显示屏的观看体验。 PrivateEye的显示屏由一行LED组成和一面快速转动的镜子所组成,以制造出一行行文字的错觉。除了阅读或输入文字之外,这款设备基本没有其他功能。 PrivateEye的显示屏连接着12MHz英特尔286处理器,2MB内...
相关文章
文章评论
共有0条评论来说两句吧...