TiDB在摩拜单车在线数据业务的应用和实践

【导语】 摩拜每天产生的骑行数据超过30TB,在全球拥有最为全面的骑行大数据,飞速增长的业务下也面临着数据库扩展与运维的巨大挑战。中间件方案对业务过强的侵入性、不支持跨分片的分布式事务、无法保证强一致性事务的特性都使我们望而却步。2017年初,摩拜单车开始使用TiDB,从最早的RC3、RC4、PreGA、到现在的1.0正式版,一步步见证了TiDB的成熟和稳定。

背景

摩拜单车于2015年1月成立,2016年4月22日地球日当天正式推出智能共享单车服务,截至 2017年11 月中旬,已先后进入国内外超过180个城市,运营着超过700万辆摩拜单车,为全球超过2亿用户提供着智能出行服务,日订单量超过3000万,成为全球最大的智能共享单车运营平台和移动物联网平台。摩拜每天产生的骑行数据超过30TB,在全球拥有最为全面的骑行大数据,飞速增长的业务使摩拜面临数据库扩展与运维的巨大挑战。

面对飞速增长的并发数与数据量,单机数据库终将因无法支撑业务压力而罢工。在摩拜正式上线以来,我们就在不断思考数据库扩展和运维的未来,近年来业内对数据库进行扩展的常见的方案是通过中间件把数据库表进行水平拆分,将表内数据按照规则拆分到多个物理数据库中。使用这样的中间件方案,在数据库扩容时需要先停下业务,再重构代码,之后进行数据迁移,对于摩拜这样与时间赛跑的创业公司来讲代价巨大,中间件方案对业务过强的侵入性、不支持跨分片的分布式事务、无法保证强一致性事务的特性都使我们望而却步。

摩拜单车于2017年初开始使用TiDB,从最早的 RC3、RC4、PreGA、到现在的1.0正式版,一步步见证了TiDB 的成熟和稳定。目前支撑着摩拜内部的实时分析和部分线上业务,同时正在规划迁移更多的线上业务至TiDB。

目前,TiDB在摩拜部署了数套集群,近百个节点,承载着数十TB 的各类数据。

TiDB 在摩拜的角色和主要应用场景

在摩拜,TiDB是一个核心的数据交易与存储支撑平台,引入它的主要目的是用来解决海量数据的在线存储、大规模实时数据分析和处理。

在我们看来,TiDB的好处主要有:

  • 弹性扩容。具有NoSQL类似的扩容能力,在数据量和访问流量持续增长的情况下能够通过水平扩容提高系统的业务支撑能力,并且响应延迟稳定。
  • 简单易用。兼容MySQL协议,基本上开箱即用,完全不用担心传统分库分表方案带来的心智负担和复杂的维护成本,而且用户界面友好,常规的技术人员都可以很高效地进行维护和管理。
  • 响应及时。因为和PingCAP团队有非常深入的合作关系,所以有任何问题都可以第一时间和PingCAP团队直接沟通交流,遇到问题都能很快地处理和解决。

下面介绍 TiDB 的应用场景。

应用场景一:开关锁日志成功率统计

开关锁成功率是摩拜业务监控的重点指标之一。

在每次开、关锁过程中,用户和锁信息会在关键业务节点产生海量日志,通过对线上日志的汇总分析,我们把用户的行为规整为人和车两个维度,通过分布式、持久化消息队列,导入并存放到TiDB里。在此过程中,通过对不同的实体添加不同的标签,我们就能方便地按照地域、应用版本、终端类型、用户、自行车等不同的维度,分别统计各个类别的开锁成功率。

按照我们的估计,这个业务一年的量在数百亿,所以使用单机的MySQL库需要频繁地进行归档,特别是遇到单机数据库瓶颈的情况下,扩容更是带来了非常大的挑战,这在我们有限的人力情况下,完全是个灾难。所以要支撑整个后端数据库,我们必须要寻找简单易用的方案,极大地减少在单个业务上的人力成本开销。其次,根据我们之前使用分库分表的经验,对于这类需要频繁更新表结构进行DDL操作的业务,一旦数据量过大,很容易出现数据库假死的情况,不仅影响服务的可用性,更严重的是很可能导致数据不一致的情况出现。最后,我们希望不管今后的业务量如何激增,业务需求如何变化,都可以保持业务逻辑可以很方便地升级支持。

在方案设计时,我们对比了MySQL分库分表和 TiDB方案。

我们先估计了可能的情况:

  • 新业务上线,在线变动肯定是经常发生的;
  • 尽可能存长时间的数据,以备进行统计比较;
  • 数据要支持经常性的关联查询,支撑运营组的临时需求;
  • 要能支撑业务的快速增长或者一些特殊活动造成的临时流量。

考虑到这些情况,MySQL分库分表的方案就出现了一些问题,首先频繁变动表结构就比较麻烦,而TiDB可以进行在线DDL。数据生命期比较长,可以设计之初做一个比较大的集群,但是弹性就比较差,针对这个问题,TiDB 可以根据需要弹性地增加或者减少节点,这样的灵活性是 MySQL 分库分表没有的。另外,数据要支持频繁的复杂关联查询,MySQL 分库分表方案完全没办法做到这一点,而这恰恰是 TiDB 的优势。通过以上的对比分析,我们选择了 TiDB 作为开关锁日志成功率统计项目的支撑数据库。

图2  场景应用之实时数据分析
图2 场景应用之实时数据分析

目前,摩拜主要上线了两套在线OLTP业务,分别是摩豆信用分业务和摩豆商城业务。

摩豆信用分业务

图5  基于 TiSpark 项目直接读取 TiDB 集群的数据
图5 基于 TiSpark 项目直接读取 TiDB 集群的数据

使用过程中遇到的问题和优化

在说优化问题之前,先看TiDB的架构图,如图6所示。其中:

这里写图片描述
文章知识点与官方知识档案匹配,可进一步学习相关知识云原生入门技能树首页概览8783 人正在系统学习中

来源:csdn研发技术

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2017年11月17日
下一篇 2017年11月17日

相关推荐