Note

专访黄翀:东方航空到底用MongoDB做了什么,技术选型为何花落MongoDB?

· Views 272

在今年的MongoDB World W016大会上,来自中国东方航空公司黄翀分享了使用MongoDB的实践经验,介绍了东航如何将Spark和MongoDB配合使用来解决所面临的问题,以及具体的步骤,一时引起热议。

东航信息部PSS部门副经理童帅华表示,选择MongoDB,是为了打造东方航空新一代Shopping系统,希望后台数据存储除了要有关系型数据库所有查询功能,还想支持多变的数据模型以及结构。

那么,东方航空具体如何进行的技术选型?效果如何?为此,InfoQ对东方航空相关项目的技术负责人黄翀进行了专访,对这些问题一一进行了解答。

受访嘉宾介绍

黄翀,东方航空PSS部门架构师。作为工程师先后供职于PCCW,Sinolife等公司,有着超过10年开发经验,熟悉开源产品如Spark,MongoDB,Drools等。

InfoQ:东方航空开始使用MongoDB,您提到,目前只在一个项目中进行了使用。能否详细介绍下这个项目的背景呢?该项目的配置如何?其数据库有哪些特点,所接受的访问量是什么数量级?

黄翀:该项目是东航Shopping项目,为用户提供个性化的航班搜索服务,支持多目的地搜索、基于预算范围的搜索、城市主题的搜索、灵感语义的搜索、实时的低价日历搜索等。同时,灵活组合中转路径,提高OD航线覆盖率。

上述的项目背景所带来的技术挑战是:一次前端搜索,所带来的后端的库存和运价搜索复杂度是原来的几十倍或者上百倍。因此,该项目对系统的性能要求更高。

该项目的配置:采用 3 台 64 核 128G memory ssd硬盘。

生产环境: 3台服务器组MongoDB Replica-set集群。

访问量: 目前推广上线了部分渠道,旅客的查询量每日600万次+,转换成数据库的查询量每日4500万次+。

数据库总数据条数: 720亿条,每日更新次数2600万次+,99%以上查询效率低于200ms。

InfoQ:为什么选择在该项目中用MongoDB?为了保证提供正常或更好的服务,东航从哪些方面进行了评估?具体的评估过程、数据、结果如何?

黄翀:该项目的特点是:高负载高并发。因此,我们在选型数据库时,主要参考技术标准如下:

  • 支持基于内存查询的数据库,减少磁盘IO交互。

  • 支持复杂多变数据存储结构与类型。

  • 支持集群架构保证高可用。

  • 支持复杂的SQL查询,例如基于预算,来搜索满足条件的航班;或者基于航班时刻(上下午),来搜索满足条件的航班等。

综合以上标准进行评估,最后我们选择了MongoDB。

项目开始之初就依次评估过Greenplum,Oracle,MySQL,MongoDB等技术,有RDBMS(ACID),有Nosql(cap);既考虑key-value型,也考虑要支持范围复杂搜索。既考虑到数据总量对性能影响,也考虑到我们是查询性能要求高,写入性能要求不是不高但是次要。既考虑到实际开发难度学习曲线,也考虑到运维成本。

最后,我们又比较了性能、开发难易程度等诸多因素,最后选择了MongoDB。

InfoQ:Spark和MongoDB的结合,是否完美匹配了东航的需求?在实时性方面,这样的结合有什么优势?在目前的使用过程中表现如何,有没有体现出优势或者暴露出不足?

黄翀: Spark作为一个基于内存计算的引擎目前已进入东航的视野,我们进行了POC测试及使用场景验证,证明其对提高我们性能是有帮助的,下一步我们会考虑在生产上应用Spark+MongoDB的技术。

我们在运价计算场景验证了这项技术的优势。本来每次请求都要计算运价,现在我们将预先计算好的结果都存入MongoDB,将计算性能问题转化为查询性能问题。基于我们在MongoDB在优化查询方面的经验,简化了问题本身。

优势显而易见,不足在于Spark的map方法不适应一些自编程map,造成一些复杂中转程运价的计算难于在Spark中实现。

InfoQ:该项目在迁移、部署和维护方面是如何进行考虑的?成本是如何进行估算的?该项目目前是否已正式上线,投入使用?

黄翀:目前使用的项目不存在迁移的过程,因为是新的项目选型了MongoDB数据库。目前来说MongoDB对东航还属于新事物,因此运维这块还依赖于项目组自己和MongoDB的原厂商一起来保障。

使用MongoDB的成本主要是购买了原厂的运维保障,因为目前使用MongoDB的Shopping项目是东航电商项目的核心组件,运维级别非常高,因此采购原厂来支持保障数据库的运维是非常必要的。

该项目已正式上线投产使用。

InfoQ:该项目的技术方案具体是如何落地的?有没有遇到哪些阻力?对于想要采取相似技术方案的企业来说,有哪些经验可以分享?

黄翀:早在2014年初,我们已经使用MongoDB Version 2.8将以往使用Oracle作为数据库的功能都实现了一遍,这个切换是非常方便快速的,许多代码可以复用。由于MongoDB是无模式的,可以不遵守范式,所以在设计document结构时,以及chunk key的选择时是有争论的,MongoDB的咨询师给了我们比较大的帮助。

随着项目进行,MongoDB自己也在更新换代,我们一起成长。同时发现我们上一个新应用,比以往至少要快5个人天。我相信在MongoDB在不需要数据库支持强事务的场景,是非常值得采用一种数据库。

MongoDB是操作性功能完备数据存储方案,能覆盖众多场景。在云中部署,结合Docker等一众运维工具,会提高运维效率,节约运维成本。

InfoQ:针对东航开始使用MongoDB,网上也有很多的评论,也有很多的误解,有支持者也有质疑者,您如何看待这些观点呢?假如该项目的方案表现令东航十分满意,在未来会推广到其他项目中去么?

黄翀:对我们来说,我们使用MongoDB,不是属于哗众取宠,为了使用开源技术而使用,而是针对使用的场景进行了多轮的技术验证和多个数据库POC测试比较,选定了满足我们要求的产品,同时成本也能为我们所接受。因此这样的选型是对东航有帮助的,同时在互联网化的今天,东航这样的传统性企业在技术上也在不断的开放自己,开始拥抱互联网技术,在民航IT生态圈也占据一席之地。

我们在今后的项目中,针对适合使用MongoDB的业务场景,也会继续考虑使用MongoDB。

Disclaimer: The content above represents only the views of the author or guest. It does not represent any views or positions of FOLLOWME and does not mean that FOLLOWME agrees with its statement or description, nor does it constitute any investment advice. For all actions taken by visitors based on information provided by the FOLLOWME community, the community does not assume any form of liability unless otherwise expressly promised in writing.

FOLLOWME Trading Community Website: https://www.followme.com

If you like, reward to support.
avatar

Hot

No comment on record. Start new comment.