2014-7-28 23:09| 发布者: tianzc| 查看: 385| 评论: 0
早年业界一直盛传腾讯内部的大讲堂课程含金量极高,在今年腾讯开放大战略下,这有口皆碑的内部高端分享课程终于走出深圳,走向业界。腾讯大讲堂首站来到北京航空航天大学,首次活动现场极为火爆,超过700人到场旁听,把整个会场挤得水泄不通。 本次活动由CSDN、《程序员》和腾讯共同举办,暨TUP第十六期:智慧腾讯,梦想互联——1亿在线背后的技术挑战,邀请到了腾讯即通平台部高级技术总监、T4级技术专家、腾讯软件开发通道分会会长庄泗华,下面为讲座内容整理回顾,让我们一起提高、学习。 庄泗华 腾讯即通平台部高级技术总监、腾讯T4级技术专家、腾讯软件开发通道分会会长。中科院计算技术研究所硕士,2004年毕业加入腾讯,是腾讯培养出的第一位T4专家级毕业生。一直致力于QQ IM后台海量服务系统的研发和运营工作。负责过QQ群聊系统、QQ接入与基础通信服务系统等后台系统的研发和运营,见证了QQ在线从800万到1.4亿的整个过程。 苛刻的数字考验,近乎百分百的要求 众所周知,海量互联网服务能力是世界公认的技术难题。经过十多年的发展,腾讯在海量互联网服务方面已有不少技术积累。演讲以QQ IM后台服务为例,重现了QQ在线用户从百万级到亿级的整个过程中遇到的技术挑战,分享众多在海量互联网后台服务研发运营方面不为人知的秘密。QQ现在面临7亿活动账户,每日1.4亿用户同时在线。QQ过万台IM服务器和百亿级的关系链对数每天接受千亿级的服务请求考验。在这些苛刻的数字面前,腾讯要保证99.99%这一极高的可用性。从10万到1.4亿,整个过程经历过很多波折,吸取了很多教训,因此腾讯对海量服务的理解是长期积累的结果。 从十万级到百万级在线,第一代架构难支持 QQ在最早期1.0时代,由于用户量较少,十万级在线,并且业务功能非常简单,例如登陆、添加好友、在线状态获取等,因此架构非常简单,由QQ客户端+接入服务器+存储服务器组成。随后随着业务的拓展,需要支持支持视频、语音、传文件等实时宽带业务,以及更多类型的用户资料,我们增加了长连接服务器,为无法直连的客户端进行实时宽带数据中转,还对存储服务器进行轻重分离,使核心服务器保证稳定,利用扩展服务器快速支持新增业务,这就是之后的1.5版本。但是我们发现无论是1.0还是1.5,我们发现都难以支撑百万级别在线。因为一百万的时候,各方面都会遇到很大的瓶颈。以接入服务器的内存为例,单个在线用户的存储量约为2KB,索引和在线状态50字节,好友表400个好友* 5字节/好友=2000字节,这样算来2G内存只能支持一百万在线用户,因此第一代架构肯定没有办法继续下去,我们必须要升级。 2.0的主要改进在于单台服务器扩展成集群,增加状态同步服务器。在接入服务器之间同步在线状态,如下图所示。 这次升级帮助QQ在2001年顺利突破100万在线用户数。随后为了支持QQ群,又将2.0升级到2.5,增加了QQ群服务器和群贴图服务器。 在从十万到百万的过程中,有两个重要的经验,一是后台架构的高性能,主要通过六个方面实现:绝对不用企业级解决方案,逻辑层多进程,万有一失的无锁设计,用户态IPC,MySQL分库分表,好友表自写文件存储。二是7乘24小时连续服务,主要通过以下方法实现的:大系统小做,平滑重构,核心数据放入共享内存,接入层与逻辑层分离,命令分发动态配置化。 千万级在线的考验,第二代架构难维系 2005年QQ同时在线迅速增长到千万级,于是之前的架构再次面临挑战,突出的问题主要体现在,同步流量太大,状态同步服务器遇到单机瓶颈;所有在线用户的在线状态信息量太大,单台接入服务器存不下;单台状态同步服务器支撑不下所有在线用户;单台接入服务器支撑不下所有在线用户的在线状态信息。没有办法,只得进行再次升级,3.0时代到来。 3.0改造的主要特点是全面的集群化,如下图所示。 但是事情并非我们想象的那样顺利,很快新问题产生了。 问题一:后台机器越来越多,单机死机/故障经常出现,IDC故障也不少,影响服务,也影响人员生活。经过分析我们决定加速容灾改造,存储集群建立半自动切换模式,业务集群、接入集群、同步集群建立自动切换模式,后台分布在两套IDC,并有指挥中心设备健康状态。 问题二:每周有新代码发布,BUG不断出现,严重影响服务。这个问题我们采用Code Review和灰度发布的方法,得到有效的解决。 问题三:监控机制原始、报警设置不全,出事了都不知道。这个促使我们完善监控和报警机制。 问题四:运维操作通过vim或者mysql进行,非常容易失误。我们通过运维操作Web化(半自动化)、自动化有效的解决了这个问题,并服务可用性终于提升到了行业先进水平。 通过解决以上问题,我们得到了3.5架构,如下图所示。 这一阶段,我们得到如下经验,架构必须对外提供高可用性的服务,对内提供高可运维性的系统。同时利用灰度发布,运营监控,容灾,运维自动化/半自动化等方法解决架构问题。 亿级在线的飞跃,新时代伴随着新烦恼 IM亿级在线存储系统架构 随着在线亿时代的到来,新的问题和烦恼也随之出现。首先是灵活性问题,比如说QQ昵称长度增加一半需要两个月,增加故乡字段需要两个月,增加最大好友数从500变成1000需要三个月。其次,亿时代还需要具备一些重要的能力,比如原来有上万的好友;对隐私权的控制;PC QQ与手机QQ别互踢;异地容灾,即一个城市出问题的时候,别的城市也能提供服务等等。但亿时代带来的最大的挑战是,原先IM后台从1.0到3.5都是在原有的基础上改造升级,IM后台1.0的代码在3.5的下面都能找到,但是这种持续打补丁的方式已难以支撑上亿级的用户。所以除了底层的公共部分之外,IM后台4.0必须从零开始,重新设计实现。 IM后台4.0存储系统历时三年完成,支持千万级的好友在线,加强了隐私权限控置,可以灵活扩展字段,原来扩展一个字段需要两三个月,现在只需要一周,同时还具备高可运维性,高性能。 IM后台4.0通信系统历时两年多,架构比原来的复杂很多,希望再过一年可以完成。到目前为止,已取得了一些成果:首先是多点登陆,可以管理不同的登陆终端;支持5至10亿个实例同时在线;方便接入微信等多种业务;实现区域自治。 在亿级在线时代,需要的关键技术首先是提供高灵活性的业务支持,传统IT行业可能半年到两年出一个新版本,而互联网行业每个月就需要出一个新版本。同时还要保持高性能,高可用性,高可运维性。展望腾讯IM服务的未来之路,全球化分布、高效的研发、监控报警的智能化成为未来发展的战略。 “四高”准则,QQIM后台技术演化启示 在QQIM后台技术演化过程中,每一个级别要求的技术不一样,如十万级和百万级在线要求高性能、7*24小时连续服务;千万级要求高可用性和高可运维性。而到了亿级在线,就要求高性能、高可用性、高可运维性和高灵活性“四高”准则,每提升一个量级,相应的四个高都会有相应的要求,而且技术难度也会提升一个量级。 团队经历了从1.4万到千亿级飞跃的过程,免不了很多教训,正是因为有了这些技术积累,才换来今天这么大的规模。互联网行业与传统IT行业不一样,有自己的技术规律,需要做自己的技术积累。 不仅IM业务,腾讯公司在很多不同业务上都走过一些弯路,积累了相应的经验,边重构边生活、大系统做小、先扛住再优化、干干净净......这些正是在不断的试错和总结中得出的理念和价值观,是在技术演化的过程中得出的启示。 小结 虽然这是腾讯大讲堂第一次走出去,但是参会人数超过六百人,会场爆满,场面热烈。“内容全面”、“干货多”是本次分享的一大特色,观众积极踊跃地提问互动,线上线下持续的交流和讨论,都给活动组织者增加了信心和经验。 北航之行虽然结束,但是腾讯大讲堂走出去之路才刚刚开始,我们将会邀请更多公司的专家和媒体、高校合作者,共同参与到腾讯大讲堂分享的行列中。 下载本次活动PPT |