编者按:在国际ArchSummit架构师峰会上,记者就一淘搜索引擎技术采访了一淘网架构师曲琳,畅谈搜索引擎技术与研发协调与合作。曲林,一淘网架构师,主要负责一淘网搜索引擎技术。1、首先,您能简单介绍一下自己吗?我是浙江大学2008年毕业的博士生,毕业后去了阿里巴巴。当时在B2B搜索中心工作,做阿里巴巴中文站和国际站的搜索后台。之后去了阿里云和淘宝。现在我在A淘。而整个过程都在搜索领域,垂直搜索是引擎开发工作。大致的背景是这样的。1)你在大学学的是什么专业?我不是计算机专业的,学的是电子信息技术与仪器,应该属于近的计算机专业。我的博士研究方向是矿业相关的,也就是智能监控方向。其实我们在学校做的就是嵌入式系统,更多的是嵌入式系统软件。当然我们这个方向有硬件和软件,所以这个背景会让我们对硬件有更好的了解。2)你觉得你当时学到的东西和你后来做的搜索有很大的关系吗?如果说到领域,其实还是有很大区别的,当然也有一些联系。在相关性方面,实际上使用了一些数据挖掘方法。但是在引擎平台上的具体字段上有很大的偏差。当然,从软件设计或开发的角度来看,其基本背景也相差无几。刚来阿里巴巴的时候,有点挑战。我不得不从头开始学习一个新领域。3)你刚加入阿里巴巴的时候,是高级工程师带的吗?阿里巴巴的文化是,你到了这家公司,你就有了一个师兄,不仅在工作上,生活上有困难的时候,他也能和师兄一起商量。叫他巴迪也无所谓,比较平等,可以直接交流。他不是你的直接上司,你的上司可能是别人。这位哥们可能在公司待过一段时间,对公司比较熟悉,这样比较资深的人。他会在这个过程中指导你,所以你的工作会在他的帮助下一点一点地进行。2、易淘搜索技术部的主要职责是什么?现在一淘的搜索技术部实际上负责的是除阿里云之外的整个阿里巴巴集团的搜索业务。都是在一淘搜索,包括淘宝主搜索,一淘本身的搜索,还有阿里巴巴B2B的中文站,国际站,速卖通,所有的搜索后台都在易淘的搜索部门,都由我们支持。1)是否也支持部署到其他部门?事实上,情况并非如此。我们可能会说那边的业务,具体应用上的业务,是我们这个人管的,不是说那边的部门是具体人管的,我们给他们提供的Code不是这样的。我们直接提供服务,包括引擎的运维,从开发到最终上线,到业务需求的满足都在易淘搜索。2)意思是他们是你的客户,他们说我们要搜索服务,然后你提供给他们?我们以服务的形式支持各个部门和应用业务。3、工程师如何与业务部门协同?一般来说,直接和工程师打交道的是产品部。当然,也有一些运营部门提出要求。每个需求方我们都会有一个专门的技术接口,在具体的开发过程中可能会有一个项目经理。可能是技术团队分配了这样的角色来协调整个开发过程,需求的沟通将由这样的角色来承担和协调。那么我们可能会有一个专门的团队来支持每个具体的业务建议。比如一淘的搜索后台其实是我负责的。然后我们还有一些其他的小团队负责淘宝的主搜索。所有的应用都会针对这个业务需求进行定制,还有这种针对业务的性能优化,还有引擎的部署、调优,甚至一些非搜索类的服务。事实上,搜索引擎不仅仅是核心。为了提供一个完整的服务,你可能还有一些key-value的东西,或者一些在线的计算和实时计算服务,还有一些线下的,数据挖掘的服务。,算法相关的,可能还有一些比如indexbuild,datacapture,ordump。这整套工作都会为业务量身定制。4、其实正如你刚才所说,协调产品和技术的作用是不是双方都很熟悉?正确的。一般来说,如果你想协调这个项目,你首先要对这个项目有丰富的经验。另一方面,你要了解整个技术的上下游。其实搜前线挺长的,你从后往前经历过各种角色很多,首先你要有这个经历,你要了解整条线的情况,这样你才能选择一个多种技术方案中比较合理的一种。这可能不涉及架构的问题。在做具体业务需求的时候,更多的是如何让这个过程看起来像是可以选择一个解决方案来实现需求。另一方面,你还需要了解业务,不仅仅是技术,可能还需要从一个具体的项目去了解整个产品方案,甚至是对用户体验的感受。怎么做才是比较合理的方向。或者你必须在这个要求的权衡中找到更合适的学位。你不能一味的满足这个产品的idea,你不得不对这个技术实现的难度做出一些妥协。其实对项目界面角色的要求是:蛮高的。1)一般在阿里巴巴要达到这样的能力需要3-5年左右?其实更可能是打发时间去锻炼,更好地理解。一般来说,只有2年左右丰富经验的人才能胜任这样的角色。这也与您所担任的职位有关。可能引擎同学对这个流程比较熟悉,因为他们是整个流程的中心。前端同学可能是在做这种用户界面的定制,对于这种与用户体验相关的需求,他会比较有经验。2)那么运维和研发如何直接合作呢?事实上,阿里巴巴的技术支持团队非常强大。阿里巴巴规模的服务器有很多。必须统一管理。不可能把机器交给各个应用方管理。没有办法处理这个。首先,在整个基础设施上,机房、服务器、基础网络、服务器监控、基础硬件维护等,都有专门的团队去做。阿里巴巴的技术支持部门负责此事,他们将保证技术运维平台。其实对于具体的应用需求,比如搜索的运维特性和存储特性、部分服务需求没有什么区别,都是跟你的具体应用相关的。例如,由于数据访问的特性,搜索可能起到中间作用。这个角色会有很大的流量,平均访问不到。这样的话,对服务器的要求就会不同,他不会统一使用同一个服务器来解决这个问题。可能在这些方面,你可能需要针对应用的特性对网络或者服务器甚至交换机做一些定制,或者做这样的配置,或者在应用层管理应用服务。它可能与开发紧密结合,因为您必须了解服务的使用方式才能很好地运行和维护它。因此,这个角色可能更偏向于应用。我们称之为PE。PE团队与开发团队的关系更加密切,甚至对开发团队提出了要求。这称为可操作性要求。其实,当公司发展到一定规模,或者说应用发展到一定规模,可操作性一定是你在软件设置中必须要考虑的问题。像这次大会,仔细看就会发现,所谓大数据或者搜索规模的问题,其实大家都在解决一个问题,就是可操作性的问题。这就是您使用分布式架构解决计算的方式。什么是分布式架构?首先是如何拆分数据,然后是可用性和可扩展性的问题。一个不可避免的问题是机器损坏和故障恢复。这其实是分布式设计最基本的问题。它的根源其实是来自运维,结合载体做出的一些改变,与开发者息息相关。在我们的one-tamo搜索中,其实我们的开发和运维有着非常密切的关系。甚至有的开发人员会以leader的身份去运维。这其实是对我们开发者的一个基本要求。我们会安排您在运维岗位工作半年到一年,让您了解线上系统的工作原理。对于运维,在软件设计或者架构设计的时候,只有你真正的做过了,才知道什么是真正可运维的,而不是你只是做一个简单的程序,按照它去做是很复杂的运维脚本给你做这种可操作性,但是这种可操作性是嵌入在你系统的核心设计中的。这是我们在易淘搜索中的实践之一。这也应该是目前各大公司的一个方向。3)比如在你们部门,我是一名新的研发人员,那么我可以选择哪些发展路线?其实还是有一些区别的。比如一个新人刚加入我们团队,淘宝会先进行淘宝文化的培训。大约需要一到两周的时间。这个可能比较笼统,包括公司的一些文化等等,可能不涉及一些技术。应该说不管是什么岗位,即使是非技术人员也会参加这个培训。培训结束后,将有一个技术大学课程。技术同学会有两周的时间掌握整个淘宝技术体系(不只是搜索),比如信息存储,比如主站相应的服务,这些应该是最基本的吧,大概这些是怎么做的会给你一个介绍。然后这次培训完了就可以回部门了,部门里面也会有培训计划的。比如搜索,我们搜索会有这些介绍性的东西。不是每个人都知道搜索领域,然后它对你有好处。我们用到的一些技术,比如C++,或者一些具体的版本管理工具,甚至是开发工具,我们都会有一些培训,这是在我们部门的平面上。当你在做具体的工作的时候,我们会有一个师兄从你的工作开始一步一步的指导你。可能我们刚毕业的时候,大家的方向不是很明确,可能是你的主管,也可能是你分配的工作,从一个具体的事情开始。那么你可能会先尝试各个领域的东西,在比较广泛的积累之后,你可以从你所做的事情中找到一个可以更深入的点。当然,您可以做很多事情。你可以专注于应用,做一些应用需求相关的工作,也可以做引擎性能相关的工作。这种状态是存在的。可能以后根据这个具体的需求和情况,结合自己的兴趣,找到可以更进一步的点。大概我们的新人流程就是这样的。整个过程大约需要半年时间。说实话,从入门到精通,搜索这个领域需要相当长的时间。4)如果增长目标是架构师呢?事实上,建筑师的头衔是一个比较空洞的头衔。我相信在互联网行业不会有一个非常明确的职位或头衔来称呼架构师。当然,可能有一些公司有这样的头衔,但淘宝里人人都是工程师,你做的可能或多或少涉及到一部分架构工作,但不代表淘宝里没有这样的头衔淘宝。角色说他不写代码,不负责具体的模块设计,或者只负责高层架构。几乎没有这种,主要是这个领域变化太快,你的经验会很快消退。你要在具体的需求和具体的工作中去寻找这样一个结构的机会,而不是自我提升。然而,这种情况下的普通结构是不现实的。在我们的一淘搜索中,可能会有更多的工程师。说明你在工程领域,或者说你在这行有多深。这个可能更多的是你经验的积累,可能有架构方面的经验。当然,最重要的还是你在开发上的积累,或者说产品上的一些灵感。
