概述
Vitess 是一个用于 MySql 扩展的数据库解决方案。它以能够像运行在专用硬件上那样有效地运行于云体系。它集 MySql 数据库的很多重要特性和 NoSQL 数据库的可扩展性于一体。Vitess 已经成功侍服了 2011 年以来所有的 YouTube 数据库流量。Kubernetes 上的 Vitess
Kubernetes 是 Google 开源的 Docker 容器集群管理系统,Vitess 是 Kubernetes 用户的逻辑存储引擎的一个可选项。Kubernetes 对一个计算集群中的节点进行调度,对这些节点之上的负载进行管理,并对包含有同一应用的容器进行分组以易于管理和发现。使用 Kubernetes,你可以很容易去创建和管理一个 Vitess 集群,可谓开箱即用。
本机硬件上的 Vitess
略
与其他存储选择的对比
接下来将 Vitess 去对比两种通用解决方案,一个 vanilla MySQL 实现和一个 NoSQL。Vitess vs. Vanilla MySQL
Vitess 在以下几个方面改进了 vanilla MySql 实现:Vanilla MySQL | Vitess |
---|---|
每个 MySql 连接都有一个内存开销,其范围介于 256KB 到几乎 3MB 之间,这取决于你所使用的 MySql 版本。随着你的用户群的增长,你需要增加内存以支撑增加的那些连接,但增加内存无助于提高查询速度。此外,在获取这些连接的时候还有大量的 CPU 开销。 | Vitess 基于 BSON 的协议创建非常轻量级仅约 32KB 的连接。Vitess 的连接池功能使用了 Go 语言的卓越的并发支持将这些轻量级的连接映射到一个小型的 MySql 连接池。因此,Vitess 可以很容易地同时处理数千个连接。 |
低效的写查询,比如一些没有设置一个限制的写查询,将会对所有用户的数据库性能产生负面影响。 | Vitess 所用的 SQL 解析器使用了一组可配置的规则对可能会降低数据库性能的查询进行重写。 |
分片是一个对你的数据进行分区来提高可扩展性和性能的过程。MySql 不支持分片,要求你自己去编写分片代码并在你自己的应用程序中嵌入分片逻辑。 | Vitess 使用基于范围的分片。它同时支持水平和垂直的重新切分,完成大多数数据的转换只需要仅仅几秒钟的只读的停机时间。Vitess 甚至可以适应你现有的一个自定义分片方案。 |
MySql 集群为保证可用性采用的是主从复制,有一个主数据库和几个副本数据库。主库宕机,某台从库将成为新的主库。这个 |