2015年10月26日,携程宣布与百度达成股权置换交易,通过股权交换的方式来完成去哪儿网与携程的合并。交易完成后,百度将拥有携程普通股可代表约25%的携程总投票权,携程将拥有约45%的去哪儿总投票权。

\\


携程和去哪儿网都是中国领先的在线旅游平台,合并后合计市值约达156亿美元。携程创立于1999年,总部在上海,2003年在纳斯达克上市。相对于携程,去哪儿网则比较年轻,创立于2005年,总部在北京,2013年在纳斯达克上市。去哪儿网是国内的Java使用大户,目前线上有上千个Java系统,而携程则使用的是.NET。对于携程为什么选择.NET,网上有很多的讨论,比较合理的解释是携程创立之初选择使用了ASP,而后随着技术的发展从ASP升级到了ASP.NET。更新:经和携程的同学确认,得知携程目前主要的基础系统都已经使用Java,业务系统中是Java和.NET并存。

\\


在过去的几年中,InfoQ中国曾对去哪儿网、携程旅行网进行过详细的跟踪报道。现从架构、开发语言、搜索引擎、云平台、无线等多个维度盘点二者的技术发展历程。

\\


搜索

\\


去哪儿网成立之初是一家纯旅游搜索公司,它将各大小OTA销售的机票、酒店信息汇集到网站上直接销售,可想而知搜索对它的重要性。而携程作为一家专业而全面的OTA(在线旅游)网站,拥有非常多的产品,如何帮助用户快速定位产品是他们的重中之重,搜索引擎又扮演了一个非常重要的角色。像去哪儿网和携程这类的旅游行业的垂直搜索,挑战非常多,比如产品种类繁多,如何帮用户挑选出最具性价比的产品,产品价格和日期、地点强相关,数据量更新大等。在2014年10月的QCon上海软件开发大会上,携程搜索产品研发部总监分享了介绍了携程的搜索系统架构:

\\


搜索系统的架构大概分为两个部分,分别是在线检索系统和离线的索引系统。在线检索系统主要负责处理用户的输入,并返回查询结果,这其中有两个比较重要的模块,一个是Demand Service,负责用户查询前的引导,一个是QRW Service,负责分词、纠错、语义解析和查询重写。离线的索引系统主要负责把数据以索引的形式组织起来,这其中又分为两块,一个是全量索引系统,定时执行,主要作用是建立所有产品的索引,并对数据进行优化和压缩。一个是实时索引系统,它负责把最新的产品数据快速推送给用户。

\

\\


在2012年的QCon北京的演讲中,去哪儿网的朱翔分享了去哪儿搜索引擎QSearch设计与实现。由于时间比较早,所以并不确认目前去哪儿网是否还在使用QSearch。根据演讲介绍,QSearch其实是基于Lucene和Solr,它有丰富的存储类型,可以定制规则排序算法。框架整体上分为两部分,一个是Searcher,一个是Indexer,分别负责搜索和索引。考虑到数据量比较大,会将Indexer分片,每个Searcher负责一个Shard。同样为了保证高可用,系统又有多个索引的拷贝。在Indexer的上层又有Dispatcher来负责结果的合并和请求分发。

\\


私有云

\\


随着业务的不断扩展,各大公司都已经开始着手构建自己的私有云平台。在2014年,携程的吴毅挺分享了题为《基于OpenStack打造携程私有云》的演讲。携程目前在南通和上海的数据中心都已经大规模部署了自己的私有云平台,平台完全基于开源的OpenStack平台构建。从计算的角度来看,携程是将不同的虚拟化技术混合在一起,包括KVM、VMware、Docker。网络这块,使用的是OpenVSwitch和VLan,VMware使用的是Nova-VMware-Driver。具体读者可以浏览演讲视频。

\\


对于去哪儿网的私有云平台,目前未找到相关的技术资料。不过,据ZDNet的报道,去哪儿网从2012年就开始使用了OpenStack,可以说是中国第一批用户。所以从这个信息推断,去哪儿网目前的私有云平台也是基于OpenStack。

\\


开发语言

\\


去哪儿网是国内的一个Java使用大户,目前有上千个系统在线上运行,公司内有大批国内优秀的Java工程师。在过去的几年里,他们创造了大批的工具和系统来解决开发过程中遇到的问题,内部有非常完善的Java开发生态。根据高级系统架构师孙立在2014年的介绍,去哪儿网基于Java的生态平台有自动化发布系统、可靠消息系统QMQ、与测试相关的Mock平台、自动化测试Qunit、代码Review系统、任务调度系统以及监控报警平台。

\\


携程主要使用的语言是.NET和Java,.NET相关的实践并没有做过太多分享,Java方面,携程有使用Spark、Hadoop、Hive等开源软件,并且目前大部分的新系统都已经使用Java开发。在今年Java 20岁生日InfoQ发布的迷你书中,CTO叶亚明这样评价Java:

\\


尽管当下仍不断有新语言出现,但毫无疑问,未来二十年,Java仍将会是最受欢迎的编程语言。如大家所知,Java不仅仅只是一种主流编程语言,它同时也代表着一整个活跃的生态系统。Java开发者们将自己的聪明才智投入到这个平台上,而平台则回报给他们工作岗位与相应薪酬。要打理好现有的Java解决方案,我们需要Java。而为了顺利推动未来的业务发展,我们必将打造出更多Java应用程序。

\

\\


无线

\\


去哪儿网从2010年开始投入无线领域,随着HTML5标准的成熟,他们开始探索使用HTML方案在性能及体验间寻求平衡的解决方案。无线技术高级总监蔡欢分享了去哪儿的SPA HTML应用架构。他提到NativeApp有很多用户体验方面的优势,但也有很多的局限,比如分平台开发维护成本高,部署成本高。目前WebApp的解决方案有传统的page2page、pjax(pushState Ajax)、SPA(SinglePageApplication)。相比其它两种方案,SPA的优势是前后端分离,灵活度高,贴近于Native应用的交互体验。去哪儿网的SPA设计思路主要包括模块化开发、视图切换、URL路由、模板前端渲染、响应式、浏览器及App内做功能扩充和体验差异、开发环境及构建⼯具。

\\


截止到2014年年底,携程50%的交易量都已经来自于手机端,为了迎接移动方面的挑战,携程在2014年做了非常多的努力,其中包括组织架构调整,拆散无线团队,分到各个业务团队中。关于当时面临的调整,叶亚明这样描述:无线是单独的事业部,所有无线需要开发的功能到那儿排队,这就导致无线的开发永远滞后于Web。对于解决方案,他做了几个总结,一是调整组织架构,让每个业务开发管好他自己的无线产品。二是推动工程师文化,提高大家的学习能力和业务能力。

\\


同样,携程在无线端也尝试了HTML的解决方案。在2014年的QCon上海中,携程高级架构师刘普功分享了携程Mobile架构演化的演讲的演讲,介绍了Mobile 2.0下客户端H5/Hybrid/Native和服务端(H5 Service \u0026amp; Moblie Service)的架构调整和技术变迁。

\\


另外,还有部分角度由于资料不全,所以无法做归类,现将相关的内容列举如下:

\\


  1. Qunar酒店交易系统架构实践\\t
  2. 携程App的网络性能优化实践\\t
  3. 系统架构去哪儿了\\t
  4. 深入解析和反思携程宕机事件\\t
  5. 基于PXC的MySQL高可用架构探索\\t
  6. 携程App for Apple Watch探索\\t
  7. 携程首席架构师谈DevOps:找到合适的人最重要\