快速体验 TiDB 的几种方式:
1. 使用 TiUP,几分钟搭建本地测试集群,并自动安装 TiDB Dashboard 和 Grafana,支持 MacOS
2. 自助开通 TiDB Cloud,可以免费试用一年 https://tidbcloud.com/
3. 在线体验 TiDB 的 SQL 执行: https://tour.pingcap.com/
对于一个基础软件产品来说,一个重要的长期竞争力和产品价值来自于可观测性和 Troubleshooting 能力。这个世界没有完美的软件,而且对于有经验的开发者来说,快速的发现和定位问题的能力是必备的,对于基础软件的商业化来说,服务支持效率和 Self-serving 也是规模化的基础,这一点在云的环境下也同样重要。
概述
Why TiDB
- TiDB 在墨天轮的 国产关系型数据库流行度 中常年排名第一。
- 在三方评测、专利和论文均不占优的情况下,TiDB 的整体得分仍能排名第一,说明在其它的得分项上非常突出。墨天轮对 TiDB 的整体评价是:“TiDB 为其他国产开源数据库发挥了示范性作用,一直在技术领域精耕细作,不断在市场中打磨产品,树立了良好的品牌形象。”
- 但在 DB-Engines 的 全球关系型数据库流行排行榜 中,TiDB 只排到第 48 位,相比 Oracle、MySQL、SQL Server 等老牌数据库来说,还有不少的差距。
TiDB 架构
- 核心能力: 分布式 Sharding Nothing、存储计算分离、HTAP、MySQL 兼容
- 核心组件:
-
- PD: 负责元数据管理、任务调度、负载均衡
-
- TiDB/TiSpark: SQL 层
-
- TiKV/TiFlash: 存储 + 事务层,分别对应行存和列存,以实现 HTAP 混合负载。但需要将 TiKV 和 TiFlash 部署到不同节点才能实现负载隔离。
- TiDB 不支持多租户,一般是把整个集群作为单个租户使用。
- 数据库代理: 需要集成 ProxySQL 等第三方中间件实现。
- 数据库驱动&工具: 使用 MySQL 社区已有的驱动和中间件。
TiDB 工具体系
TiDB 产品形态
- 企业版和社区版的内核相同,但企业版会包含更多的周边生态工具和产品技术服务。TiDB Cloud 则提供 DBaaS 服务,按需付费,开发者版本支持免费试用一年。
TiDB 客户案例
- 国内客户以金融、互联网、游戏和视频行业为主。
- 海外客户分布在美国、新加坡、日本 20+ 国家和地区。
TiDB Dashboard
介绍
- TiDB Dashboard 是 TiDB 自 4.0 版本起提供的图形化界面,可用于监控及诊断 TiDB 集群。TiDB Dashboard 内置于 TiDB 的 PD 组件中,无需独立部署 (触达门槛低)。
安装部署
- TiDB Dashboard 界面内置于 TiDB 4.0 或更高版本的 PD 组件中,无需额外部署。只需部署标准 TiDB 集群,TiDB Dashboard、Prometheus 和 Grafana 就会原生集成。在 MacOS 下安装部署可参考 https://docs.pingcap.com/zh/tidb/stable/quick-start-with-tidb#%E9%83%A8%E7%BD%B2%E6%9C%AC%E5%9C%B0%E6%B5%8B%E8%AF%95%E9%9B%86%E7%BE%A4。
- TiDB Dashboard (版本 v6.2) 访问地址 http://127.0.0.1:2379/dashboard,默认用户名为 root,密码为空。
- Prometheus 管理界面: http://127.0.0.1:9090
- Grafana 监控界面: http://127.0.0.1:3000,默认用户名和密码都为 admin。
技术架构
- TiDB Dashboard 已在 GitHub 上 开源,前端使用 React (Monorepo 架构),后端使用 Go,前后端一体化架构。
- UI 库: antd、office-ui-fabric-react、部分 rc-* 类组件
- 图标库: @ant-design/icons
- 图表库: @elastic/charts
- 关系图库: d3、d3-flextree、d3-graphviz
- 日期时间库: dayjs
- 请求库: axios
- hooks 库: ahooks
- 工具库: lodash
- 布局库: @g07cha/flexbox-react
- 国际化: i18next
- 前端代码规模: 6.1w
- 后端代码规模: 2w
产品能力
运维
- 无运维功能,需要通过 TiUP 进行黑屏运维,TiDB Dashboard 仅支持展示实例、主机、磁盘、存储拓扑等基本信息。
监控
- 内置监控: TiDB Dashboard 从 v6.2 版本开始,内置了一个包含常用指标的监控页面,不跳转 Dashboard 也能满足大部分日常的监控需求,包含折线图、柱状图、堆叠图、面积图等多种类型图表,分析维度较为多样。图表库用的是 @elastic/charts,整体观感比 G2Plot 好不少,但似乎不支持框选。
- Grafana 监控: 会和 TiDB Dashboard 一起安装,默认提供了 23 个监控面板,涉及的指标和对象维度非常全面,加上 Grafana 本身强大的自定义能力,也非常容易扩展。因此 TiDB 的监控能力和体验较为优秀,缺点是搭配 TiDB Dashboard 使用体感较为割裂,无法与其他模块做关联分析,产品形态容易受限。
告警
- 依赖 Grafana 的告警能力,同样也内置了一批告警规则,可以做到开箱即用,满足日常的告警需求。
- 通过对接 ElasticSearch 等数据源,也支持配置日志告警,来实现扩展。
- 支持钉钉、Slack、LINE 等国内外常用的告警通道,配置起来也比较简单。
诊断
TopSQL
- 只支持查看一段时间内累计 CPU 耗时 Top5 的 SQL,产品能力比较简单。其提供的图形化分析方式虽然比较炫酷,但数据维度单一,感觉实际意义不是很大。
SQL 语句分析
- 支持基本的 SQL 查询和分析能力,而且执行的 SQL 可以即时刷新,应该是从 TiDB 直接读取的记录,没有单独的采集和存储层。
- SQL 详情页包含基础信息、执行计划、数据库时间、事务、慢查询等。
- 执行计划支持可视化关系图 (基于 d3 实现) 和文本两种展示形式。
- 数据库阶段耗时分析:
流量可视化
- 本质是一个热力图 (基于 d3 实现),颜色越亮表示该 Region/Bucket 流量越高,主要用于分析热点问题和数据库的负载均衡情况。
- TPC-C 测试的热力图。
集群诊断报告
- 类似 Oracle AWR 报告,汇总展示基本信息、诊断、负载、各个组件执行详情等多个维度数据。该报告只支持在线查看,不支持下载。
- 同时还提供查询报告数据时的 TiDB 内部调用关系图,关系图由后端通过 go-graphviz 生成。
日志
- 支持查看不同级别和不同实例 (PD、TiDB、TiKV、TiFlash) 的日志,查询逻辑简单易用,展示逻辑。
实例性能分析
- 分为手动分析和持续分析两种,默认为持续分析,会记录历史上的性能数据,因此会占据更多的磁盘空间。
- 支持查看各个实例节点上的性能数据,并提供火焰图 (speedscope) 和关系图 (go-graphviz ) 两种分析能力。
调试接口
- 和 OpenAPI 的作用类似,只不过全部是 Get 类型的接口,而且支持在线调试,对象参数无需手动填写、直接选择即可,体验比较好,算是一个面向 OpenAPI 场景的效率工具。
用户管理
- TiDB Dashboard 与 TiDB 使用相同的用户权限体系和登录验证方式,需要使用 SQL 来新建用户和赋权,无白屏管理功能。
CREATE USER 'dashboardAdmin'@'%' IDENTIFIED BY '<YOUR_PASSWORD>';
GRANT PROCESS, CONFIG ON *.* TO 'dashboardAdmin'@'%';
GRANT SHOW DATABASES ON *.* TO 'dashboardAdmin'@'%';
GRANT DASHBOARD_CLIENT ON *.* TO 'dashboardAdmin'@'%';
-- 如果要使自定义的 SQL 用户能修改 TiDB Dashboard 界面上的各项配置,可以增加以下权限
GRANT SYSTEM_VARIABLES_ADMIN ON *.* TO 'dashboardAdmin'@'%';
- TiDB 还支持基于角色的访问控制 (RBAC),类似于 MySQL 8.0 的 RBAC 系统。TiDB 兼容大部分 MySQL RBAC 系统的语法。
-- 创建角色 app_read
CREATE ROLE 'app_read';
-- 为 app_read 角色授予数据库 app_db 的读权限:
GRANT SELECT ON app_db.* TO 'app_read'@'%';
-- 授予用户角色
GRANT 'app_read' TO 'user1';
TiDB Cloud
介绍
- TiDB 的数据库云服务,主要面向海外和云市场。
免费试用
- 提供面向开发者和专业用户两种版本,其中开发者版本可免费体验一年,产品功能和资源会受到一定限制,比如无法使用备份恢复和 VPC 等高阶能力,可用的网络/存储/计算资源也会比较小。
- 云服务商和地域也会受到限制,目前开发者版本仅支持选择 AWS 作为服务商。
开发者版本 |
专业版本 |
- 这里新建测试集群 Cluster0,部署到 AWS 的新加坡地域。
- 设置集群的 root 密码和可访问数据库的 IP 白名单:
- 等待一分钟左右,集群即可创建成功。
产品能力
集群拓扑
数据库连接
- 支持多种数据库连接方式,并给出了配置示例,同时还提供在线的 Web SQL Shell,非常贴心。
- 使用 MySQL 客户端连接数据库:
- 使用 Sequel Pro 连接数据库:
数据导入
- 提供免费的数据导入服务,不过目前只支持从 AWS S3 和 Google Cloud Storage 导入。如果是其他数据源,就需要使用 TiDB 的迁移工具 进行线下导入了。
安全设置
- 设置集群的 root 密码和可访问数据库的 IP 白名单。
监控
- 集群页会展示 10 个常用指标的监控,监控能力较为单一。
告警
- 内置了 10 个左右的告警项且默认生效,用户只需配置告警的订阅邮箱,不支持自定义告警。
第三方监控&告警
- 如果内置的监控和告警能力不满足需求,也可以对接第三方产品如 Datadog 和 Prometheus。但 TiDB 只提供17 个监控指标作为数据源,用户需要自行开通 Datadog 服务或搭建 Prometheus & Grafana 环境才能接入。
备份恢复
- 仅专业版本支持,可从开发者版本升级后使用。
SQL 诊断
- 能力同 TiDB Dashboard 的 SQL 语句分析。
Key Visualizer
- 能力同 TiDB Dashboard 的 流量可视化。
云服务市场
- Google Cloud: https://console.cloud.google.com/marketplace/product/pingcap-public-335409/tidb-cloud?hl=zh-cn&project=trusty-stack-321106
调研总结
TiDB 优势
- 上手门槛:
-
- TiUP、TiDB Dashboard 等工具支持 MacOS 和一键安装部署,体验非常好,就算是新手小白也不会有挫败感。
-
- TiDB Cloud 自助开通的流程非常顺滑,低门槛、试用时间长,而且 SaaS 服务化能力做的好,开箱即用。
- 产品策略:
-
- 安装、部署和运维均借助命令行工具实现,对用户尽可能屏蔽底层概念。
-
- 诊断和分析类功能不少都是经典的可视化场景,用户接受度高,具备传播亮点,容易吸引用户。
-
- 核心能力自研,外围能力如监控告警直接集成第三方平台和工具,提供强大能力和优秀体验的同时,也能减少自身的研发投入。
-
- 国内和海外是单独两套产品策略、两套设计风格,更具针对性。
TiDB 劣势
- 工具产品较为分散,缺少 all-in-one 的平台级产品和一些企业级特性 (比如审计),而且不少能力依赖第三方,产品形态和扩展性上会受到限制,难以适应线下各种差异化的场景,商业化输出也可能会有协议问题和法律风险。
- 因此 TiDB 在今年 4 月份发布了 TiUniManager (TiDB Enterprise Manager) 数据库运维管理平台,面向独立部署和大规模运维管控。不过目前还处于产品化早期,仅对外迭代了三个小版本,产品能力和易用性上还有不少问题。TiUniManager 的产品架构和功能如下: