本文主要介绍了TiDB在小米的应用实践和压测数据,以及在小米场景下遇到的问题和解决办法。
上篇文章回顾: 网络工程师眼中的自动化运维
TiDB应用实践
01
TiDB特点
TiDB 结合了传统的 RDBMS 和 NoSQL 的最佳特性,兼容 MySQL 协议,支持无限的水平扩展,具备强一致性和高可用性,具有如下的特性:
-
高度兼容 MySQL,大多数情况下无需修改代码即可从 MySQL 轻松迁移至 TiDB,即使已经分库分表的 MySQL 集群亦可通过 TiDB 提供的迁移 工具 进行实时迁移。
-
水平弹性扩展,通过简单地增加新节点即可实现 TiDB 的水平扩展,按需扩展吞吐或存储,轻松应对高并发、海量数据场景。
-
分布式事务,TiDB 100% 支持标准的 ACID 事务。
-
真正金融级高可用,相比于传统主从 (M-S) 复制方案,基于 Raft 的多数派选举协议可以提供金融级的 100% 数据强一致性保证,且在不丢失大多数副本的前提下,可以实现故障的自动恢复 (auto-failover),无需人工介入。
TiDB 的架构及原理官网有详细介绍(https://pingcap.com/),这里不再赘述。
TiDB基础架构图
02
背景
关系型存储数据库首选 MySQL,单机 2.6T 磁盘。由于手机销量的快速上升和 MIUI 负一屏用户量的快速增加,导致负一屏快递业务数据的数据量增长非常快,每天的读写量级均分别达到上亿级别,数据快速增长导致单机出现瓶颈,比如性能明显下降、可用存储空间不断降低、大表 DDL 无法执行等,不得不面临数据库扩展的问题。比如,我们有一个业务场景(智能终端),需要定时从几千万级的智能终端高频的向数据库写入各种监控及采集数据,MySQL 基于 Binlog 的单线程复制模式,很容易造成从库延迟,并且堆积越来越严重。
对于 MySQL 来讲,最直接的方案就是采用分库分表的水平扩展方式,综合来看并不是最优的方案,比如对于业务来讲,对业务代码的侵入性较大;对于 DBA 来讲提升管理成本,后续需要不断的拆分扩容,即使有中间件也有一定的局限性。同样是上面的智能终端业务场景,从业务需求看,需要从多个业务维度进行查询,并且业务维度可能随时进行扩展,分表的方案基本不能满足业务的需求。
了解到 TiDB 特点之后,DBA 与业务开发沟通确认当前 MySQL 的使用方式,并与 TiDB 的兼容性做了详细对比,经过业务压测之后,根据压测的结果,决定尝试将数据存储从 MySQL 迁移到 TiDB。经过几个月的线上考验,TiDB 的表现达到预期。
03
兼容性对比
TiDB 支持包括跨行事务、JOIN、子查询在内的绝大多数 MySQL 的语法,可以直接使用 MySQL 客户端连接;对于已用 MySQL 的业务来讲,基本可以无缝切换到 TiDB。
二者简单对比如下几方面:
-
功能支持
-
默认设置
-
事务
-
TiDB 支持绝大多数的 Online DDL
-
另,一些 MySQL 语法在 TiDB 中可以解析通过,不会产生任何作用,例如: create table 语句中 engine、partition 选项都是在解析后忽略。
-
详细信息请访问官网:https://pingcap.com/docs-cn/sql/mysql-compatibility/
(1)TiDB 尚不支持如下几项:
1)增加、删除主键
2)非 UTF8 字符集
3)视图(即将支持)、存储过程、触发器、部分内置函数
4)Event
5)全文索引、空间索引
(1)字符集、 排序 规则、sql_mode、lower_case_table_names 几项默认值不同
(1)TiDB 使用乐观事务模型,提交后注意检查返回值。
(2)TiDB 限制单个事务大小,保持事务尽可能的小。
压测
01
目的
通过压测 TiDB 了解一下其 OLTP 性能,看是否满足业务要求。
02
机器配置
03
压测内容及结果
1.标准Select压测
2. 标准OLTP压测
3.标准Insert压测
04
压测总结
通过压测发现 TiDB 稳定性上与预期稍有差别,不过压测的 Load 会明显高于生产中的业务 Load,参考低 Threads 时 TiDB 的表现,基本可以满足业务对 DB 的性能要求,决定灰度一部分 MySQL 从库读流量体验一下实际效果。
05
迁移过程
整个迁移分为 2 大块:数据迁移、流量迁移
06
数据迁移
数据迁移分为增量数据、存量数据两部分。
-
对于存量数据,可以使用逻辑备份、导入的方式,除了传统的逻辑导入外,官方还提供一款物理导入的工具 TiDB Lightning。
-
对于增量备份可以使用 TiDB 提供的 Syncer (新版已经更名为 DM - Data Migration)来保证数据同步。
(1)Syncer 简介
主要依靠各种 Rule 来实现不同的过滤、合并效果,一个同步源对应一个 Syncer 进程,同步 Sharding 数据时则要多个 Syncer 进程。
Syncer结构图
-
使用 Syncer 注意事项
(1)做好同步前检查,包含 server-id、log_bin、binlog_format 是否为 ROW、binlog_row_image 是否为 FULL、同步相关用户权限、Binlog 信息等。
(2)使用严格数据检查模式,数据不合法则会停止。数据迁移之前最好针对数据、表结构做检查。
(3)做好监控,TiDB 提供现成的监控方案。
(4)对于已经分片的表同步到同一个 TiDB 集群,要做好预先检查。确认同步场景是否可以用 route-rules 表达,检查分表的唯一键、主键在数据合并后是否冲突等。
07
流量迁移
流量切换到 TiDB 分为两部分:读、写流量迁移。每次切换保证灰度过程,观察周期为 1~2 周,做好回滚措施。
-
读流量切换到 TiDB,这个过程中回滚比较简单,灰度无问题,则全量切换。
-
将写入切换到 TiDB,需要考虑好数据回滚方案或者采用双写的方式(需要断掉 Syncer)。
集群状态
01
配置
集群配置采用官方推荐的 7 节点配置,3 个 TiDB 节点,3 个 PD 节点,4 个 TiKV 节点,其中每个 TiDB 与 PD 为一组,共用一台物理机。后续随着业务增长或者新业务接入,再按需添加 TiKV 节点。
02
监控
监控采用了 TiDB 的提供的监控方案,并且也接入了公司开源的 Falcon,目前整个集群运行比较稳定,监控如下图。
03
问题及解决方式
问题 | 原因及解决方式 |
在一个 DDL 里不能对多个列或者多个索引做操作。 | ADD/DROP INDEX/COLUMN 操作目前不支持同时创建或删除多个索引或列,需要拆分单独执行,官方表示 3.0 版本有计划改进。 |
部分操作符查询优化器支持不够好,比如 or 操作符会使用 TableScan,改写成 union all 可避免 | 官方表示目前使用 or 操作符确实在执行计划上有可能不准确,已经在改进计划中,后续 3.0 版本会有优化。 |
重启一个 PD 节点的时候,业务能捕捉到 PD 不可用的异常,会报 PD server timeout | 因为重启的是 Leader 节点,所以重启之前需要手动切换 Leader,然后进行重启。官方建议这里可以通过重启前做 Leader 迁移来减缓,另外后续 TiDB 也会对网络通讯相关参数进行梳理和优化 。 |
建表语句执行速度相比 MySQL 较慢 | 多台 TiDB 的时候,Owner 和接收 create table 语句的 TiDB Server 不在一台 Server 上时,可能比 MySQL 慢一些,每次操作耗时在 0.5s 左右,官方表示会在后续的版本中不断完善。 |
pd-ctl 命令行参数解析严格,多一个空格会提示语法错误 | 官方表示低版本中可能会有这个问题,在 2.0.8 及以上版本已经改进。 |
tikv-ctl 命令手动 compact region 失败 | 在低版本中通常是因为 tikv-ctl 与集群版本不一致导致的,需要更换版本一致的 tikv-ctl,官方表示在 2.1 中已经修复。 |
大表建索引时对业务有影响 | 官方建议在业务低峰期操作,在 2.1 版本中已经增加了操作优先级以及并发读的控制,情况有改善 。 |
存储空间放大问题 | 该问题属于 RocksDB,RocksDB 的空间放大系数最理想的值为 1.111,官方建议在某些场景下通过 TiKV 开启 RocksDB 的 dynamic-level-bytes 以减少空间放大。 |
后续
目前 TiDB 主要提供 OLTP 服务,负一屏快递业务为使用 TiDB 做了一个良好的开端,而后商业广告也有接入,2 个业务均已上线数月,TiDB 的稳定性经受住了考验,带来了很棒的体验,对于后续大体的规划如下
-
MIUI 生态业务中存在大量的类似场景的业务,后续将会与业务开发积极沟通,从 MySQL 迁移到 TiDB。
-
针对某些业务场景,以资源合理利用为目标,推出归档集群,利用 Syncer 实现数据归档的功能。
-
数据分析,结合 TiDB 提供的工具,将支持离线、实时数据分析支持。
-
将 TiDB 的监控融合到Open Falcon 中。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
群智能优化算法及其应用
雷秀娟 / 2012-8 / 85.00元
《群智能优化算法及其应用》编著者雷秀娟。 《群智能优化算法及其应用》内容提要:本书以群智能优化算法中的粒子群优化(]Particle Swarm Optimization,PSO)算法为主线,着重阐述了PSO算法的基本原理、改进策略,从解空间设计、粒子编码以及求解流程等方面进行了详细设计与阐述,对蚁群优化(Ant Colony Optimization,AC0)算法、人工鱼群(Art......一起来看看 《群智能优化算法及其应用》 这本书的介绍吧!