Leaf in the Wild: 中国东方航空公司从Oracle迁移到MongoDB,提供一流的用户体验

降低成本,构建前所未有的应用、提高性能:从服务十几个客户到服务成千上万的客户

在过去10年时间里,航空产业迅速发展,收入翻了三番,达到将近 150,000,000美元。然而,利润依旧很低,迫使航空公司不得不通过提供与众不同的客户体验和降低成本以维持运营。中国东方航空公司正使用技术获取极大的优势超越其它公司:通过升级到MongoDB打破传统技术的枷锁,改进客户体验降低总拥有成本(TCO)。

为了了解更多相关信息,我与中国东方航空公司的工程和项目经理童帅华以及首席工程师黄翀进行了面对面的交流。

问:您能先向我们简单介绍一下中国东方航空公司吗?

中国东方航空有限公司每年都会为将近80,000,000乘客提供服务,这使得我们成为了世界上前五的航空公司之一(从乘客数量来看)。我们总部位于上海,拥有一个超过430架飞机的集群。我们也是SkyTeam航空公司联盟的成员之一,飞行网络已经从上海扩展到了世界上200个国家的1,000多个城市。

问:请您描述一下你们是如何使用MongoDB的。

作为我们长远发展计划的一个部分,我们启动了一个重大的数位转型项目,将客户服务作为我们运维的核心。乘客服务系统战略得到了我们CEO的大力支持,并且需要实现一个新一代的现代IT系统来提供高质量的客户体验。

该策略非常重要的一个部分是提高用户在我们网站和移动设备上检索、发现和预定航班的体验。

MongoDB 支持着我们新的检索平台。这对于提供与众不同的客户体验来说至关重要,保证了未来的发展。

问:在MongoDB之前您使用的是什么数据库?

我们原始的检索应用构建在Oracle数据库之上。但是随着需求的发展,我们发现它限制了为客户提供创新和发布新搜索功能的速度。

问:使用Oracle,您遇到的具体问题是什么?

我们需要为乘客提供最新的航班信息进行搜索。之前,我们从类似于Travel Sky之类的旅行数据系统中将航班信息批量导入Oracle。

但是,我们也希望在产品搜索方面为乘客提供更大的灵活性。不仅仅是航班信息,我们也需要包括一些查询条件,例如多城市旅行、当前和历史价格、机场位置以及其它更多的信息。在多表之间使用复杂的join操作,Oracle会很快受到输入/输出限制。它不能将数据扩展到支持大量并发用户的同时维持毫秒级别的响应时间。

问:MongoDB是如何帮助您解决这些挑战的?

MongoDB的文档数据模型,避免了表join的需求,而它基于内存的设计能够允许我们满足性能的服务级别协议。在测试中,我们实现了每秒30,000次查询并且同步处理6,000个写入操作。这些操作都是在一个有着100,000,000文档的数据库中实现的。也许,最让我们印象深刻的是:所有的操作都是在一个复制集上完成的,并且只是用了15%的系统利用率。这意味着:我们可以扩展到大量并发用户,同时也给我们未来的扩展提供了足够空间。

通过使用MongoDB 富有表现力的查询语言丰富的辅助索引,我们现在可以为客户提供其所需的搜索灵活性。他们可以在终端应用延迟少于95毫秒的情况下,使用复杂的搜索条件来快速找到最佳的航班选择,这对数据库而言仅仅是一个很小的部分。

将数据从Oracle迁移到MongoDB非常简单。我们使用Pentaho ETL 工具 在这两个系统之间移动数据。

问:在这个项目中,您是否考虑过其它备选方案?

是的,我们也评估过另一个潜在方案——GemFire的数据网格。在我们的测试中,两个系统都提供了相当的性能,但是,GemFire的成本更高,增加了总拥有成本。

问:您可以描述一下部署环境吗?

目前,我们在一个单一的复制集上运行应用,同时提供了冗余和自我修复,保证不会出现宕机时间。我们计划未来将其拓展为一个多数据中心的部署。

在向外拓展的同时,MongoDB还为我们提供了向上拓展的性能,这可以帮助降低服务器蔓延。我们已经在64核基于Linux的服务器上配置了使用WiredTiger存储引擎的MongoDB 3.0,每一台机器都配备了512GB的RAM和SSD。这样的硬件配置为我们未来的发展提供了足够的空间以及支持运行更多应用协同工作其它实例的能力。

我们使用包括Java,JavaScript以及Python在内的多种混合编程语言,因此,MongoDB的本地驱动程序为我们的开发人员提供了极大的易用性优势。
中国东方航空在线服务架构:MongoDB将成千上万的航班与上百万乘客联系在一起

问:您如何管理您的MongoDB部署?

我们使用MongoDB Ops Manager来配置和监控。MongoDB收集的监测数据及Ops Manager提供的自动警报,都帮助我们即时了解影响用户体验的潜在问题。配置工具帮助我们同时在测试和生产环境中快速加速和升级实例,不用依赖于命令行中的手动配置。

由于Ops Manager的存在,我们的管理员变得更加高效。

问:您是否还使用了MongoDB中的其它服务?

我们使用MongoDB 企业高级版 来降低关键应用的风险。正如上面提到的,Ops Manager为我们提供了操作上的高效性。此外,我们还可以得到保证服务级别协议的24X7支持,以及MongoDB工程师团队直接参与,为我们提供了确保应用的可用性和高效性的保证。

MongoDB对我们来说是全新的,因此,为了保证我们的开发从一开始就向正确的方向发展,我们使用了MongoDB咨询服务

事实证明,我们接受到的关于模式设计、硬件选择以及最佳操作实践方面的帮助在加速进入市场这一块是无价的。

问:你们如何评估MognoDB对业务的影响?

从三个方面:

  • 构建一个之前不可能在Oracle上实现的应用:在多个在线渠道之间低延迟地为用户在新数据上提供一个强大的、实时的搜索能力,让我们可以为客户提供与众不同的体验。
  • 极大的成本降低。这个项目已经证明MongoDB可以作为Oracle的可行替代产品,并且将会减少未来我们对Oracle的依赖。
  • 提高的开发人员效率。文档数据模型、动态模式、惯用驱动程序的简单性及索引的灵活性意味着我们的开发团队可以更快速地构建新的应用。

问:你们是否计划在其它应用上使用MongoDB?

是的。目前我们正在开发两个项目:

  • 在乘客数据上使用MongoDB运行实时分析的推荐系统
  • 现有应用的社交支持:使用MongoDB存储属性数据和社交流

问:对于那些正在考虑在他们下一个项目上使用MongoDB的用户,您有什么建议?

不管任何时候,您正在考虑一项新技术时,遇到一些挫折不要吃惊。我们从一些团队获取到的一个特别考虑是:非关系型数据库中缺少多记录事务。我们花时间了解MongoDB的数据模型及ACID依从文档更新是如何提供我们需要的事务性一致性。当然,这并不意味着未来增加多文档事务对小部分应用没有用。

我们想提供的第二个建议关于拓展。MongoDB的自动分片功能毫无疑问非常强大,但是这仅仅是因为你可以分片,而并不意味着你总是需要分片。我们可以仅仅在一个单一复制集上实现惊人的性能。如果你确实需要分片,可以花些时间了解选择最合适的片键

问:您们对MognoDB 3.2有什么看法?

我们对这个版本的发布非常兴奋。所有的工程师都正在进行3.2的培训,我们也打算不久之后开始进行评估。

非常感谢您花时间和MongoDB社区分享您的经验!

如果您正在考虑从一个关系型数据库迁移出来,阅读我们的关系型数据库管理系统到MongoDB迁移指南来从步入正轨。

关系型数据库管理系统到MongoDB的迁移指南

关于作者-Mat Keep

Mat是MongoDB产品市场部总监,主要负责MongoDB产品及服务的愿景、定位及内容构建,包括市场趋势和客户需求分析。在进入MongoDB之前,Mat是Oracle公司的产品经理总监,负责互联网、电信、云以及大数据工作负载上的MysQL数据库,带领着来自技术供应商和终端用户公司的一系列销售人员、业务开发人员、分析师/程序员。

翻译:周颖敏

审稿:TJ

本文译自:https://www.mongodb.com/blog/post/leaf-in-the-wild-china-eastern-airlines-migrates-from-oracle-to-mongodb-to-deliver-a-world-class-customer-experience

 

赞(0)
未经允许不得转载:MongoDB中文社区 » Leaf in the Wild: 中国东方航空公司从Oracle迁移到MongoDB,提供一流的用户体验
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!