作者:丰巢技术团队

随着丰巢业务系统快速增长,其核心系统的数据量,早就跨越了亿级别,而且每年增量仍然在飞速发展。整个核心系统随着数据量的压力增长,不但系统架构复杂度急剧增长,数据架构更加复杂,传统的单节点数据库,已经日渐不能满足丰巢的需求,当单表数量上亿的时候,Oracle 还能勉强抗住,而 MySQL 到单表千万级别的时候就难以支撑,需要进行分表分库。为此,一款高性能的分布式数据库,日渐成为刚需。

思考

在互联网公司业务量增大之后,并行扩展是最常用、最简单、最实时的手段。例如负载均衡设备拆流量,让海量流量变成每个机器可以承受的少量流量,并且通过集群等方式支撑起来整个业务。于是当数据库扛不住的时候也进行拆分。

但有状态数据和无状态数据不同,当数据进行拆分的时候,会发生数据分区,而整个系统又要高可用状态下进行,于是数据的一致性变成了牺牲品,大量的核对工具在系统之间跑着保证着最终的一致性。在业务上,可能业务同学经常会遇到分过库的同学说,这个需求做不了,那个需求做不了,如果有 sql 经验的业务同学可能会有疑问不就是一条 sql 的事情么,其实这就是分库分表后遗症。

为此,我们需要有个数据库帮我们解决以上问题,它的特性应该是:

  • 数据强一致:支持完整的 ACID

  • 不分表分库:无论多少数据我们只管插入不需要关心啥时候扩容,会不会 有瓶颈

  • 数据高可用:当我们某台数据库的少部分机器磁盘或者其他挂了的时候,我们业务上可以无感知,甚至某个城市机房发生灾难的时候还可以持续提供服务,数据不丢失

  • 复杂 SQL 功能:基本上单库的 SQL,都可以在这个数据库上运行,不需要修改或者些许修改

  • 高性能:在满足高 QPS 的同时,保证比较低的延时

选型

根据以上期望进行分析,我们分析了目前市面上存在的 NewSQL 分布式数据库,列表如下:

在综合考虑了开源协议,成熟度,可控度,性能,服务支撑等综合因素之后,我们选择了 TiDB,它主要优势如下:

  • 高度兼容 MySQL

    大多数情况下,无需修改代码即可从 MySQL 轻松迁移至 TiDB,分库分表后的 MySQL 集群亦可通过 TiDB 工具进行实时迁移。

  • 水平弹性扩展

    通过简单地增加新节点即可实现 TiDB 的水平扩展,按需扩展吞吐或存储,轻松松应对高并发、海量数据场景。

  • 分布式事务

    TiDB 100% 支持标准的 ACID 事务。

  • 金融级别的高可用性

    相比于传统主从(M-S)复制方案,基于 Raft 的多数派选举协议可以提供金融级的 100% 数据强一致性保证,且在不丢失大多数副本的前提下,可以实现故障的自动恢复(auto-failover),无需人工介入。

基于如上的原因,我们选择了 TiDB,作为丰巢的核心系统的分布式数据库,来取代   Oracle 和 MySQL。

评估

1. 性能测试

TiDB 的基准测试,使用的工具是 sysbanch 进行测试,使用了 8 张基础数据为一千万的表,分别测试了 insert,select,oltp 和 delete 脚本得到数据如下,查询的 QPS 达到了惊人的 14 万每秒,而插入也稳定在 1 万 4 每秒。

核心服务器配置:

测试结果:

通过~

2. 功能测试

通过~

接入

因为是核心系统,安全起见,我们采取了多种方案保证验证项目接入的可靠性,保证不影响业务。

1. 项目选择

在寻找第一个接入项目的时候,我们以一下 4 个特征,进行了选择。

最终,我们选择了推送服务。因为推送服务是丰巢用来发送取件通知的核心服务,量非常大,但逻辑简单,而且有备选外部推送方案,所以即便万一出现问题,而不会影响用户。

2. 代码修改

**因为 TiDB 是完全兼容 MySQL 语法的,所以在这个项目的接入过程中,我们对代码的修改是很细微的。**SQL 基本零改动,主要是外围代码,包括:

  • 异步接口修改,数据异步化入库

  • 同步接口修改,实现异常熔断

  • 停止内嵌数据迁移代码

以上三点,保证了整个系统在不强依赖于数据库,并且能在高并发的情况下通过异步落库保护数据库不被压垮,并且在数据库发生问题的时候,核心业务可以正常进行下去。

效果

1. 查询能力

接入 TiDB 之后,原先按照时间维度来拆分的十几个分表,变成了一张大表。最明显的变化,是在大数据量下,数据查询能力有了显著的提升。

2. 监控能力

TiDB 拥有很完善的监控平台,可以直观的看到容量,以及节点状态。

还能了解每个节点负载和 sql 执行的延时:

当然还能了解所在机器上的位置,CPU 内存等负载情况:

网络状态也能清晰的监控到:

所有这些能让团队能分析出来有问题的 sql,以及数据库本身的问题。

小结

TiDB 的接入过程,整体还是非常顺利的,由于之前做了很多接入的保障工作,当天切换流量到 TiDB 的过程只用了 10 分钟的时间,在此也要感谢 TiDB 对于 MySQL 语法的兼容性的支持,以及 PingCAP 提供的各种有用的工具。到目前为止,系统的稳定运行了一个多月,很好的满足了丰巢的业务需求。

TiDB 的改造完成之后,丰巢推送服务对大部分消息进行了落地和查询,截止目前为止,推送服务最大的日落地量已经达到了 5 千万,而如果现在推送服务还使用的还是 MySQL 的方案,就需要上各种的分库分表方案,很多细致的业务就无法或者难以开展。

此次 TiDB 的改造,只是丰巢对于分布式数据技术探索的一小步,未来丰巢会将更多的分布式技术,引入到更多的业务系统,打造更加极致的产品和服务。

TiDB at 丰巢:尝鲜分布式数据库相关推荐

  1. 【精选实践】TiDB 在丰巢核心支付平台百亿级数据的深度实践

    原文来源: https://tidb.net/blog/945bb4fc 作者:刘光亮,丰巢中间件负责人,TiDB User Group Ambassador 丰巢第一次在生产环境实际使用 TiDB, ...

  2. TiDB:支持 MySQL 协议的分布式数据库解决方案

    [编者按]TiDB 是国内 PingCAP 团队开发的一个分布式 SQL 数据库.其灵感来自于 Google 的 F1,TiDB 支持包括传统 RDBMS 和 NoSQL 的特性.在国内 ITOM 管 ...

  3. TiDB:支持MySQL协议的分布式数据库解决方案

    [编者按]TiDB 是国内 PingCAP 团队开发的一个分布式 SQL 数据库.其灵感来自于 Google 的 F1,TiDB 支持包括传统 RDBMS 和 NoSQL 的特性.在国内ITOM 管理 ...

  4. 【TiDB@丰巢】支付平台的迁移之旅

    来源:丰巢技术团队 丰巢第一次在生产环境实际使用TiDB,是在2018年,其场景是每天产生一亿条以上数据的推送平台,当时我们还发了一篇文章,被PingCAP官方收录:TiDB at 丰巢:尝鲜分布式数 ...

  5. 数据库领域正在发生巨变,从 TiDB 5.0 发布会看未来的数据库发展趋势

    前不久,PingCAP 刚刚度过六岁生日.对于数据库这样一个古老的行业,六年只是刚刚起步.TiDB 5.0 的发布就像一个庆祝成长的生日礼物,为 TiDB 带来了一个具有里程碑意义的版本.通过引入 M ...

  6. 十年磨一剑,云原生分布式数据库PolarDB-X的核心技术演化

    PolarDB-X前身是淘宝内部使用的分库分表中间件TDDL(2007年,Java库的形态),早期以DRDS(2012年开始研发,2014年上线,分库分表中间件+MySQL Proxy的形态)的品牌在 ...

  7. 主流关系型分布式数据库选型与设计实战

    一.数据库从集中式到分布式的演进 1.1.传统单机数据库 从狭义概念来讲,"数据库"就是OLTP场景的关系型单机数据库,诸如老牌的Oracle.DB2等商业数据库以及开源产品MyS ...

  8. 分布式数据库进入实时时代,TiDB 5.0 带来了什么?

    导语:2021 年 4 月 25 日--企业级开源分布式数据库厂商 PingCAP 正式发布面向企业级核心场景的 TiDB 5.0 版本.TiDB 5.0 在性能.稳定性.易用性等方面均取得了巨大进步 ...

  9. 分布式数据库——TiDB的介绍和基本原理

    1.TiDB 介绍 1.1 TiDB 介绍 1.1.1 TiDB 是什么? TiDB 是一个分布式 NewSQL 数据库.它支持水平弹性扩展.ACID 事务.标准 SQL.MySQL 语法和 MySQ ...

最新文章

  1. 推荐10个Github热门Python库,非常实用!
  2. c 数据压缩算法_CCSDS图像压缩算法之我见(一)
  3. oracle-11g-R2监听文件配置
  4. cad方格网高程lisp编程_分享:方格网法土方工程量计算实例例题(疏浚清淤工程)...
  5. py2exe使用方法 (含一些调试技巧,如压缩email 类)
  6. JavaScript 真值和假值
  7. Struts,Hibernate,Spring经典面试题收藏(转)
  8. Abaqus帮助文档翻译——启动和退出Abaqus/CAE
  9. Catfishcms v4.8.54环境搭建
  10. 树莓派还能这么玩之做一个语音音箱
  11. 如何快速打开控制面板?如何让控制面板在桌面显示?
  12. excel计算机课程表,Excel如何制作课程表
  13. html5自动加载文件路径,网站加载性能
  14. 这个世界,总是被设计得刚刚好?人类或许只是被设定的一个程序
  15. H5项目常见问题汇总及解决方案 1
  16. 关于win10 小爱同学UWP版本的安装
  17. 利用Calendar简洁制作万年历
  18. Docker(六)Docker Hub+Docker Registry
  19. Hadoop权威指南笔记1——第1章:初始Hadoop
  20. 易语言实现网页自动刷新

热门文章

  1. 南安第五小学计算机老师,赞!南安市第五小学预计年底完工!
  2. linux常用命令语句(全)
  3. 2021年第一季度Sumap网络空间测绘CVE漏洞趋势安全分析报告
  4. 失恋后同学对我的劝告。。。。表谢意
  5. 【UOJ 454】打雪仗(通信题)(分块)
  6. 国产芯片---超高速、高输出电流,电压反馈放大器MS8241兼容替代LM7171
  7. 《深度学习》/《Deep Learning》——深度学习圣经的读书笔记
  8. 玩烂vue之vue练手项目
  9. a.c:5:5: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wun
  10. 2022江苏最新八大员之(安全员)模拟考试试题及答案