用Spider引擎解决数据库垂直和水平拆分的问题
《用Spider引擎解决数据库垂直和水平拆分的问题》要点: 作者介绍
近开始负责财付通数据库的相关维护工作,其中有几套系统使用的Spider引擎,为了以后能更好地对这套系统进行维护,对Spider做了一些功课,将Spider引擎的功能、使用场景、部署、实战测试等做个简单的总结,希望同学们看完本文后能对Spider引擎有个更深入的了解. 先来说两个我们DBA经常遇到的场景: 场景1:有两个分布在不通实例上的多张不通的表,想要通过某个字段关联,做一个统计,或者想将分布在不同实例的表,合并到一个实例中来做一些查询. 场景2:由于数据库容量的瓶颈或者是由于数据库访问性能的瓶颈,将某一个大库、大表或者访问量非常大的表进行拆分,然后分布到不通的实例中. 这两种场景覆盖了我们DBA经常接触的垂直拆分和水平拆分,在这种场景下往往面临着如下几个窘境:
我们想到的解决办法可能有如下几种: (1)使用数据库中间件(MySQLfabric/TDDL/Cobar/Atlas/Heisenberg/Vitess) 这个似乎是大公司专用的,由于存在各种各样的限制,小公司往往使用起来非常不方便,对于里面存在的各种坑也没办法很好规避. (2)使用MySQL分区表 无法解决磁盘空间瓶颈以及服务器性能瓶颈. (3)使用Galera Cluster for MySQL 支持数据库的高可用以及能实现读请求的扩展,但是对于写请求无法实现性能上的突破. (4)使用MySQL的多源复制 仅仅适合将多个实例的数据聚合到一起,用来做数据统计,但还是存在磁盘空间的瓶颈. (5)使用federated 可以实现将数据聚合,对于水平分割的场景并不适用,并且性能方面也存在比较大的问题. (6)MySQL Sharding和Spider MySQL Cluter是MySQL Sharding的一种,对于这种需求是个比较好的解决方案,不过使用于生产环境的案例比较少.还有一个Spider分布式引擎方案,非常适合前面我们讨论的两个场景,下来将会做深入的介绍,该引擎目前已经集成到了MariaDB中,目前最新的版本是Spider 3.2.37. 本文就是基于Spider的分布式数据库解决方案,下面就来详细介绍: 一、Spider引擎简介1、Spider引擎是什么Spider引擎是一个内置的支持数据分片特性的存储引擎,支持分区和XA事务,该引擎可以在服务器上建立和远程服务器表之间的链接,操作起来就像操作本地的表一样.并且后端可以是任何的存储引擎.Spider引擎根据表的设置的规则以及server表的规则自动进行智能路由,实现对后端数据库不通的表或者数据分片的访问和修改.因此该引擎对业务是完全透明的. 目前Spider引擎已经集成到了MariaDB中,安装使用非常方面,目前最新的版本是Spider 3.2.37.更多信息可以访问:https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/,具体的版本历史如下图所示: 2、Spider架构图3、Spider的优势
4、Spider的劣势
二、Spider的使用场景解析1、垂直分表的场景和解析
从上图可以看出,Spider后面接4台DB server,可以将不通功能的表分布到后端不通的DB server中,比如user_info的表专门存放在HostA中,user_msg表存放在了HostB中,user_detail表存放在了HostC中,user_log表存放在了HostD中. 在图中的红色部分,当我们执行红色部分的SQL时,Spider会通过user_info表的映射关系以及HostA的IP映射关系,将查询user_info表的请求都转发到HostA上,HostA查询完成后再将结果发给spider服务器,Spider再转发给客户端. 2、采用水平分表的场景
(编辑:ASP站长网) |