在QQIM后台技术演化过程中,每一个级别要求的技术不一样,如十万级和百万级在线要求高性能、7*24小时连续服务;千万级要求高可用性和高可运维性。而到了亿级在线,就要求高性能、高可用性、高可运维性和高灵活性“四高”准则,每提升一个量级,相应的四个高都会有相应的要求,而且技术难度也会提升一个量级。
  团队经历了从1.4万到千亿级飞跃的过程,免不了很多教训,正是因为有了这些技术积累,才换来今天这么大的规模。互联网行业与传统IT行业不一样,有自己的技术规律,需要做自己的技术积累。
不仅IM业务,腾讯公司在很多不同业务上都走过一些弯路,积累了相应的经验,边重构边生活、大系统做小、先扛住再优化、干干净净......这些正是在不断的试错和总结中得出的理念和价值观,是在技术演化的过程中得出的启示。

 

从十万级到百万级在线,第一代架构难支持


  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架构

     这一阶段,我们得到如下经验,架构必须对外提供高可用性的服务,对内提供高可运维性的系统。同时利用灰度发布,运营监控,容灾,运维自动化/半自动化等方法解决架构问题。

 

 

亿级在线的飞跃,新时代伴随着新烦恼

 

  随着在线亿时代的到来,新的问题和烦恼也随之出现。首先是灵活性问题,比如说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服务的未来之路,全球化分布、高效的研发、监控报警的智能化成为未来发展的战略。

 REF PPT:http://djt.qq.com/article-19-1.html

 REF 视频:http://djt.open.qq.com/article-33-1.html