天天看点

MariaDB Spider:实现MySQL横纵向扩展的小能手

什么是spider?

当您的数据库不断增长时,您绝对需要考虑其它技术,如数据库分片。spider是mariadb内置的一个可插拔用于mariadb/mysql数据库分片的存储引擎,充当应用服务器和远程后端db之间的代理(中间件),它可以轻松实现mysql的横向和纵向扩展,突破单台mysql的限制,支持范围分区、列表分区、哈希分区,支持xa分布式事务,支持跨库join。通过spider,您可以跨多个数据库后端有效访问数据,让您的应用程序一行代码不改,即可轻松实现分库分表!

分库分表架构:

MariaDB Spider:实现MySQL横纵向扩展的小能手

应用程序连接spider,spider充当中间件代理,将客户端查询的请求,按照事先定义好的分片规则,分发给后端数据库,之后返回的数据汇总在spider内存里做聚合,最终返回客户端请求,对于应用程序而言是透明的。

典型案例---腾讯游戏

MariaDB Spider:实现MySQL横纵向扩展的小能手

腾讯游戏的生产环境数据量达到了100tb,用了396个spider节点做数据拆分,分片后的数据用了2800个mysql节点存储。

使用场景介绍

下面介绍一下我负责的一个项目,已通过spider实现了历史表的垂直拆分。

随着业务的增长,单台服务器磁盘空间有限,有些业务上的历史数据,dba用工具pt-archiver归档后,历史表就没有用了,通常我们会把它单独迁移到备份机,主库上就删除了。但有的时候,bi统计部门来了一个需求,需要临时关联查询这些历史表,那么,dba就需要从备份机上myloader导入到从库上去,为了降低导数据引起的从库cpu升高、磁盘io的瞬间增大,可能造成主从复制的延迟。

为了减少这种重复性的体力工作,为了更快速地缩短可用时间,我们可以通过spider引擎解决,通过它你可以将远程服务器上的表做一个映射,做一个软连接,相当于你操作本地的表一样,简单而便捷,省去了那么多麻烦,临时提供给业务方用,也不用考虑过多的性能问题。

架构图如下:

MariaDB Spider:实现MySQL横纵向扩展的小能手

实施这个方案,选择spider引擎是有优势的:

sql解析和查询优化是个非常复杂且很难做好的工作,其它替代产品都是自己实现,由于复杂性,这些产品都带来了一些限制,比如不支持存储过程、函数、视图等,给使用和实施带来了困难。而作为一个存储引擎,这些工作都由mariadb自身完成了,可以方便地将大表做分布式拆分,和fabric相比,它的好处是对业务方使用是透明的,sql语法没有任何限制,在不改变现有db架构的方案中,侵入性最小。

内部原理架构图如下:

MariaDB Spider:实现MySQL横纵向扩展的小能手

我们在一台从库上,安装上spider引擎,只需两条命令做一个表的“超链接”,分分钟就解决了问题。

注:前提是你的从库使用的是mariadb10。

下面是官方的垂直拆分压测报告:

MariaDB Spider:实现MySQL横纵向扩展的小能手

而在我的压测结果上,分库分表的性能会降低70%,垂直拆分性能会降低40%,性能损耗的原因是在分布式场景下,要保证2pc的一致性和可用性,读写的表现就差,另外就是跨多个网络传输这两方面引起的,目前为rc公测版本v3.2.37,固在主库上实现该功能要慎重!

spider引擎安装

# mysql -uroot -p

MariaDB Spider:实现MySQL横纵向扩展的小能手

spider引擎使用

1、定义后端服务器和数据库名字

MariaDB Spider:实现MySQL横纵向扩展的小能手

这里后端服务器的名字为backend1,数据库名字为test,主机ip地址为192.168.143.205,用户名为user_readonly,密码为123456,端口为3306。

注:如配置错误,可直接drop serverbackend1; 重新创建即可。

2、创建表的“超链接”

MariaDB Spider:实现MySQL横纵向扩展的小能手

这里通过设置comment注释来调用后端的表,然后你就可以查看sbtest表了,是不是很简单?

MariaDB Spider:实现MySQL横纵向扩展的小能手

同上,但区别是分库分表是采用了类似表分区的概念实现。

spider_conn_recycle_mode= 1

连接复用,类似连接池这种功能

optimizer_switch= 'engine_condition_pushdown=on'

引擎下推,查询推送到后端数据库,将查询结果返回给spider做聚合

由于spider自身不保存数据,只保存路由信息,是无状态的,因而可以部署多个spider做负载均衡,架构图如下:

MariaDB Spider:实现MySQL横纵向扩展的小能手

后端mysql可以结合mha实现高可用故障切换。

注:在mariadb10.2版本里,spider准备ga。

原文发布时间为:2017-04-20

本文来自云栖社区合作伙伴dbaplus