专访曾宪杰:大型网站系统与Java中间件实践

本文是淘宝技术部总监曾宪杰的专访,他分享了自己在淘宝的技术历程,从07年加入淘宝负责构建消息中间件和数据层,到带领中间件团队的成长。曾宪杰强调了大型网站架构要考虑的水平扩展性、稳定性、易用性和容错性。他还提到,淘宝在开源技术上的积极使用和贡献,并分享了在技术管理和学习新技术方面的经验。

淘宝技术部总监曾宪杰,他是淘宝近10年来历次技术飞跃的参与者、贡献者和带领者。 

曾宪杰,淘宝花名华黎,现任淘宝技术部总监,淘宝技术委员会JAVA分会会长。2002年毕业于浙江大学计算机系。先后在中科院下属企业、先锋电子(中国)等企业就职,是一个桌面管理系统的软件公司的联合创始人并负责总体技术工作。参与过邮政省级地市集中化生产作业系统的设计开发以及大型企业内部桌面管理安全系统的设计和开发。

2007年6月加入淘宝网平台架构团队,负责构建淘宝自主的消息中间件系统,同期主导了淘宝数据层的创建,这两个产品也是淘宝中间件中较为重要的两个。2010年下半年起开始负责整个淘宝中间件团队,帮助团队成为业内知名的Java技术团队。2012年开始从中间件走向应用系统的研发工作,2013年初负责新组建的淘宝技术部。熟悉C++和Java,在多线程、并发、网络通信及支撑大型网站的中间件领域有较多经验,对新技术有浓厚的兴趣。致力于带领团队在无线、数据、业务 平台和组件化开发方面取得突破。

他也是《OSGi原理与最佳实践》一书的作者之一和《大型网站系统与Java中间件实践》的作者。 

优快云:请和大家介绍下你及目前所从事的工作。

曾宪杰:目前主要职责是负责淘宝技术部,在技术和管理上都会投入精力。主要的工作会看技术的发展以及新的技术如何应用在淘宝,这里包括了工程和算法相关的,此外无线也是我们重点关注的部分。然后会和团队一起完成技术部的规划以及帮助团队落地,此外是一些管理上的工作。之前负责的中间件团队,在13年4月份的时候,交给了其他Leader负责。

优快云:能否具体介绍下淘宝网应用架构的变化历程以及架构中的自主研发部分?

曾宪杰:我是07年6月加入淘宝,当时淘宝已经是一个日成交超过1亿元的网站。网站从03年开始基本是一个LAMP架构,后面把应用从PHP迁移到了Java,数据库从Mysql迁移到了Oracle,在07年的时候,基本是一个集中式的应用,除了使用Oracle外,也有自研的搜索、缓存、分布式文件系统等基础设施。

而07年开始,主要的改造工作是围绕着应用和DB的扩展性做的,在应用方面,我们引入了服务框架,解决了应用服务化的问题;引入了消息中间件,完成了应用的解耦;引入了分布式数据层并且完成了数据变更通知以及数据迁移的系统,数据库也从Oracle换成了Mysql,完成了底层的数据库的伸缩性改造,通过这样的改造,使得我们的集中式的网站变成了一个大型的分布式系统,并且在一定程度内,在应用和数据库层面都是可以做到水平扩展的,这为业务的飞速发展以及应对高峰流量奠定了重要的基础。

上述过程中我提到的服务框架、消息中间件、分布式数据层以及支撑这三个重要系统的软负载中心、集中配置管理中心都是自研的。

优快云:一个大型的高并发高性能网站架构需要从哪些层面去考虑?技术堆栈的选择又应该注意什么?

曾宪杰:对于大型的高并发高性能网站的架构,我觉得主要考虑的方面包括水平扩展性、稳定性、架构相关基础设施的易用性、容错性、异地数据中心支持等方面。

而技术方面的选择,如果不考虑现有技术人员的情况,那么建议选择的是有成功案例并且社区比较活跃的技术。

优快云:其中存在的挑战是什么,架构和实现时需要避免哪些坑?

曾宪杰: 细节是魔鬼,一些架构从比较抽象的角度去看,可能比较简单,但是很大的挑战就是细节,这些细节有具体产品实现的细节,也有和业务相关的需求细节。

从我们的经验,从一个功能的构思到最终完全做好,会遇到很多的问题,另外一个方面是一致性,一致性尤其是强一致性的保障是非常具有挑战的事情,再有一个是完全的自动化,这个部分也很困难,一不留神就容易产生雪崩或者不一致等严重的问题,具体需要避免哪些坑,这个在不同的产品上会不一样。

总体来说,在实现中花掉绝大部分时间是用于思考和解决哪些很异常的情况下的实现。

优快云:关于高负载网站打造有什么建议?

曾宪杰:现在对于很多架构师和工程师来说,水平扩展是大家都特别注意的问题,我的建议是大家也要去重视垂直的扩展,去提升单点的能力在分布式系统中其实是很重要的;另外,我个人认为,去引入前面提到的那些组件并不算很困难,但是在这之外,我们如何能很好的评估系统的真实能力、了解当前线上峰值的压力、管理好我们应用之间的依赖,以及做好系统降级的工作是很重要的,此外,就是如何做到异地多数据中心。

优快云:你在分布式数据库中间件这方面有很深的造诣,能否分享一下你们的数据库中间件?与同类数据库中间件相比,它具有哪些特性?解决了哪些技术难点?

曾宪杰:这个只是有一定的了解和经验,不能说造诣很深。就我自己的看法,很多数据库中间件主要解决的是数据库请求的SQL解析和路由的工作,这个在淘宝来说,当然也完成了相关实现。而不太一样的是淘宝的数据访问层,解决了非对称的数据库的数据复制,这个具体指的是源数据和目标数据库系统不是同样数据库并且数据并不是镜像复制的需求,此外,我们的数据层不仅仅解决数据访问问题,也完成了数据库的平滑扩容和缩容处理。在使用方式上,集成在应用中的组件和独立部署的代理两种方式并存,而在数据源的实现上,也提供了三层的可选方式。

非常具体的内容,我是把自己的经验都写到了《大型网站系统与Java中间件实践》一书的章节中了。

优快云:是否可以分享一下淘宝网在开源方面的使用情况和贡献?

曾宪杰:淘宝网对待开源是积极和开放的,我们自己用到了很多的开源软件,小到一些组件,大到像Hadoop等一些系统。在使用开源的同时,我们会把自己对开源系统的修改以及完成Bugfix反馈给社区,来帮助开源软件的完善和发展,此外我们也把一些自研的系统进行了开源,给到那些需要使用的技术人员,并且也从使用者那里得到了很多的帮助,不论是提出的问题还是提交的一些代码,都给我们自身的软件发展带来了帮助。

优快云:机构在选择和使用开源技术时,你有什么建议?

曾宪杰:我个人觉得需要考虑这几个方面:

  1. 这个软件目前的功能和它的RoadMap
  2. 软件本身的架构
  3. 该软件开发的活跃度
  4. 该开源软件是否是遵守该领域内的国际规范的
  5. 在同类产品中,要挑选有比较优势的。并且要考虑可能存在的移植代价。这个移植指的是采用了这款开源软件后现有系统的移植,或者是从这个开源软件到其他软件的移植。

优快云:你现在最关注哪方面的技术?你自己是如何学习并掌握新技术的?

曾宪杰:现在关注的技术不是特别的聚焦,工程和算法的都比较有兴趣。近期相对更加关注的是无线相关的技术以及在目前多端情况下的后端架构改进的相关的内容。

对于新技术的学习,对我来说首先还是去了解这个新技术本身希望解决的问题跟某些现有技术的相关度,新的技术很多,对我来说重点去看的是对我们现在有帮助的,所以我首先要了解新技术到底能干什么,跟我们很相关就会投入比较多经历,否则就是先了解下这个技术能干什么,自己有个印象。另外,去寻找这个新技术和自己现有知识体系的关联是比较重要的,这会让你能更快的学习并且更深的理解,此外,动手做些实践很重要,不过我个人跟之前比,这个部分做的少了很多。

优快云:如今,你在技术管理者和程序员/技术人员两个身份之间是如何协调的?

曾宪杰:对我来说,首先是调整好自己的心态,让自己能够从内心把角色转变过来。因为现在负责的团队比较大,大概三百多个人,所以我首先会考虑自己作为一个管理者应该做什么事情。就我自己感觉,带这么大的团队的压力远远大于自己做技术,因为作为一个技术人员,自己没有做好,一些事情没看清楚,受到影响的主要是自己,而带领团队,自己会影响到整个团队,这个责任很大。

而这两个角色,我自己的感受是,作为原来一线技术人员需要去抠的细节和一些动手实践,我放到了自己的业余时间,因为我确实是对技术本身非常有兴趣的一个人,业余也没什么爱好,除了陪家人孩子也就是加班了。而工作中,其实还是有比较多的时间是花在技术上的,去了解学习新的技术,去参与团队中比较重要的技术方案,而花在管理上的时间,在技术团队并不需要特别的多。

 

 

毕业后的11年 

到7月份就毕业11年了,加入淘宝也6年了。自己一直不太是一个善于写文字的人,这次也尝试用文字回顾也记录下自己这工作的11年吧。

02年本科毕业到现在的11年,呆过四家公司。还是从刚毕业说起吧:

01年开始找工作的时候,是在911之后,我也记不清楚是不是这个时候互联网泡沫破了,反正我的感觉是和上一届师兄比,我们的工作就是一个天上一个地上,当然我们是在地上。记得师兄找工作的时 候,去应聘国内非常著名的通信企业的时候,本科生是能做研发的,而且门槛较低,而我们那一届,本科生只能做销售,而且是非洲。月薪基本跟上一年是打了五折到四折,整一个悲催啊。当时除了能进外企外,待遇最好的是西部某运营商,开出年薪10w的offer,不过要签7年。。。。

因为接触编程时间比较早,自己在编程方面的技能还行,非常不容易(当时给面试机会的工作不是非常多,我曾以为自己会比较简单的在上海找个工作)的在上海找到了一个以为很高科技的公司(当时他们说是搞Linux的)——上海时佑信息系统有限公司。做的是邮政的项目,就是在当年很流行的系统集成商。虽然我在杭州读书,那个时候我并不喜欢杭州,结果4月份去上海实习了2个多月后,就被派去北京出差,学习Uniface,然后去杭州参加和浙江邮政的项目。汗,刚离开杭州没多久就回来了。然后发现其实要做的是邮局的系统,也算是业务吧。不过我除了做一块儿业务外,更多在帮助大家解决一些比较技术的问题,比如用C去写基于FTP的客户端,解决一些诡异的技术问题等。在这里,我也第一次体会到了很多东西,比如我们没有专门的测试,记得我负责的系统第一天在一个支局上线,我就在旁边看他们操作,有问题就想办法先绕过去,然后晚上改代码就更新服务。我记得我还提出上线的时候保持新旧系统运行,我老大说,那你替他们去旧系统录入数据?我说算了。包括开始上线的时候,负责账务的同学经常晚上对账,包括第一个版本直接被业务方劈死并且说不可能按时上线但靠着我在吃粉干时的灵感愣是用较小代价完成改动并按时上线的喜悦,忙并且快乐着。在这家公司,自己也见识了小型机,也接触到了很多实战的东西,包括认识了很多好朋友,尤其当时的技术老大——玉明火,我们也在一起非常诡异的异常的地方,出现的时候弹出一个对话框,请联系玉明火,手机号137XXXXXXXX。后来一次早上,这哥们儿刚要从杭州会上海,在候车的时候接到了一线操作员的电话,他当时一头雾水。

因为经常在杭州,再加上公司内部非技术的一些事情,让我产生了换工作的想法,但是在这家公司,真正让我从一个热爱代码的学生变成了一个真正的程序员,真正的能落地到具体的项目中,结识了很多好朋友,也学到了像Uniface,Unix,DB等方面的知识。自己比较深的体会是一定要主动,没有人有义务要手把手教你,但是做技术的,你主动问还是很多人愿意帮你,你自己很主动,能够得到更多的机会和成长。对我的技术老大,印象最深的有两个场景,一个是我正式入职的时候,没过多久他跟我说,没想到你会来,我听了后心就凉了,不过也是,当时是他面试的我,从他的座位和当时的打扮,我以为是个很普通的工程师,我想这个公司一般员工都这么厉害的,后来才知道他是总工。还有一个记忆深刻的是我要离职的时候,公司老板和部门经理加上我技术老大一起谈,公司老板和部门经理想忽悠我留下,我技术老大说,你年轻,有什么想法要坚持,想干什么就干什么吧。然后我坚决辞职了。

03年的9月1号,在学生开学的时候,我去了在上海的第二家公司报道,是上海先锋商泰电子技术有限公司,是日本先锋和商泰株式会社合资的一个公司。去这家公司的原因也很简单,当时换工作的时候投了很多家,给我Offer的也不多。

在这里我做的事情跟之前的完全不同,是加入一个做车载导航器的开发环境的组,另外的组是做车载导航,那个时候,车载导航非常的贵,在欧美是要卖3000美金左右一台的。这期间我的工作基本上是用Windows API以及WTL(我们没有用MFC)去做控件,我们的IDE中的空间基本都是自己做的,没有用Windows本身提供的,主要是一些我们特殊的需求不能满足,我们又没有源码,就自己搞了。可以说在这个公司,让我在Windows GUI方面以及COM组件方面的技术有了很大的提高。我在项目组中也是最年轻的,老大也很照顾我,也给了我很多机会,也感觉到是把我当今后的重点发展对象在培养,包括后面也给我去争取去日本总部工作的机会,当时坦白说对于在一个日资企业工作包括可能去日本工作我内心是有些纠结的,后来大学同学找到我,忽悠一起创业,我就辞职了。因为04年10月中旬提了辞职,公司组织的去三亚的免费旅游我也没有好意思参加,导致到现在我都没有去过三亚。我老大还有公司的总经理找我谈话,虽然内心有些不好意思,不过还是坚定的走了。离职日期是04年11月30号。这里的考勤制度非常严格,不过公司让你加班也完全按照劳动法给钱,不过我自己更喜欢有一定弹性的环境。当然,在这里,自己对于Windows应用开发以及组件化的构建应用有了很多的提高。

离职后去了重庆,当时因为合伙人的关系,我们把公司放在了重庆,起的名字也很好记,重庆快点科技有限公司。我负责技术,当时为了节省成本,跟成都电子科大的一个老师合作,我在04年12月到了重庆后是基本一直在成都的。印象深刻的就是成都的锅魁,也不知道是不是这两个字,反正很好吃。我们项目的进展一般,开始想做基于互联网的远程技术支持服务,后来发现投入比较大,也没有很多投资,就改为做企业内部的电脑管理的系统。在05年8月的时候,因为第一个版本已经ready, 后面需要跟客户有较多的沟通,再加上也希望能够有自己的技术团队,我离开成都回到重庆,开始组建公司全职的开发团队。可以说我和朋友创业的时候,得到了其中一个合伙人的妈妈的很多后勤上的照顾,以至于我觉得那是我结婚前生活条件最好的阶段。在这段期间,我已经放弃了自己之前在技术上的自我追求,公司需要做什么,就去看什么,包括去搞Perl,BDB后来搞Mysql,ASP.net,,JS中间看了解过JSP,还有Linux下的C的开发,甚至包括在Windows下制作安装程序等。07年初的时候,自己想退出了,还是想回到上海、杭州这边。4月底自己离开了。这是进淘宝前呆的最长的公司了,当然,在这里自己在某个技术领域的积累不能算很深,不过感觉自己的综合能力和素质得到了很大的锻炼,包括跟客户的沟通,带团队,技术的快速学习和使用等,以及在面对各种困难的时候去调整自己,其实这些成长,是因为自己有机会去经历,并且也是通过一次一次的错误,得到了成长和锻炼。

离开重庆,只知道想回上海或者杭州,但是并没有目标。那个时候自己也想稍微休息休息,毕竟从工作开始,除了过年就没有怎么休息过。基本都是从上家周五走,下周一去下家报道的。

进入阿里巴巴:是淘宝技术部成就了我,还是我成就了淘宝技术部 

知道我离开后,我的一个非常好的朋友也是大学同学(韩迪,曾经淘宝的熙官)要推荐我进阿里巴巴,那个时候我也搞不清楚他推荐我去具体哪个地方。反正联系我面试的是淘宝网。后来我才知道,当时好像先推荐去阿里软件的,貌似没有合适的岗位,又把我推到淘宝的。实话说,我是很幸运的,我稀里糊涂的就混进了淘宝网的技术部,那个时候淘宝的技术名气不大,也缺人,加上推荐我的人把我介绍的很好(用徐庶推荐诸葛亮的原话),然后考虑浙大计算机毕业的,估计烂不到哪去,我就进来了。说自己混进来的是因为发现自己08年去面试的时候的问题和标准,问07年的自己的时候自己铁挂的。现在回想起来,真的感谢把我卖进淘宝拿了钱只请我吃了个渝香隆的兄弟,也感谢当时的三位面试官给了我机会(行癫、丁典、三丰,其中行癫先后两次是我直接老板,丁典也做过我一段时间老板,三丰是我老板的老板)。如果当时没进入淘宝,我也不知道我这六年会去走什么样的路。

我07年加入淘宝的title是C++工程师,当时淘宝网技术部写C/C++的加上我就三个人,C/C++当时的需求也不大,我做了一个小功能后行癫就让我转Java,要知道我之前是非常b4 java的,不过看到这边大家都搞Java,就学呗,那个时候为了让我练手,给了一个现有功能的改造的任务,就是把当时淘宝店铺里面,商品分类只能是一层的改为两层结构,以及把一个商品只能归属一个分类改为支持多个。那个时候在试用期,我还是挺担心自己能不能顺利搞定任务转正的。。。

顺利转正后,就参与当时淘宝从集中式应用改造的工作,我那个时候被安排去研究消息中间件,也是从这个时候(大概07年9月)开始了自己的Java中间件之路,基本上07年底到08年中,就是在负责消息中间件的设计和实现,那段日子是单纯的快乐。淘宝的消息中间件也是我这辈子第一个自己完成的Java产品,以至于当时我的老板(07年底老板换菲青了)知道我之前没怎么搞过Java就直接负责这么重要的产品(如果挂了,淘宝的交易都会出问题)的时候还是挺紧张的,从上线后没有出现大的问题的时候他的神情我可以感觉到他一块儿石头落地了。其实我当时并不喜欢搞消息中间件,我想做存储,不过我这个人就是替老板分忧的命(以至于12年到今年初的团队名字叫综合业务平台,啥都能整整),看到没有合适的人能做,我就继续做了,然后下半年的时候,菲青找到我说,要搞分布式数据层,又是个我完全不懂的东西,我问没有比我合适的人来做了么?菲青说没有,我说那好吧。从08年底到09年初,基本重心就在搞数据层,然后搞出点雏形后,菲青说,你搞同城容灾吧。我勒个去,我说不是有张三么?菲青说你在淘宝时间久,人和系统熟悉,你来搞吧,好吧,那就搞吧。同城容灾确实不是个简单的活,应用间的依赖梳理,以及依赖的单Active集群的切换,可以用一些技术手段去解决,不过要去做整体容灾测试等,还是非常复杂和麻烦的。09年我只是用技术解决了一些切换上的问题,整体的容灾还是在11、12年的时候,在技术保障部的努力下达成的。在09年,也和同事毕玄同学一起写了一本书,然后我才知道,原来我们技术人员还是有机会写书出书的,而且是自己不用出钱的。

转眼到了10年,菲青把一个内部的Web框架让我牵头去搞,我已经习惯了自己去横向发展了。到了10年9、10月份的样子,自己的职责又改变了。毕玄同学也把他负责的服务框架、容器团队给了我,组成了淘宝的Java中间件团队。到了11年,我从原来的架构组带着团队到了淘宝的产品技术部,在11年中调整的时候,产品技术部的另外一个偏技术的小组和和中间件融合成了一个团队,也就是目前的中间件和稳定性平台。

在11年中的时候,自己就开始对业务开发比较有兴趣,也在寻找机会去接触这块儿,这可能是在淘宝以来,自己特别主动的去寻求的变化,12年春节后,在中间件之外,也开始带领业务开发团队,自己也在业务理解和业务架构方面有了一定的成长和提高。

到了今年,在3月中旬的时候,自己是彻底告别了Java中间件的生涯,负责新成立的淘宝技术部。回首在淘宝的六年,感受最深的就是幸运,幸运自己加入了这样的集体,幸运遇自己每个老板都对自己这么好,给与自己很大的帮助,也幸运自己一直能够和这么优秀的人合作,让自己得到更快的成长。

我的成功除了运气,更多的是努力以及主动性 

除了运气,自己感受比较多的还是努力以及主动性,以及想清楚自己要走的路并且为之去准备和奋斗,很多事情,自己如果看的相对远一些,那么对眼下的选择会更容易做出判断。那份能够让你愿意为之奋斗的事情,比地域、当下的待遇等等要重要很多。而对自身来说,准备了不一定有机会,但是不准备则一定没有机会,能够充实的过好每一天很重要,尤其在单身的时候,尽量的忙起来吧。

最后也想说说现在负责的团队,新的淘宝技术部负责目前淘宝事业群(阿里集团好多事业群中的一个)的应用开发的工作,今年团队会在Web组件化、应用平台化、多终端以及数据化方面去做技术上的突破。具体业务方面负责淘宝前台业务、互动业务、营销业务、CRM、数字出版、视频的工作。需要在无线、数据挖掘、自然语言处理、图像处理、业务架构等方面的资深人才,有兴趣的同学可以邮件联系我,期待一起共同创造更加不一样的淘宝。(采访末尾有曾宪杰的联系方式。)

曾宪杰        

写于2013年6月初

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值