概览

在当今快速发展的软件开发领域,构建快速、可扩展且抗故障的应用可能会决定一个项目的成败。容器化系统结合像 Kubernetes 这样的编排层可以从软件层面提供这一可靠性。然而,要将这种保护机制实现到数据库中,通常需要一个专门的开发团队和数据库管理员团队来管理多个数据库副本,并编写定制的分片逻辑以避免故障并实现高可用性。
PlanetScale 通过使用 Vitess 来为我们平台上的所有数据库提供上述功能。本文将为您详细解释 Vitess 是什么,它如何工作,以及为什么您应该关注它。


什么是 Vitess?

Vitess 是一个开源的 MySQL 数据库集群系统。从本质上来说,它是一组协同工作的系统,旨在使 MySQL 更具弹性、可扩展性和性能优势。Vitess 最早由 YouTube 团队在 2010 年开发,用于解决该平台不断增长的数据库扩展需求。如今,它依然为 GitHub 和 Slack 等大型公司提供强大的扩展能力。该项目目前维护活跃,贡献者包括 PlanetScale、Google、GitHub、Slack、Square、Stripe 以及其他多家数据密集型公司。
弹性、可扩展性、性能。 在任何现代数据库平台的白皮书中,你可能都会注意到这些流行的术语,但我们来详细分析一下 Vitess 是如何真正实现这些优势的。


Vitess 如何实现弹性

从本质上来说,MySQL 也是一个应用程序,虽然它比大多数其他应用程序更为专业,但依然具备一些相同的基本属性。提高应用弹性最有效的方法之一就是增加应用实例的数量。这样,当某个实例发生故障时,其他实例就可以接管责任。
Vitess 通过运行多个 MySQL 实例(可以在一台或多台服务器上),并使用一个轻量级代理(称为 VTGate)智能地将查询路由到正确的 MySQL 实例来实现这一点。如果某个 MySQL 实例离线,Vitess 可以自动检测并确定最佳候选实例来代替它作为主 MySQL 进程,以处理针对某个表的查询请求。


Vitess 的可扩展性

Vitess 通过水平分片(Horizontal Sharding)实现了对大型 MySQL 数据库的扩展,同时只需要极少的应用程序修改。它可以通过将表分片到多个 MySQL 实例之间,将负载平衡到多台服务器上。当 VTGate 收到一个查询时,系统会自动确定查询数据所在的 MySQL 实例,并调整查询以同时从这些实例中获取数据,并将结果返回给用户,就像是从一个单一的数据库中查询数据一样。所有这些操作对开发者(以及更重要的是对用户)都是完全透明的。


Vitess 提升性能的方式

仅通过上述两部分中的负载平衡功能,已经可以显著提高 MySQL 的性能,而 Vitess 内置了一些额外的优化以进一步提升性能。其中一个优化就是 Vitess 如何管理不同子系统之间的连接。
Vitess 的核心组件采用 Go 语言开发,并通过 gRPC 进行内部通信。得益于 Go 语言的并发特性,Vitess 可以轻松处理成千上万的客户端连接。每个连接到 Vitess 实例的客户端(无论是 GUI、应用程序等)首先与 VTGate 建立轻量级连接,而不是直接连接 MySQL。VTGate 理解 MySQL 协议并执行智能查询路由功能,从而适配当前的 Vitess 基础架构。为了避免创建过多连接,每个 MySQL 实例都有一个相关联的进程称为 VTTablet,VTGate 将查询发送到 VTTablet,而不是直接发送到 MySQL。
Vitess 将每个客户端与 VTGate 建立的轻量级连接映射到由 VTTablet 管理的较小连接池,以连接到真正的 MySQL 实例。这样的设计可以避免超载单个 MySQL 实例,降低资源使用率,因为只有 VTTablet 需要与底层 MySQL 进程直接通信。


PlanetScale 让 Vitess 使用更简单

PlanetScale 以能够提供唯一一个既兼容 MySQL,又能扩展并提升开发者工作效率的数据库为荣。Vitess 是其中的核心。通过 PlanetScale 创建的每一个数据库都会在几秒钟内部署好所有上述提到的基础设施,让开发者可以直接开始构建,而无需担心底层架构的管理。最终结果是,构建在我们平台上的开发者可以获得一个真正可以抵御故障并能够扩展到任何规模的 MySQL 数据库,而完全不需要管理底层架构。




什么是 Vitess:弹性、可扩展性和性能插图

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:http://www.choupangxia.com/2025/09/10/%e4%bb%80%e4%b9%88%e6%98%af-vitess%ef%bc%9a%e5%bc%b9%e6%80%a7%e3%80%81%e5%8f%af%e6%89%a9%e5%b1%95%e6%80%a7%e5%92%8c%e6%80%a7%e8%83%bd/