设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 手机 数据 公司
当前位置: 首页 > 服务器 > 安全 > 正文

用Spider引擎解决数据库垂直和水平拆分的问题

发布时间:2021-01-24 09:29 所属栏目:53 来源:网络整理
导读:《用Spider引擎解决数据库垂直和水平拆分的问题》要点: 本文介绍了用Spider引擎解决数据库垂直和水平拆分的问题,希望对您有用。如果有疑问,可以联系我们。 作者介绍 张秀云 ,网名飞鸿无痕,现任职于腾讯,负责腾讯金融数据库的运维和优化工作.2007年开始从

《用Spider引擎解决数据库垂直和水平拆分的问题》要点:
本文介绍了用Spider引擎解决数据库垂直和水平拆分的问题,希望对您有用。如果有疑问,可以联系我们。

作者介绍

张秀云,网名飞鸿无痕,现任职于腾讯,负责腾讯金融数据库的运维和优化工作.2007年开始从事运维方面的工作,经历过网络管理员、Linux运维工程师、DBA、分布式存储运维等多个IT职位.对Linux运维、MySQL数据库、分布式存储有丰富的经验.

近开始负责财付通数据库的相关维护工作,其中有几套系统使用的Spider引擎,为了以后能更好地对这套系统进行维护,对Spider做了一些功课,将Spider引擎的功能、使用场景、部署、实战测试等做个简单的总结,希望同学们看完本文后能对Spider引擎有个更深入的了解.

先来说两个我们DBA经常遇到的场景:

场景1:有两个分布在不通实例上的多张不通的表,想要通过某个字段关联,做一个统计,或者想将分布在不同实例的表,合并到一个实例中来做一些查询.

场景2:由于数据库容量的瓶颈或者是由于数据库访问性能的瓶颈,将某一个大库、大表或者访问量非常大的表进行拆分,然后分布到不通的实例中.

这两种场景覆盖了我们DBA经常接触的垂直拆分和水平拆分,在这种场景下往往面临着如下几个窘境:

  1. 这些表的访问和存取需要额外的路由规则,复杂度很高.
  2. 需要做数据汇总或者统计的时候,非常麻烦.

我们想到的解决办法可能有如下几种:

(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/,具体的版本历史如下图所示:

Spider引擎

2、Spider架构图

Spider架构

3、Spider的优势

  • 对业务完全透明,业务不需要做任何的修改.
  • 对于分库分表的逻辑业务不需要关心,只需要通过Spider作为代理入口,访问数据对应在后端哪台server上spider自动帮你处理.
  • 方便横向扩展,能解决单台MySQL得性能和存储瓶颈问题.
  • 对后端的存储引擎没有限制.
  • 间接实现垂直拆分和水平拆分功能.
  • 通过spider和后端的数据库连接,可以是独立的表,也可以是基于分区表,分区表支持哈希、范围、列表等算法.
  • 完全兼容MySQL协议由于MySQL特殊的插件式存储引擎架构,server层负责SQL解析、SQL优化、数据库对象(视图、存储过程等)管理;存储引擎层负责数据存储、索引支持、事务、buffer等,两者之间通过约定好的handler接口进行交互.SQL解析、优化与执行交给server层处理,几乎支持执行任意类型SQL访问.

4、Spider的劣势

  • Spider的表本身不支持查询缓存和全文索引,不过可以将全文索引添加在后端数据库中;
  • 如果采用物理备份,Spider无法备份后端的数据,因为数据本身是存放在后端.可以对后端的MySQL一一做物理备份;
  • Spider本身是单点,需要自己做容灾机器,比如通过VIP的方式;
  • 多了一层网络,性能上会有一些损耗,尤其是跨分区、跨表查询性能会差一些.

二、Spider的使用场景解析

1、垂直分表的场景和解析

  • 垂直分表场景图

Spider

  • 垂直分表场景解析

从上图可以看出,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站长网)

网友评论
推荐文章
    热点阅读