**导读**
> 作者:杨漆
> 16年关系型数据库管理,从oracle 9i 、10g、11g、12c到Mysql5.5、5.6、5.7、8.0 到TiDB获得3个OCP、2个OCM;运维路上不平坦,跌过不少坑、熬过许多夜。把工作笔记整理出来分享给大伙儿,希望帮到大家少走弯路、少熬夜。
TiDB4.0做为第四代数据库具备哪些新特性,适用于哪些业务场景?
TiDB是开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理(Hybrid Transactional and Analytical Processing, HTAP)的融合型分布式数据库产品,具备水平扩容、缩容、金融级高可用、实时HTAP、云原生的分布式数据库、兼容MySQL5.7协议和MySQL生态等重要特性。目标是为用户提供一站式OLTP(OnlineTransactionalProcessing)、OLAP(OnlineAnalyticalProcessing)、HTAP解决方案。
TiDB适合高可用、强一致要求较高、数据规模较大等各种应用场景。
1.五大核心特性
• 一键水平扩容或者缩容,得益于TiDB存储计算分离的架构设计,可按需对计算、存储分别进行在线扩容、缩容,调整过程中对应用运维人员透明。
• 金融级高可用数据采用多副本存储,数据副本通过Multi-Raft协议同步事务日志,多数派写入成功事务才能提交,确保数据强一致性且少数副本发生故障时不影响数据的可用性。可按需配置副本地理位置、副本数量等策略满足不同容灾级别的要求。
• 实时HTAP 提供行存储引擎TiKV、列存储引擎TiFlash两款存储引擎,TiFlash通过Multi-Raft Learner协议实时从TiKV复 制数据,确保行存储引擎TiKV和列存储引擎TiFlash之间的数据强一致。TiKV、TiFlash可按需部署在不同的机器,解决HTAP资源隔离的问题。
• 云原生的分布式数据库专为云而设计的分布式数据库,通过TiDBOperator可在公有云、私有云、混合云中实现部署工具化、自动化。
• 兼容MySQL5.7协议和MySQL生态兼容MySQL5.7协议、MySQL常用的功能、MySQL生态,应用无需或者修改少量代码即可从MySQL迁移到 TiDB。提供丰富的数据迁移工具帮助应用便捷完成数据迁移。
2. 四大核心应用场景
• 对数据一致性及高可靠、系统高可用、可扩展性、容灾要求较高的金融行业属性的场景。众所周知,金融行业对数据一致性及高可靠、系统高可用、可扩展性、容灾要求较高。传统的解决方案是同城两个机房提供服务、异地一个机房提供数据容灾能力但不提供服务,此解决方案存在以下缺点:资源利用率低、维护成本高、RTO(RecoveryTimeObjective)及RPO(RecoveryPointObjective)无法真实达到企业所期望的值。TiDB采用多副本 Multi-Raft协议的方式将数据调度到不同的机房、机架、机器,当部分机 器出现故障时系统可自动进行切换,确保系统的RTO<=30s及RPO=0。
• 对存储容量、可扩展性、并发要求较高的海量数据及高并发的OLTP场景。
随着业务的高速发展,数据呈现爆炸性的增长,传统的单机数据库无法满足因数据爆炸性的增长对数据库的容量要求,可行方案是采用分库分表的中间件产品或者NewSQL数据库替代、采用高端的存储设备等,其中性价比最大的是NewSQL数据库,例如:TiDB。
TiDB采用计算、存储分离的架构,可对计算、 存储分别进行扩容和缩容,计算最大支持512节点,每个节点最大支持1000并发,集群容量最大支持 PB级别。
• Real-time HTAP场景。随着5G、物联网、人工智能的高速发展,企业所生产的数据会越来越多,其规模可能达到数百TB甚至PB级别,传统的解决方案是通过OLTP型数据库处理在线联机交易业务,通过ETL工具将数据同步到 OLAP型数据库进行数据分析,这种处理方案存在存储成本高、实时性差等多方面的问题。TiDB在4.0版 本中引入列存储引擎TiFlash结合行存储引擎TiKV构建真正的HTAP数据库,在增加少量存储成本的情况 下,可以同一个系统中做联机交易处理、实时数据分析,极大地节省企业的成本。
• 数据汇聚、二次加工处理的场景。 当前绝大部分企业的业务数据都分散在不同的系统中,没有一个统一的汇总,随着业务的发展,企业的决策层需要了解整个公司的业务状况以便及时做出决策,故需要将分散在各个系统的数据汇聚在同一个系统并进行二次加工处理生成T 0或T 1的报表。传统常见的解决方案是采用ETL Hadoop来完成, 但Hadoop体系太复杂,运维、存储成本太高无法满足用户的需求。与Hadoop相比,TiDB就简单得多, 业务通过ETL工具或者TiDB的同步工具将数据同步到TiDB,在TiDB中可通过SQL直接生成报表。
TiDB v4.0在稳定性、易用性、性能、安全和功能方面进行了大量的改进
3. 调度功能
• 热点调度支持更多维度。热点调度在决策时,除了根据写入/读取流量作为调度依据外,新引入key的维度。可以很大程度改善原有单一维度决策造成的CPU资源利用率不均衡的问题。
4. 存储引擎
• TiFlash 是 TiDB 为完善 Realtime HTAP 形态引入的关键组件,TiFlash 通过 Multi-Raft Learner 协议实时从 TiKV 复制数据,确保行存储引擎 TiKV 和列存储引擎 TiFlash 之间的数据强一致。TiKV、TiFlash 可按需部署在不同的机器,解决 HTAP 资源隔离的问题。
4.0 版本中 TiKV 提供新的存储格式,提升宽表场景下编解码数据的效率。
5. TiDB Dashboard
• DBA 通过 TiDB Dashboard UI 可以快速了解集群的拓扑、配置信息、日志信息、硬件信息、操作系统信息、慢查询信息、SQL 访问信息、诊断报告信息等,帮助 DBA 通过 SQL 快速了解、分析系统的各项指标,具体信息如下:
– Cluster Info,提供集群中所有组件,包括:TiDB、TiKV、PD、TiFlash运行状态及其所在主机的运行状态。
– Key Visualizer,系统可视化输出 TiDB 集群一段时间内的流量情况,用于 DBA 分析 TiDB 集群的使用模式和排查流量热点。
– SQL Statements,记录当系统执行的所有 SQL 以及 SQL 相关的统计信息,包括:执行次数、执行时间汇总等,帮助用户快速分析系统的 SQL 执行状况,判断系统中有哪些热点 SQL 语句等。
– Slow Queries,汇总集群中所有的慢查询语句,帮助用户快速定位慢查询语句。
– Diagnostic Report,系统会周期性的自动对集群可能存在的问题进行诊断,并将诊断结果和一些集群相关的负载监控信息汇总成一个诊断报告。诊断报告是网页形式,通过浏览器保存后可离线浏览和传阅。
– Log Search & Download,可视化搜索、查询集群的日志信息,帮忙 DBA 分析系统的问题,提升 DBA 运维的效率。
6. 部署运维工具
TiUP是 4.0版本中新推出的包管理器的工具,主要用于管理 TiDB生态内的所有的包,提供组件管理、Playground、Cluster、TUF、离线部署等功能,将安装、部署、运维 TiDB 工具化,提升 DBA 部署、运维 TiDB 的效率。
具体的功能如下:
• 组件管理功能,提供一键式组件信息查询、安装、升级、卸载等功能,方便 DBA 管理 TiDB 的所有组件。
• 集群管理功能 (Cluster):提供一键式 TiDB 集群的部署、运维 TiDB 功能,包括:安装、部署、扩容、缩容、升级、配置变更、启动、停止、重启,查询集群状信息等,支持管理多个 TiDB 集群。
• 本地部署功能 (Playground): 提供快速在本地部署一个 TiDB集群,快速体验、了解 TiDB的基本功能,注意:此功能仅用于快速了解 TiDB,不适合上生产。
• 私有镜像管理 (Mirror): 当无法通过公网访问 TiUP 官方镜像时,TiUP 提供构建私有镜像的方案,帮助用户构建私有镜像及提供离线部署部署的功能。
• 性能测试功能 (Benchmark): 提供一键部署性能测试工具的功能,主要提供 TPC-C、TPC-H 两种性能测试的workload 。
7. 事务
• 悲观事务正式 GA 并作为默认事务模式提供,支持 Read Committed 隔离级别以及 SELECT FOR UPDATE,→ NOWAIT 语法。详情参阅:悲观事务模型。
• 支持大事务,最大事务限制由 100 MB 提升到了 10 GB,同时支持乐观事务和悲观事务。
8. SQL 功能
• 在 SQL Plan Management 中引入了 SQL Bind 的自动捕获和演进,提升易用性和执行计划稳定性。
• 新增 15 种 SQL Hint 用于控制优化器生成执行计划,和执行引擎执行查询时的行为。详情参阅:SQL Hint。
• 支持 SELECT INTO outfile 语句,该语句用来将表数据导出到指定的文本文件中,配合上 LOAD DATA,可以方便的在数据库之间导入/导出数据。
• 支持自定义序列对象 Sequence,提供 CACHE/NO_CACHE、CYCLE/NO_CYCLE 选项定义序列的不同特性,满足序列生成的各种需求,用户可以通过 Sequence 替代第三方 ID 生成服务。详情参阅:Sequence。
• 新增 Flashback 命令,支持恢复被 Truncate 的表。详情参阅:Flashback。
• 新增查询数据时将 Join、Sort 中间结果写入本地磁盘,防止查询语句占用内存过多导致系统 OOM 的问题,提升系统的稳定性。
• 优化 EXPLAIN 和 EXPLAIN ANALYZE 的输出结果,显示更多的信息,提升排查问题的效率。
• 支持 Index Merge功能,Index Merge是一种新的表访问方式,当查询只涉及到单张表时,优化器会自动根据查询条件读取多个索引数据并对结果求并集,提升查询单张表时的性能。详情参阅:Index Merge。
• 支持 AutoRandom Key作为 TiDB在列属性上的扩展语法,AutoRandom被设计用于解决自增主键列的写热点问题,为使用自增主键列的用户提供最低成本的 MySQL 迁移方案。
• 新增集群拓扑、配置信息、日志信息、硬件信息、操作系统信息、慢查询信息等系统表等,帮助 DBA 通过 SQL 快速了解、分析系统的各项指标,详情参阅:information_schema,具体信息如下:
– 新增集群拓扑、配置、日志、硬件、操作系统等信息表,帮助 DBA 快速了集群配置、状态信息:
* cluster_info 表,用于保存集群的拓扑信息。
* cluster_log 表,用于保存系统的日志信息。
* cluster_hardware,cluster_systeminfo,用于保存系统中服务器的硬件系统,操作系统信息
等。
– 新增慢查询、诊断结果、性能监控等系统表,帮助 DBA 快速分析系统的性能瓶颈:
* cluster_slow_query 表,用于记录保存全局的慢查询信息。
* cluster_processlist 表,用于记录保存全局的 processlist。
* inspection_result表,4.0版本新增自动性能诊断的功能,帮助 DBA自动分析系统的性能瓶颈并自动输出相关的性能分析报告,方便 DBA 定位常见的问题和异常项,提升 DBA 运维的效率。
* metrics_summary 和 metric_summary_by_label 表,用于记录保存系统中的所有监控指标信息,DBA 可以通过 SQL 访问所有的监控指标并可以与历史的监控指标进行对比,方便 DBA 定位、分析异常现象。
* inspection_summary 表,用于记录保存不同的数据链路或者访问链路上各种关键的监控指标,
方便 DBA 定位、分析常见数据链路或者访问链路中的异常现象,例如:读数据、写数据链路。
9. 字符集及排序规则
在 TiDB 4.0 的新集群中,支持大小写和口音不敏感的排序规则 utf8mb4_general_ci 及 utf8_general_ci
10. 安全
• 完善客户端与服务端,组件与组件之间的加密通信,确保连接安全性,保护接收与发送的任何数据不会被网络犯罪分子读取和修改。主要支持基于证书的登录认证、在线更新证书、校验 TLS 证书的CommonName 属性等功能。
• 透明数据加密 (Transparent Data Encryption),简称 TDE,是 TiDB 推出的一个新特性,用来对整个数据库提供保护。数据库开启 TDE 加密功能后,对于连接到数据库的应用程序来说是完全透明的,它不需要对现有应用程序做任何改变。因为 TDE 的加密特性是基本于文件级别的,系统会在将数据写到磁盘之前加密,在读取到内存之前解密,确保数据的安全性。目前主要支持 AES128-CTR、AES192-CTR、AES256-CTR 三种加密算法,支持通过 AWS KMS 管理密钥等功能。详情参阅静态加密。
11. 备份与恢复
快速备份恢复功能,用来快速的备份与恢复单个 TiDB 集群的数据,确保数据的可靠性,符合企业备份与恢复或者等保的要求。主要支持快速的全量备份与恢复、支持按照数据排序后区间范围备份与恢复数据。
12. 服务级别功能
• 支持缓存 Prepare/Execute 请求的执行计划,提升 SQL 的执行效率。详情参阅:缓存执行计划。
• 支持自适应线程池功能,精简线程池数量,优化请求处理调度方式,提升产品易用性,提升产品的性能。
• Follower Read 功能是指在强一致性读的前提下使用 Region 的 follower 副本来承载数据读取的任务,从而提升 TiDB 集群的吞吐能力并降低 leader 负载。Follower Read 包含一系列将 TiKV 读取负载从 Region 的 leader 副本上 offload 到 follower 副本的负载均衡机制。TiKV 的 Follower Read 可以保证数据读取的一致性,可以为用户提供强一致的数据读取能力。详情参阅:Follower Read。
13. TiCDC数据ETL工具
TiCDC支持通过拉取 TiKV变更日志实现 TiDB集群之间数据同步,支持数据的高可靠、服务的高可用能力,确保数据不会丢失。用户可以通过订阅的方式订阅数据的变更信息,系统会自动将数据推送到下游系统,当前仅支持 MySQL 协议的数据库(例如:MySQL、TiDB),Kafka 及 Pulsar 作为 TiCDC 的下游,同时用户也可以通过 TiCDC提供的开放数据协议自行扩展支持的下游系统。