快生活 - 生活常识大全

我在邮箱的这四年


  恍惚间已经工作了四年有余,很幸运刚毕业就遇到一个很好的锻炼机会,05年7月份刚成立的腾讯广州研发中心,主要负责腾讯的邮箱业务,我是在06年2月份加入到这个团队,也算是见证了QQ邮箱的整段发展经历。有些记忆隔的太久,可能时间和细节上不太准确,尽量去回忆吧。
  写这个系列的文章也是对自己过去四年工作的一次回顾和总结,我会结合自己的经历和感受来写,视角不会太开阔,用平铺直叙的方式吧,就像讲故事,我是一个没有太多故事 但却喜欢讲故事的人:)
  也许大家都听说过腾讯做邮箱的那段往事吧,创业团队太自信了,觉得把邮箱放到客户端上依赖QQ巨大的用户 量自然就会成功,但是结果却恰恰相反,纠正错误认识,在04年紧急做了QQ邮箱的web版,也就是QQMail2.0版本,这个版本明显过于仓促,和网易 等其他邮箱应用相比,差距很大。腾讯在05年中旬收购了foxmail及其团队,成立了广州研发团队,主要负责QQ邮箱的开发和运营。很明显,公司非常重 视邮件这一块,也基本承认了之前的判断错误,所以打算下大力气做好邮箱业务,这为之后QQ邮箱能够取得优异成绩奠定了政策基调。
  在 计算机软件领域,一款成功的产品背后一般都会有一个明星人物,QQ邮箱也不例外。QQ邮箱的这个关键人物大家应该也都知道,他就是foxmail的作者张 小龙。09年赖勇浩同学在一次技术交流中谈过他心目中的几个国内顶尖程序员和其成功的软件作品,有求伯君和wps,有鲍岳桥和ucdos3,有王江民和 kv100,有梁肇新和超级解霸3,有张小龙和foxmail,有侯延堂和flashget等等。小龙被认为是国内第二代程序员中的领军人物,他曾经是国 内顶尖的程序员,然而他在QQ邮箱的整个发展过程中不是以技术人员的身份在指导,如果要用一个最合适的身份来形容他,我觉得是产品经理。小龙曾经在内部发 表过一篇文章,这篇文章讲述了他对互联网团队管理的一些观点,他认为互联网团队中的管理不是管人,而是管理产品体验,以产品体验为核心,产品设计和开发人 员与产品共同提升,共同进步。小龙之于QQ邮箱的影响正如乔布斯之于苹果的影响。
  QQ邮箱3.0版应该是广研自主研发的第一款邮 箱产品,2.3版是从总部继承过来的,3.0版的后台很多代码也是从2.3版继承过来的。3.0版的UI有点像hotmail和outlook的综合体, 思路很明显,把邮件客户端做到web上面,做一个富客户端的邮件应用服务。当时国内的邮件应用第一梯队是网易和雅虎中国(中国雅虎是之后的事情),第二梯 队的是新浪、搜狐、tom在线、21cn等门户,第三梯队是一些独立的邮件服务商。当时大家经常上艾瑞网看排名,QQ邮箱当时排名在12左右,还进入不了 前三梯队,市占率低到可以忽略。当时的目标是在一两年内进入第二梯队,我想,如果当时确定目标是超越网易成为国内第一,估计是没人相信的,包括我们自己。
  3.0 版是广研的处女作,投入了全部的人力物力,采用了当时业界最先进的技术方案和最好的UI设计,并且创新的采用outlook的三栏结构,很像邮件客户端, 这是一次软件服务化的尝试。
  我是06年2月份加入广研,当时3.0已经渡过了最繁忙的开发阶段,进入了小范围的公测阶段,用户可 以在2.3版和3.0版之间切换。3.0版的集中开发大概是半年多时间,05年中旬广研招兵买马的时候,大部分人没有邮箱产品的相关开发经验,当时是在摸 索中前进。然而,当时的团队却采用了业界最先进的ajax技术架构,当时的javascript代码有很重的面向对象的味道,用传统的软件工程思想构建了 整个web框架,从软件的开发流程来说,这并没有什么问题,但是产品却有很大的问题出现了–慢,不是一般的慢,当时除了较快的电信网用户可以登陆进邮箱 之外,其他的用户基本上都被卡在登陆上。06年的大部分时间,整个团队都在解决速度慢的问题,尝试了很多方法,把js容量压缩掉了一半,js混淆之后又压 缩了很多,js文件分开为多个,但始终没有根本的转变,速度的提升仍然不能被用户接受。现在回过头分析这个问题,我觉得物理上的压缩和分割js文件之所以 解决不了问题是因为问题的根本在于js的逻辑架构上,当时的js有明显的基类和继承类结构体系,这种结构并不适合物理上的分割,即使分割开,渲染消耗的时 间是节省不下来的。
  3.0版的后台基本上是继承的代码和开源代码的综合。最重要的邮件投递模块采用的是当时最好的投递引擎 postfix,web端采用的是apache。邮件存储是简单的单文件存储方式,用户数据存储也是比较简单的,帐号和邮件列表是合并存储在一起的。这个 架构对于支撑当时的用户规模是足够的。
  06年之前广研在做QQ邮箱开发和运营的人数是比较少的,所以06年吸纳了不少的毕业生, 我就是第一批广研接收毕业生中的一员,当时3.0版的主要开发人员集中在两个小组:QQMail小组和系统架构组,从名字上看,应该是QQMail小组负 责产品层面的开发,系统架构组负责后台架构的研究和开发,不过我当时感觉两个组差别并不大,都是在做产品开发,都同时做前台后台,可能是人手紧张的缘故 吧。QQMail小组除了做产品开发之外,还负责产品的运营工作,人数上稍微多一些。我加入的是QQMail小组,最初是以实习生身份参与到3.0的开发 中,工作任务比较杂,写一些cgi,做一些内部系统和统计的工作,其余的大部分时间是在读代码,也就是上面提到的那些js代码,后台代码和cgi的代码。 这近三个月时间是我有史以来精力最旺盛的一个阶段了,把所有的代码梳理了一次,写了好几本笔记,现在回忆起来觉得真是太不可思议了。
  QQMail 小组当时的组长是ted,系统架构组的组长是harvey,两位老大对我的影响都很大,我后来分别在两位老大麾下做了两年,从两位老大身上学到很多东西, 他们也给了我很多锻炼的机会。
  ted老大当时主要负责QQ邮箱的产品开发运营方面的管理,在我进组之后,当时的3.0已经过了集 中开发阶段,开始进入优化阶段,对运营质量提出了更高的要求,当时整个QQ邮箱的运营只有一个粗糙的数据统计系统和一个nagios系统,数据的收集和统 计的方法比较简单,cgi写日志然后收集起来之后再运用shell统计入库,甚至数据的页面表现也是shell做的。ted安排aoger为我的导师,我 跟着aoger边熟悉系统边做一些数据统计方面的尝试,偶尔也会写一些产品cgi。aoger是一位相当有耐心的导师,尤其是面对我这种打破沙锅问到底类 型的学生,aoger在最初给了我最多的帮助,没有aoger的帮助,我不太可能在3个月理清整个QQ邮箱的架构。aoger解答不了的问题,他会推荐更 合适的同事给我,不过我比较取巧,遇到这种情况一般就去问ted老大了:)也正是在这些和ted老大的问答过程中,增加了彼此的了解,这为以后ted能够 不失时机的给我最恰当的尝试机会奠定了基础,不过最重要的还是ted的信任。
  跟着aoger先后做了运营监控系统和一些相关的统 计系统之后,ted给了我第一个机会独立完成一个系统,那就是广研的业务数据系统,这个系统包括数据的收集、整理分析、报表展示和数据波动报警等功能,这 个系统至今仍然在使用,后台架构也基本没有什么改变,我在做这个系统的过程中,熟练掌握了两门新的语言:shell和python,熟练的程度足够我运用 任何一门语言做整一个系统。在shell编程方面,很感谢felix的帮助,在python方面,很感谢vincent的推荐和帮助。两位都是领域内的高 手,对编程语言的运用驾轻就熟。shell帮我在数据收集的自动化方面做到炉火纯青,收集、纠错和报警一条龙,而且代码相当干净,值得反复阅读(请允许我 陶醉一下);python是一门我非常喜欢的编程语言,让我痴迷了2年,甚至在去年还阅读了一些剖析python源码的书籍,我主要用python做内部 系统的表现网站,报表、图标、趋势图无所不能,而我最满意的是用python设计实现了一个轻量的模板语言,这个语言帮助我通过简单的配置就可以做出一个 统计页面的表现和数据提取,非常方便,现在还有同事在使用这个模板语言,代码也是相当干净(我又陶醉了)。
网站目录投稿:芷卉