TiDB 助力牛板金互联网金融营销平台

2018-01-25 17:53:03 +08:00
 PingCAP

公司介绍

“牛板金”是浙江佐助金融信息服务有限公司旗下综合性互联网理财服务平台,总部位于杭州。牛板金致力于为投资者提供安全、专业、便捷、高效的创新性互联网理财服务,降低投资者的投资门槛,多渠道增加居民财产性收入;支持中小微企业发展,助力实体经济,实现真正意义的“普惠金融”。

截至目前,牛板金已有注册用户接近 80 万人,累计投资金额超过 200 亿元。

TiDB 在牛板金的主要应用场景

场景 1:营销系统

在牛板金中,我们的用户最喜欢的一件事就是打开 App,然后进行签到获取积分,再拿积分兑换加息券来获得更多的收益。正因为此,在整个牛板金营销平台的后台数据库中负责记录用户积分信息的表(积分流水表)增长的比我们想象的要快很多,不到一年就已经超过 5000 万,而且增速越来越快,不得不开始对其开始优化。

上线 MyCAT

一开始我们我们调研了很多相关的数据库分布式中间件产品,包括 TDDL、Cobar、MyCAT、Sharding-JDBC。当时通过一定的考量后,我们选用了 MyCAT 作为分库分表方案,按照时间维度对表进行了拆分。然而实际线上运行过程中,还是遇到了很多问题,大致有以下几种:

对比 TiDB vs MyCAT

因此我们决定寻找是否有更优的解决方案,能够一劳永逸的解决这个问题,这时候 TiDB 再次进入我们的视野,当时 TiDB 刚刚发布了 RC4 版本。在经过一轮详细的测试后,我们发现 TiDB 在数据量不断增长后优势还是很明显的,不管对比单机 MySQL 还是 MyCAT,主要优势有以下几点:

我们开始测试 TiDB,并与 MySQL + MyCAT 传统分库分表中间件方式做了调研比较。

下面是我们调研比较后一些结论和心得:

上线 TiDB

在我们决定迁移 TiDB 后,一个最大的问题就来了,如何在保证数据一致性的前提下更快的将数据迁移同步到 TiDB 集群,这时候我们联系了 PingCAP 官方,他们给我们提供了一个很好的解决方案。

最终我们采用的同步方案是 Loader + Syncer,具体方案如下:

这个方案虽然复杂但能将迁移的时间缩减到最短。

在测试的过程中我们发现,TiDB 在进行一些复杂的强 OLAP 查询时会导致整个集群处于 busy 状态,进而影响到 OLTP 业务,通过和 PingCAP 技术团队沟通,TiDB 官方的建议是,对于一个集群存在混合业务的场景:

我们最后决定采用主从集群模式,通过搭建一组 TiDB 从集群,采用 TiDB Binlog 对主从集群进行同步,这样 Master 集群负责 OLTP 业务,而 Slave 集群负责 OLAP 业务,两者之间就没有相互影响,而且通过实测,TiDB Binlog 的同步延迟大概在秒级,对于我们的 OLTP 业务没有影响。两套集群的配置大致一样,Slave 集群只比 Master 集群少一台 TiDB 角色。

最终,完成生产上的 TiDB 主从两套集群的部署和投产。架构如下:

数据库集群总体配置如下:2TiDB、3TiKV、3*PD。

到目前为止,TiDB 稳定运行近半年,随着牛板金业务规模的逐渐放量,数据库数据处理能力稳定提升。

场景 2:流量采集系统

该系统主要是对我们系统的所有请求流量进行存储以便后期进行分析。由于数据量将会非常大,因此从一开始我们就规划使用 TiDB,这样就可以使用传统的 SQL 来进行分析查询。我们还了解到 PingCAP 的另一个项目 TiSpark,也是很适合在我们这个场景使用,下一步就是规划部署 TiSpark 集群。

对于请求的采集形式,我们是采用在网关层增加一个 Filter 的形式,将请求的相关参数进行采集然后通过消息队列将 message 发送到 MQ,然后通过请求分析处理系统从 MQ 中拉取消息,最后落库。现在只对 App 端的流量做了处理,每天的数据量大约在 1000 万左右。

对于这些数据的分析,大致计划有以下几方面:

通过 TiDB 的在混合负载方面的能力,可以接受海量采集数据的不断写入,同时能够实时的提供分析、统计及计算。在运维方面也不用担心快速膨胀的数据对容量管理和扩容操作带来的繁琐和麻烦。TiDB 提供的 ansible 方式的管理可以提供方面的一键扩容操作。目前我们计划在 2018 年春节后上线该项目。

问题和建议

实践中我们认识到,由于 TiDB 是一个分布式数据库,不可避免的会有网络开销,尤其是对于小表,这个影响会被成倍放大,如果 TiDB 能够对小数据量的表进行特殊优化,让其性能能够接近单机数据库,那对于 TiDB 的使用场景可能会更多,毕竟一个系统中的表不只是拥有海量数据的表,而且也不一定能够采用多数据源的方式来进行修改调整。

2018 开年后,和 TiDB 开发团队沟通此问题,他们表示正在着手解决这个问题,目前在尝试通过 TiKV 端引入 Query Cache 来加速频繁查询,对小表以及聚合类查询的响应速度会有很好的提升,对此我们非常期待。

作者介绍:沈晨波 佐助金融 资深架构师

702 次点击
所在节点    数据库
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/425946

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX