Leaf in the Wild:借助 MongoDB 扩展中国最大的汽车服务应用

快的将 MongoDB 用于其出租车呼叫服务的核心,每天联络司机与乘客高达 600 万次,管理近 5 亿份订单。快的已将 MongoDB 扩展至 4 个地理区域,每秒可处理数千次读写。

上个月,在快的首席架构师欧阳康于北京 MongoDB Day 发表演讲之后,我和他进行了交流,详细了解了中国最主要的出租车预订应用程序如何使用 MongoDB,以及他为打算开始使用此数据库的用户提供的建议。

基于智能手机的打车和共乘服务正在以惊人的速度发展,因此吸引了大量投资(并产生高昂的公司估值)。它们同时也在激烈竞争。技术的选择最终在市场中决定成败。在世界上人口最多同时也是深受最严重的交通拥挤所害的国家,将敏捷可扩展的技术用于交通服务的重要性愈加凸显。

请首先介绍一下关于贵公司的一些情况。

快的成立于 2012 年,并且已成长为大中华区最大的汽车服务应用程序1,吸引了来自阿里巴巴和经纬创投的投资。在仅仅 2 年时间里,我们已吸引了 1 亿用户,在中国 300 多个城市里通过我们的智能手机应用每天提出多达 600 万次乘车请求,与 300 万司机取得联系。而我们仍在持续快速增长。

快的团队的目标是提高城市交通效率,提升人们生活质量。我们当前运营 2 大品牌服务,即快的打车和快的一号专车,分别提供出租车服务和配备司机的豪华轿车服务。我们的长期计划是结合基于位置的移动技术、针对庞大用户群的数据挖掘和智能路线算法,来为乘客运输的每一方面提供服务。

跟我们说一说你们是如何使用 MongoDB 的。

我们的出租车预订应用程序的核心在于基于位置的服务,而我们依靠 MongoDB 来实现此项服务。我们可以使用 MongoDB 地理空间索引和查询实时跟踪司机的位置,以此来将用户和最近的出租车联系起来,并直接在客户的应用中显示更新。位置数据将持续更新并接受查询。

我们还将 MongoDB 用作存储订单数据的有效存档。每当客户要求打车时,这段旅途的起点和终点、司机身份和费用都将存储在单条记录中。我们最初基于 MySQL 生成存档,但当订单量超过 1 亿条记录时便达到了扩展限制。我们知道 MongoDB 可以扩展,因此迁移了存档来通过水平横向扩展获得成本和性能优势。

你们还使用了哪些其他数据库?

我们将 Redis 用于缓存,并将 MySQL 用于存储运营客户和订单数据。我们还将 MongoDB 和 MySQL 中的数据复制到 Hadoop 以进行数据挖掘和分析。是否考虑过将其他数据库用于你们的应用?是什么原因促成你们选择 MongoDB?针对基于位置的服务,我们考虑过以下三种选择:

  • 基于 MySQL 和 Postgres 的关系型解决方案
  • SOLR(用于应用程序的搜索元素)
  • MongoDB

我们按照多种标准评估过每个选项,其中包括

  • **性能。** 我们从多个方面衡量性能:延迟(对于在移动应用上提供良好的用户体验至关重要)和实时更新速度,这样我们才能始终使用最新的数据
  • **可扩展性。** 我们坚信服务将要快速提升,因此应务必了解到我们应能够根据需要扩展数据库。
  • **易于使用。** 我们需要在不因复杂而为开发人员和运维团队增加负担的情况下实现性能和可扩展性目标。

我们按照此标准评估了所有选择,发现 MongoDB 于我们而言是最佳选择。它符合性能目标。且易于开发。尤为重要的是,实践证明它不但易于部署,而且还能够大规模运行

请介绍一下你们的 MongoDB 部署

我们的 MongoDB 数据库分片到四个地理区域。每个区域部署了 7 节点的复制集(6 个数据承载节点和 1 个投票节点)。通过此部署,我们可以将数据放置在实际更靠近本地用户的位置,从而降低访问延迟,同时提供应用程序所需的可扩展性和复原性。我们绝对不允许出现任何宕机时间。我们将 Nagios 用于监视应用程序和数据库。

快的 MongoDB 部署地理分布我们通过 Java 驱动程序运行 MongoDB 2.6。

您可以告诉我们一些度量数据吗?

可以。

  • MongoDB 每秒可处理 50000 次操作(读取和写入比例为 80:20)
  • 我们的数据库增加到接近 5 亿文档,并且还在继续扩展

你们是否计划将 MongoDB 用于其它应用程序?

我们的营销团队将所有宣传信息和消息都存储在 MySQL 中,但现在已经开始接近扩展限制。因此,它已无法满足需求。我们正在评估是否也将此类数据迁移到 MongoDB。

对于即将推出的 MongoDB 3.0 版本,你们最期待哪些功能?

那一定是文档级别并发控制。随着我们的服务持续增长,我们需要进行扩展才能跟上增长速度,尤其对写入而言。我们相信具有全新 WiredTiger 存储引擎的 MongoDB 3.0 可以支持我们实现此目的。

对于考虑将 MongoDB 用于下一个项目的用户,你有什么建议?

不要只是随波逐流。不要只是选择您已经选过的同一技术。在创新层出不穷的今天,前十年的数据库并非始终是正确之选。

当您在考虑一些可能的技术时,使用您的应用、查询和数据来测试它们。这是确保面向未来选择正确技术的唯一方式。

感谢您能抽出时间,欧阳先生,还要感谢您与 MongoDB 社区分享经验。


是否在考虑迁出关系型数据库?请先阅读 MongoDB 白皮书:

从 RDBMS 迁移到 MongoDB

1根据市场占有率和交易量

关于作者 - Mat Keep

Mat 是 MongoDB 产品营销团队的一员,负责为 MongoDB 产品和服务构建愿景、定位和内容,包括分析市场趋势和客户要求。加入 MongoDB 前,Mat 是 Oracle Corp. 的产品管理主管,负责与 Web、电信、云和 Big Data 工作负荷有关的 MySQL 数据库。下属职位包括技术供应商和最终用户公司的一系列销售、业务发展和分析员/程序员职位。

<< 阅读关于 William Zola 社区杰出人物奖的信息