支持缓存的Mysql中间件-Vitess


Vitess是Youtube的开源分布式MySQL工具集,已经用于Youtube生产环境。Vitess支持行级缓存,并与Memcached进行了集成,可以有效提高带主键查询的速率,查询只有在Memcached中查询不到时才会进入数据库查询,而当数据被修改或者数据库表结构发生变化时,缓存数据会被删除。使用Go语言开发并在BSD协议下授权。
Vitess is a set of servers and tools meant to facilitate scaling of MySQL databases for the web. It's been developed since 2011, and is currently used as a fundamental component of YouTube's MySQL infrastructure, serving thousands of QPS (per server).
Vitess 是一个用于部署、扩展和管理大型 MySQL 实例集群的数据库解决方案。它集 MySQL 数据库的很多重要特性和 NoSQL 数据库的可扩展性于一体。它的架构设计使得您可以像在物理机上一样在公共云或私有云架构中有效运行。它结合并扩展了许多重要的 MySQL 功能,同时兼具 NoSQL 数据库的可扩展性。Vitess 可以帮助解决以下问题:
1、支持对 MySQL 数据库进行分片来扩展 MySQL 数据库,应用程序无需做太多更改
2、从物理机迁移到私有云或公共云
3、部署和管理大量的 MySQL 实例

Vitess consists of a number servers, command line utilities, and a consistent metadata store.
vttablet is a server that sits in front of a MySQL database, making it more robust and available in the face of high traffic.
vtgate is a very light proxy that routes database traffic from your app to the right vttablet, basing on the sharding scheme, latency required, and health of the vttablets.
vtctl is a command line utility that allows a human or a script to easily interact with the system.
All components communicate using a lightweight RPC system based on BSON.
最新版本:12
Vitess 12 正式版已于2021年11月初发布,在此版本中,Vitess 在多个方面取得了重大进展,包括 Gen4 planner、VTAdmin 和其他改进。
Gen4 Planner:Gen4 是最新版本的查询计划程序 (query planner),在 Vitess 12 中属于实验性功能。如需使用 Gen4,VTGate 的-planner_version flag 需要被设置为gen4。
VTAdmin:在 Vitess 10.0 中引入的实验性多集群管理 API 和 Web UI 称为 VTAdmin,现在最新版本 Vitess 12 改进了基于 vreplication 的 Reshard 工作流。Vitess 12.0 引入了基于角色的访问控制 (RBAC) 的实验性实现,允许 Vitess 运维人员根据其 Vitess 环境的特定授权实现来允许或拒绝 API 端点。这为即将到来的 vtctld2 UI 弃用计划提供了基础。请注意,VTAdmin 不提供任何身份验证实现;用户可提供他们自己的,适用于他们部署的特定细节相关的认证。部署 vtadmin-api 和 vtadmin-web 组件是完全可选的。VTAdmin 依赖于新的 VtctldServer API,因此必须在 vtctlds 上运行新的 grpc-vtctld 服务才能使用它。
Benchmarking:根据官方的介绍,自上次发布以来,arewefastyet 发生了细微的变化。Web 服务器使用新的基准测试队列,该队列消耗更少的计算资源并避免两次运行相同的基准测试。为增强对新 Gen4 查询计划程序性能的信任,团队开发了一项功能,可以将宏基准测试生成的查询计划及其统计信息(执行时间、执行计数)可视化。在比较 V3 和 Gen4 的性能时提供了更多的优势。
使用更包容性的命名:此版本进行了重大的命名改变,例如删除 master,用 primary 或 source 代替,这些变化现在已向后兼容。在下一个版本中,废弃的命令将被删除,这意味着使用废弃命令的脚本应该被修改为使用新的命令。
最新版本:14
Vitess 14 正式于2022年7月上旬发布,更新内容如下:
可用性:命令行语法的弃用:这个版本标志着 Vitess 开始对其命令行和标志语法进行标准化。一些以前的语法已经被废弃,在下一个版本中会被删除。VtctldServer 和 Client:用于 vtctld 集群管理的新 gRPC API —— VtctldServer 已经可以使用了。目标是在 Vitess 15 开始废除旧的接口,所以用户现在就应该开始进行过渡了。Vitess 14 还提供了一个新的 vtctld 客户端( vtctldclient )来对应新的 gRPC 服务器接口。在启用新服务后,用户可以开始使用新的客户端来执行集群管理命令。 vtctldclient 和传统的 vtctlclient 都提供了 shim 机制来使用对方的 CLI 语法,以缓解过渡。
VTAdmin:Vitess 14 包括 VTAdmin 的测试版本,这是 Vitess 的下一代集群管理 API 和 UI。VTAdmin 提供了一个单一的控制平面来管理多个 Vitess 集群,并将取代传统的 VTCtld Web UI。请注意,新的 grpc-vtctld 服务是 VTAdmin 向你想管理的集群进行 RPC 的必要条件,所以你必须在启用该服务的情况下运行你的 vtctld 组件。
Online DDL:基于 Vitess-native 和 gh-ost 的 Online DDL 功能现在已是 GA。pt-osc 仍被认为是实验性的,主要是因为还没有被社区充分采纳或获得反馈。
Query Planner:Vitess 团队在两年前就开始了新的 Query Planner(查询计划程序)的工作,这个查询计划程序被称为 Gen4,在 Vitess 14 成为了新的默认程序。它取代了旧的称为 V3 的查询计划程序。新的计划程序增加了对更多查询的支持。
可靠性。
VTOrc:在 Vitess 14 中仍然是实验性的。在这个版本中,使 VTOrc 成为 Vitess 的一流组件的工作又向前推进了一步。VTOrc 现在与 VTCtld 完全继承,从 VTCtld 运行集群操作不会导致 VTOrc 采取不必要的操作;在这个版本中已经解决了联合问题,现在可以运行 VTOrc 的多个实例来观察同一组 keyspaces,而不会相互影响。持久性策略配置已被重构,现在它不再作为命令行配置提供,而是存储在拓扑服务器中。VTOrc 和 VTCtld 都将从那里读取它,并遵循所提供的耐久性策略。
性能:利用基准测试系统 arewefastyet 对这个新版本的 Vitess 进行基准测试后发现,v14.0.0 和 v13.0.0 之间大约有 10% 的性能提升。这一改进主要来自于取消了内部的 SAVEPOINT 查询执行。
更多详情可查看此处。
最新版本:17
Vitess 17 于2023年6月正式发布,在这个版本中,Vitess 引入了一些重要的改进措施,以提高系统的兼容性、性能和可用性。在 v15 版本中引入的 VTTablet 设置连接池功能,在这个版本中现在默认启用。该功能简化了系统设置的管理和配置,为用户提供了更加精简和便的体验。新的基于 Tablet Throttler 的 Topology Service 现在已 GA 并默认启用。
MySQL 兼容性改进:现在支持额外的语句,例如 Prepare 、 Execute 和 Deallocate 以及许多附加函数,包括比较运算符、数字函数、日期和时间函数、 JSON 函数等。查询计划器经历了一些改进,带来了更有效的查询计划,特别是复杂的操作,如聚合、分组和排序,从而提高查询性能。执行查询时使用的评估引擎也得到了显著的改进,带来了超过 2 倍的性能改进。新版本还添加了一个基于新虚拟机的引擎,它将最终取代基于 AST 的引擎,并提供更大的性能改进(在 v17 中默认没有启用)。在这个版本中,模式跟踪也得到了加强,使 Vitess 查询计划器能够快速检测到数据库模式的任何变化。这确保了查询能够保持最新的模式修改,提高了整体数据的一致性。
复制增强功能:现在支持在与 Vitess 分片相对应的每个复制集中更有效的 MySQL 复制。新版本已经为 noblob binlog_row_image 类型增加了支持。如果你使用 TEXT、BLOB 或 JSON 列,这可以大大减少你的二进制日志的整体大小,减少磁盘 I/O 和存储以及网络 I/O 和相关 CPU 的开销。另外还为 MySQL 8.0 中新增加的二进制日志事务压缩增加了支持。Zstandard 用于压缩每个 GTID 的内容,然后将压缩的事件存储到二进制日志中。这也大大减少了磁盘 I/O 和存储以及网络 I/O,不过代价是读写日志时会有一些额外的 CPU 开销。
其他包括:流量限制改进、VTorc 改进、VTAdmin 改进。更多详情可查看此处。
项目主页:https://github.com/youtube/vitess
Vitess is a set of servers and tools meant to facilitate scaling of MySQL databases for the web. It's been developed since 2011, and is currently used as a fundamental component of YouTube's MySQL infrastructure, serving thousands of QPS (per server).
Vitess 是一个用于部署、扩展和管理大型 MySQL 实例集群的数据库解决方案。它集 MySQL 数据库的很多重要特性和 NoSQL 数据库的可扩展性于一体。它的架构设计使得您可以像在物理机上一样在公共云或私有云架构中有效运行。它结合并扩展了许多重要的 MySQL 功能,同时兼具 NoSQL 数据库的可扩展性。Vitess 可以帮助解决以下问题:
1、支持对 MySQL 数据库进行分片来扩展 MySQL 数据库,应用程序无需做太多更改
2、从物理机迁移到私有云或公共云
3、部署和管理大量的 MySQL 实例

Vitess consists of a number servers, command line utilities, and a consistent metadata store.
vttablet is a server that sits in front of a MySQL database, making it more robust and available in the face of high traffic.
vtgate is a very light proxy that routes database traffic from your app to the right vttablet, basing on the sharding scheme, latency required, and health of the vttablets.
vtctl is a command line utility that allows a human or a script to easily interact with the system.
All components communicate using a lightweight RPC system based on BSON.
最新版本:12
Vitess 12 正式版已于2021年11月初发布,在此版本中,Vitess 在多个方面取得了重大进展,包括 Gen4 planner、VTAdmin 和其他改进。
Gen4 Planner:Gen4 是最新版本的查询计划程序 (query planner),在 Vitess 12 中属于实验性功能。如需使用 Gen4,VTGate 的-planner_version flag 需要被设置为gen4。
VTAdmin:在 Vitess 10.0 中引入的实验性多集群管理 API 和 Web UI 称为 VTAdmin,现在最新版本 Vitess 12 改进了基于 vreplication 的 Reshard 工作流。Vitess 12.0 引入了基于角色的访问控制 (RBAC) 的实验性实现,允许 Vitess 运维人员根据其 Vitess 环境的特定授权实现来允许或拒绝 API 端点。这为即将到来的 vtctld2 UI 弃用计划提供了基础。请注意,VTAdmin 不提供任何身份验证实现;用户可提供他们自己的,适用于他们部署的特定细节相关的认证。部署 vtadmin-api 和 vtadmin-web 组件是完全可选的。VTAdmin 依赖于新的 VtctldServer API,因此必须在 vtctlds 上运行新的 grpc-vtctld 服务才能使用它。
Benchmarking:根据官方的介绍,自上次发布以来,arewefastyet 发生了细微的变化。Web 服务器使用新的基准测试队列,该队列消耗更少的计算资源并避免两次运行相同的基准测试。为增强对新 Gen4 查询计划程序性能的信任,团队开发了一项功能,可以将宏基准测试生成的查询计划及其统计信息(执行时间、执行计数)可视化。在比较 V3 和 Gen4 的性能时提供了更多的优势。
使用更包容性的命名:此版本进行了重大的命名改变,例如删除 master,用 primary 或 source 代替,这些变化现在已向后兼容。在下一个版本中,废弃的命令将被删除,这意味着使用废弃命令的脚本应该被修改为使用新的命令。
最新版本:14
Vitess 14 正式于2022年7月上旬发布,更新内容如下:
可用性:命令行语法的弃用:这个版本标志着 Vitess 开始对其命令行和标志语法进行标准化。一些以前的语法已经被废弃,在下一个版本中会被删除。VtctldServer 和 Client:用于 vtctld 集群管理的新 gRPC API —— VtctldServer 已经可以使用了。目标是在 Vitess 15 开始废除旧的接口,所以用户现在就应该开始进行过渡了。Vitess 14 还提供了一个新的 vtctld 客户端( vtctldclient )来对应新的 gRPC 服务器接口。在启用新服务后,用户可以开始使用新的客户端来执行集群管理命令。 vtctldclient 和传统的 vtctlclient 都提供了 shim 机制来使用对方的 CLI 语法,以缓解过渡。
VTAdmin:Vitess 14 包括 VTAdmin 的测试版本,这是 Vitess 的下一代集群管理 API 和 UI。VTAdmin 提供了一个单一的控制平面来管理多个 Vitess 集群,并将取代传统的 VTCtld Web UI。请注意,新的 grpc-vtctld 服务是 VTAdmin 向你想管理的集群进行 RPC 的必要条件,所以你必须在启用该服务的情况下运行你的 vtctld 组件。
Online DDL:基于 Vitess-native 和 gh-ost 的 Online DDL 功能现在已是 GA。pt-osc 仍被认为是实验性的,主要是因为还没有被社区充分采纳或获得反馈。
Query Planner:Vitess 团队在两年前就开始了新的 Query Planner(查询计划程序)的工作,这个查询计划程序被称为 Gen4,在 Vitess 14 成为了新的默认程序。它取代了旧的称为 V3 的查询计划程序。新的计划程序增加了对更多查询的支持。
可靠性。
VTOrc:在 Vitess 14 中仍然是实验性的。在这个版本中,使 VTOrc 成为 Vitess 的一流组件的工作又向前推进了一步。VTOrc 现在与 VTCtld 完全继承,从 VTCtld 运行集群操作不会导致 VTOrc 采取不必要的操作;在这个版本中已经解决了联合问题,现在可以运行 VTOrc 的多个实例来观察同一组 keyspaces,而不会相互影响。持久性策略配置已被重构,现在它不再作为命令行配置提供,而是存储在拓扑服务器中。VTOrc 和 VTCtld 都将从那里读取它,并遵循所提供的耐久性策略。
性能:利用基准测试系统 arewefastyet 对这个新版本的 Vitess 进行基准测试后发现,v14.0.0 和 v13.0.0 之间大约有 10% 的性能提升。这一改进主要来自于取消了内部的 SAVEPOINT 查询执行。
更多详情可查看此处。
最新版本:17
Vitess 17 于2023年6月正式发布,在这个版本中,Vitess 引入了一些重要的改进措施,以提高系统的兼容性、性能和可用性。在 v15 版本中引入的 VTTablet 设置连接池功能,在这个版本中现在默认启用。该功能简化了系统设置的管理和配置,为用户提供了更加精简和便的体验。新的基于 Tablet Throttler 的 Topology Service 现在已 GA 并默认启用。
MySQL 兼容性改进:现在支持额外的语句,例如 Prepare 、 Execute 和 Deallocate 以及许多附加函数,包括比较运算符、数字函数、日期和时间函数、 JSON 函数等。查询计划器经历了一些改进,带来了更有效的查询计划,特别是复杂的操作,如聚合、分组和排序,从而提高查询性能。执行查询时使用的评估引擎也得到了显著的改进,带来了超过 2 倍的性能改进。新版本还添加了一个基于新虚拟机的引擎,它将最终取代基于 AST 的引擎,并提供更大的性能改进(在 v17 中默认没有启用)。在这个版本中,模式跟踪也得到了加强,使 Vitess 查询计划器能够快速检测到数据库模式的任何变化。这确保了查询能够保持最新的模式修改,提高了整体数据的一致性。
复制增强功能:现在支持在与 Vitess 分片相对应的每个复制集中更有效的 MySQL 复制。新版本已经为 noblob binlog_row_image 类型增加了支持。如果你使用 TEXT、BLOB 或 JSON 列,这可以大大减少你的二进制日志的整体大小,减少磁盘 I/O 和存储以及网络 I/O 和相关 CPU 的开销。另外还为 MySQL 8.0 中新增加的二进制日志事务压缩增加了支持。Zstandard 用于压缩每个 GTID 的内容,然后将压缩的事件存储到二进制日志中。这也大大减少了磁盘 I/O 和存储以及网络 I/O,不过代价是读写日志时会有一些额外的 CPU 开销。
其他包括:流量限制改进、VTorc 改进、VTAdmin 改进。更多详情可查看此处。
项目主页:https://github.com/youtube/vitess