LEAF IN THE WILD:MongoDB在中国最大打车APP中的关键应用

本文译自Mat Keep的英文博客: http://www.mongodb.com/blog/post/leaf-wild-scaling-greater-chinas-largest-car-service-app-mongodb

快的打车 在它的出租车打车核心业务中使用MongoDB,支持着司机与乘客每天高达6百万次的联系,并且管理着将近5亿的订单。快的打车已经在4个地理区域上对MongoDB进行了拓展,支持着每秒钟数以万计的读写操作。

在上个月于北京举办的MongoDB日展示结束之后,我与快的打车的首席架构师——欧阳康做了进一步的交流来了解中国最大的打车应用如何使用MongoDB,以及他为那些刚开始使用MongoDB的用户提供的建议。

基于智能手机的出租车打车及驾乘分享业务正以一个不可思议的速率增长,吸引着大量投资(以及巨大的公司价值)。这些业务的竞争也是非常激烈的。而技术的选择将最终决定产品在市场中的成功与否。在这个世界上人口最多、交通阻塞最严重的国家,在交通运输服务中使用灵活可扩展技术的重要性尤为突出。

问:请您先向我们简单介绍一下您所在的公司。

快的打车成立于2012年,并且已经成为大中华地区最大的出租车服务应用[i],吸引着来自于阿里巴巴和经纬创投的投资。在刚刚过去的两年内,我们已经吸引了1亿多用户,这些用户每天通过使用我们智能手机应用发送高达6百万的租车请求,并且在中国超过300个城市里与300万司机取得了联系。并且,公司仍在快速成长中。

快的打车团队的目标是提高城市交通运输的效率以及人们的生活质量。目前,我们提供了两种类型的业务——快的出租车以及快的一号专车,分别为用户提供了出租车及VIP带司机的专车服务。我们长期的计划是通过结合基于位置的移动技术、庞大用户基础的数据挖掘及智能路线算法来为乘客交通运输的方方面提供服务。

问:请您向我们介绍一下您们是如何使用MongoDB的。

我们出租车预定应用的核心是基于位置的服务,而该服务主要依赖于MongoDB实现。通过使用MongoDB的地理空间索引及查询,我们可以实时跟踪司机的位置,并且使用这些位置来帮助用户与离他们最近的出租车建立联系,然后在顾客的应用上直接展示相关位置的更新。位置数据一直持续被更新和查询。

此外,我们还使用MongoDB作为我们历史订单数据的存档。每次顾客呼叫一辆出租车,行程的起点及终点、司机的身份以及费用等都会被存储在一条单一的记录中。最初的时候,我们在MySQL之上构建了我们的数据存档,但是我们发现当订单容量超过1亿条记录,就达到了MySQL扩展的极限。而我们了解到MongoDB的可扩展性之后,我们就对数据档案进行迁移,以获得水平扩展的性能优势。

问:您们还使用了什么其它的数据库吗?

我们使用Redis进行缓存,MySQL来存储顾客运营及订单数据。此外,我们还将数据从MongoDB和MySQL中拷贝到Hadoop上进行挖掘及分析。

问:您是否为您的应用考虑过使用其他数据库?是什么让您选择了MongoDB

我们为基于位置的服务考虑了三个选择:

  • 基于MySQL及Postgres的关系型解决方案,他们有类似的地理空间索引支持
  • SOLR(用于应用的搜索部分)
  • MongoDB

我们使用了多个标准对每个选择进行了评估,包括:

  • 性能。我们在多个维度上对性能进行了评估:移动应用中对于良好用户体验而言至关重要的——延迟、实时更新的速度——保证我们是在最新的数据上进行工作。
  • 可扩展性。我们非常确信服务将会快速获得关注,因此预先知道我们能够即时对数据库进行扩展是非常重要的。
  • 易用性。我们的目标是在不给我们的开发者和实施团队增加复杂度的前提下,实现我们的性能及可扩展的目标。

我们使用这些准则对所有的选择进行了评估,发现MongoDB是对我们而言最好的选择。它能够满足性能目标,并且我们发现基于MongoDB进行开发是非常容易的。非常重要一点的是,MongoDB非常易于部署并且在大范围内运行。

问:请您描述一下您的MongoDB部署。

我们的MongoDB数据库在4个地理区域上进行了分片。每个区域都部署了一个7节点的副本集(6个数据存储节点及一个投票节点)。这种部署帮助我们将数据放置在与当地用户物理上接近的区域,以获得低的延迟存取,也为我们提供了应用需要的可扩展性及弹性。我们不能容忍任何的宕机时间。此外,我们也使用Nagios来监测应用及数据库。

我们使用Java驱动来运行MongoDB2.6。

问:您可以和我们分享一些其它的指标吗?

好的。

  • MongoDB每秒支持着5万个操作(读取和写入的比例约为80:20)。
  • 我们的数据库已经增长到5亿多文档,并且还在持续扩展中。

问:您们还有在其它应用上使用MongoDB的计划吗?

我们的营销团队在MySQL上存储上它所有的营销及宣传信息,目前已经开始逐渐到达它的扩展极限。因此,MySQL并不能满足他们的需求。目前,我们正在考虑将这些业务也迁移到MongoDB中。

快的打车的地理分布式MongoDB部署
快的打车的地理分布式MongoDB部署

问:对于即将发布的MongoDB 2.8版本,您最期待是什么特色?

我们希望它拥有文档级别的并发控制。随着我们服务的持续增长,我们需要不断进行扩展以达到应用的需求——特别是写操作。这些都是我们相信MongoDB 2.8 版本及它新的WiredTiger存储引擎可以帮助我们做到的。

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

不要盲目从众,也不要只局限于选择那些经常选择的技术。当今世界随时随地都有非常多创新,过去几十年的数据库并不一定是正确的选择。

一旦您有了一个可用技术的候选名单,你就可以使用应用、查询及数据对它们进行测试。这是确保你们正在选择正确技术向前发展的唯一方法。

欧阳康,非常感谢您花时间和MongoDB社区分享您的经验。

想要从一个关系型数据库迁移出来?下载MongoDB白皮书来开启您的MongoDB之旅。

 

 

[i]就市场份额及交易量而言

LEAF IN THE WILD:MongoDB在中国最大打车APP中的关键应用》有1个想法

发表评论