Vitess 21 现已发布,该版本主要专注于增强查询兼容性、改善集群管理和扩展 VReplication 功能,同时实验性支持原子分布式事务和递归 CTE。主要功能包括参考表物化、多指标限流支持和增强的在线 DDL 功能。备份和恢复过程得益于新的 mysqlshell 引擎,而 vexplain 现在提供详细的执行跟踪和架构分析。
Vitess Kubernetes Operator 2.14.0 版本则引入了 VTGate pod 的水平自动扩展和对 Kubernetes 1.31 的支持,提高了整体可扩展性和部署灵活性。
Vitess 21 的新特性
- 查询兼容性:实验性支持原子分布式事务和递归 CTE。
- VReplication:参考表物化、动态工作流配置。
- 集群管理与 VTOrc:VTOrc 中增加更多指标以跟踪异常 GTID。
- 限流器:支持多指标。
- 在线 DDL:各种改进。
- 备份与恢复:实验性 mysqlshell 引擎。
- Vitess Operator:VTGate 扩展、镜像自定义、Kubernetes 1.31 支持。
- VTAdmin:VReplication 工作流创建与管理、分布式事务管理。
- VExplain:vexplain trace 提供详细查询执行洞察,vexplain keys 用于分析分片键的使用和优化查询性能。
查询兼容性
原子分布式事务
重新引入了原子分布式事务,采用了更强大的设计。此功能与核心 Vitess 组件和工作流(如在线 DDL 和 VReplication)有更深的集成,同时简化了原子分布式事务的配置。目前此功能处于实验状态。
递归公用表表达式 (CTEs)
Vitess 21 引入了实验性支持递归 CTE,使更复杂的层次查询和图形遍历成为可能。这一功能增强了查询灵活性,特别是在管理类似组织结构或树状数据的 parent-child 关系时。目前此功能仍处于实验阶段。
集群管理与 VTOrc
在 VTOrc 中新增了一个指标,用于显示所有 tablets 中异常 GTID 的数量,提供更好的可视性和警报。这将帮助运维人员跟踪和管理集群中的异常 GTID。
VReplication
参考表物化
Vitess 提供参考表作为机制,将常用的查找表从未分片的 keyspace 复制到所有分片的 keyspace。这些表通常用于存储国家、州、邮政编码等列表,常与其他表进行连接。使用参考表可以让 Vitess 在每个分片上并行执行连接,从而避免跨分片连接。之前建议创建物化工作流来处理参考表,但并未提供简便的方法。在 v21 中,为 Materialize 命令添加了显式支持,以将一组参考表复制到分片的 keyspace。
动态工作流配置
之前,VReplication 工作流的许多配置选项由 VTTablet 标志控制。这意味着任何更改都需要重启所有 VTTablet。现在,允许在创建工作流时覆盖这些选项,或在工作流进行中动态更新。
限流器:多指标支持
限流器经过重新设计,现在支持多指标。限流器不仅处理复制延迟或自定义查询,还可以同时处理多个指标,并根据不同客户或工作流检查不同指标。这让用户能够更好地控制限流器,依据具体生产需求微调其行为。
在 v21 中引入了几个新指标,并计划在后续版本中扩展可用指标列表。
v21 中的多指标限流器与 v20 限流器向后兼容。可以让 v20 主 tablet 从 v21 副 tablet 收集限流器数据,反之亦然。在 v22 中将取消这种向后兼容性,届时所有 tablet 限流器将预计支持多指标数据通信。
其他关键限流器更改:
- 上述操作中,UpdateThrottlerConfig 命令的 –check-as-check-self 和 –check-as-check-shard 子标志被弃用,并计划在未来版本中移除。
- SHOW VITESS_THROTTLER STATUS 和 SHOW VITESS_THROTTLED_APPS 查询,以及所有 /throttler/ API 访问点(/throttler/check 除外)被弃用,并计划在 v22 中移除。
- 启用时,限流器确保租赁心跳更新,即使心跳配置未设置。换句话说,限流器在需要心跳信息时会覆盖配置。
- 限流器检查响应现在包含可读的摘要,详细说明请求被拒绝的原因(如果被拒绝)。
在线 DDL
多个 bug 修复和改进,包括:
- 增加对 ALTER VITESS_MIGRATION CLEANUP ALL 命令的支持。
- 更多 INSTANT DDL 场景分析,超越文档中的限制。
- 在更改字符集的列的架构变更中,在线 DDL 现在以编程方式转换文本,而不是使用 CONVERT(… USING utf8mb4) 子句,从而提高此类列作为主键或迭代键时的性能。
- 内部的架构和差异分析现在更多委托给 schemadiff 库,提高了编程能力和可测试性。
- 修复自引用外键表的问题(仅在使用 PlanetScale MySQL 构建时相关)。
备份与恢复
引入实验性 mysqlshell 引擎。使用此引擎可以进行逻辑备份和恢复。mysqlshell 引擎可用于创建完整备份、增量备份和时间点恢复。它也可以与 Vitess Kubernetes Operator 一起使用。
mysqlshell 引擎的工作由 Slack 工程团队贡献。
VExplain 增强
VExplain Trace
新的 vexplain trace 命令提供了更深入的查询执行路径洞察,通过捕获详细的执行跟踪,帮助开发者和 DBA 分析性能瓶颈、审查查询计划,并了解 Vitess 如何在分布式节点上处理查询。跟踪输出以 JSON 对象形式提供,便于与外部分析工具集成。
VExplain Keys
新的 vexplain keys 功能帮助你分析查询与架构的交互,显示在过滤、分组和连接中使用的列。该工具特别适合识别索引、分片或优化的候选列,无论你使用 Vitess 还是独立的 MySQL 设置。通过提供清晰的列使用情况视图,vexplain keys 使你更容易微调数据库以提高性能,无论后端基础设施如何。
Vitess Kubernetes Operator
Vitess v21.0.0 与 vitess-operator v2.14.0 一同发布。在 v2.14 中,增加了使用 HPA 水平扩展 VTGate 部署的能力。将支持的 Kubernetes 版本升级到最新版本 (v1.31)。增加了一项功能,允许用户按 keyspace 选择 Docker 镜像,而不是为整个集群设置单个选项。
VTAdmin
新增了 VTAdmin 页面,用于创建、监控和管理 VReplication 工作流。还增加了一个仪表板,以查看和结束分布式事务。