博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
专访黄翀:东方航空到底用MongoDB做了什么,技术选型为何花落MongoDB?
阅读量:6083 次
发布时间:2019-06-20

本文共 2761 字,大约阅读时间需要 9 分钟。

在今年的上,来自中国东方航空公司黄翀分享了,介绍了东航如何将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交互。\\t
  • 支持复杂多变数据存储结构与类型。\\t
  • 支持集群架构保证高可用。\\t
  • 支持复杂的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。

\
\\

受访嘉宾将于9月22日在「大数据杂谈」做线上群分享,回复关键词「东航」,可报名入群听更全面细致的技术细节分享,跟作者线上无障碍交流。

\\

感谢对本文的审校。

转载地址:http://hekwa.baihongyu.com/

你可能感兴趣的文章
2018 年最值得关注的 JavaScript 趋势
查看>>
什么是区块链?超级账本 Brian Behlendorf 从五个方面教你认识
查看>>
Linux中的帮助功能
查看>>
针对Android的Pegasus恶意软件版本和针对iOS的有什么不同?
查看>>
全局探色器
查看>>
Hive Export和Import介绍及操作示例
查看>>
http://mongoexplorer.com/ 一个不错的 mongodb 客户端工具。。。
查看>>
Xcode 4.3 使用xcodebuild命令编译项目环境设置
查看>>
上传jar包到nexus私服
查看>>
Android LruCache 二级缓存
查看>>
Java使用Redis
查看>>
Why Namespace? - 每天5分钟玩转 OpenStack(102)
查看>>
Nuget帮助说明
查看>>
基于linux的ekho(余音)安装与开发
查看>>
Java基础---Java中无参数带返回值方法的使用(三十七)
查看>>
MySQL性能优化的最佳20+条经验(1)
查看>>
对Ansible二次开发来检查服务器的Java程序占用端口数量
查看>>
使用Logstash收集PHP相关日志
查看>>
a:link,a:visited,a:hover,a:active 分别是什么意思?
查看>>
Android学习之BMI1.0
查看>>