携程去哪儿网合并:背后的技术力量回顾

  • 郭蕾

2015 年 10 月 26 日

话题:Java.NETJavaScript移动云计算DevOps语言 & 开发

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 & Moblie Service)的架构调整和技术变迁。

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

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