TiDB at 丰巢:尝鲜分布式数据库 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
PingCAP
V2EX    数据库

TiDB at 丰巢:尝鲜分布式数据库

  •  2
     
  •   PingCAP 2018-11-12 10:49:27 +08:00 3110 次点击
    这是一个创建于 2603 天前的主题,其中的信息可能已经有所发展或是发生改变。

    作者:丰巢技术团队

    随着丰巢业务系统快速增长,其核心系统的数据量,早就跨越了亿级别,而且每年增量仍然在飞速发展。整个核心系统随着数据量的压力增长,不但系统架构复杂度急剧增长,数据架构更加复杂,传统的单节点数据库,已经日渐不能满足丰巢的需求,当单表数量上亿的时候,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 的改造,只是丰巢对于分布式数据技术探索的一小步,未来丰巢会将更多的分布式技术,引入到更多的业务系统,打造更加极致的产品和服务。

    第 1 条附言    2018-11-13 10:30:48 +08:00

    丰巢.png

    14 条回复    2018-11-13 08:25:54 +08:00
    liwl
        1
    liwl  
       2018-11-12 10:57:24 +08:00
    好像 pmm-server
    z742364692
        2
    z742364692  
       2018-11-12 11:03:54 +08:00
    感觉好厉害的样子
    Marmot
        3
    Marmot  
       2018-11-12 11:12:45 +08:00
    还是挺支持 TiDB 的
    zjsxwc
        4
    zjsxwc  
       2018-11-12 11:30:05 +08:00
    前几天还看到有人说坑还蛮多的。。
    tuntunxiong
        5
    tuntunxiong  
       2018-11-12 13:46:36 +08:00
    建表太慢了
    cuzfinal
        6
    cuzfinal  
       2018-11-12 17:02:06 +08:00
    看上去很吊的样子。
    EXChen
        7
    EXChen  
       2018-11-12 17:26:39 +08:00
    之前还有调研,一直没有时间去实践。
    mnhkahn
        8
    mnhkahn  
       2018-11-12 17:45:58 +08:00
    百度不是有自研的数据库吗,这个比较过吗?
    EmdeBoas
        9
    EmdeBoas  
       2018-11-12 19:18:35 +08:00   1
    @zjsxwc 没错坑很多,泪目
    feverzsj
        10
    feverzsj  
       2018-11-12 19:36:47 +08:00
    这类数据库的插入更新速度都很慢,再者就算十亿级别的单表对 mysql 而言都应该不是问题
    Jaylee
        11
    Jaylee  
       2018-11-12 19:45:54 +08:00
    几千万的表都还用 join?
    Event
        12
    Event  
       2018-11-12 19:49:46 +08:00
    丰巢?第一反应是快递柜
    2owe
        13
    2owe  
       2018-11-12 19:56:14 +08:00
    勘误,第一张表第四列 msyql -> mysql

    https://mp.weixin.qq.com/s/xFv90_VB7B9m2o6jvQ13Iw 也是一样的
    coolmenu
        14
    coolmenu  
       2018-11-13 08:25:54 +08:00 via Android
    数据量上亿,oracle 勉强抗住?真是太牵强了吧?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2544 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 05:36 PVG 13:36 LAX 21:36 JFK 00:36
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86