数据库中间件有哪些

Z, ZLW 6751

数据库中间件有以下4种:1、分表分库中间件 ;2、数据增量订阅与消费中间件; 3、数据库同步中间件;4、跨数据库(数据源)迁移中间件。常见的数据库中间件工具有:1、Cobar;2、DRDS;3、MyCat;4、Atlas;5、OneProxy。

一、数据库中间件分类:

1、分表分库中间件

分布式数据库分表分库中间件,负责和上层应用打交道,对应用可表现为一个独立的数据库,而屏蔽底层复杂的系统细节。分布式数据库中间件除了基本的分表分库功能,还可以丰富一下,比如讲读写分离或者水平扩容功能集成在一起,或者比如读写分离本身也可以作为一个独立的中间件。(Cobar, MyCAT, TDDL, DRDS, DDB)

分表分库类的中间件主要有两种形式向应用提供服务:

  • 一种是以JDBC的jar包形式为Java应用提供直接依赖,Java应用通过提供的JDBC包实现透明访问分布式数据库集群中的各个分库分表,典型代表网易的DDB和阿里的TDDL.
  • 另一种是为应用部署独立的服务来满足应用分库分表的需求,在这种方式下通过标准JDBC访问Proxy,而Proxy则根据MySQL标准通信协议对客户端请求解析,还原应用SQL请求,然后通过本地访问数据库集群,最后再将得到的结果根据MySQL标准通信协议编码返回给客户端。

典型代表阿里的Cobar, Cobar变种MyCAT, 阿里的DRDS,网易的DDB proxy模式以及DDB的私有云模式。

  • Cobar 是提供关系型数据库(MySQL)分布式服务的中间件,它可以让传统的数据库得到良好的线性扩展,并看上去还是一个数据库,对应用保持透明。Cobar以Proxy的形式位于前台应用和实际数据库之间,对前台的开放的接口是MySQL通信协议。将前台SQL语句变更并按照数据分布规则发到合适的后台数据分库,再合并返回结果,模拟单库下的数据库行为。
  • MyCAT从定义和分类看,它是一个开源的分布式数据库系统,是一个实现了MySQL协议的Server,前端用户可以把它看做是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL Native Protocol与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。

当项目的数据量不断增大,单台数据库已经不足以支撑我们的业务量时,通常我们都会采用分库分表的策略。如果分库分表自己在代码中实现的话,需要管理对个数据源,执行一次查询,需要定位到数据保存在哪个数据源上;当执行插入操作时,又需要确认需要将数据保存在哪个数据源中;分库分表不仅有 SQL 解析和路由的问题,同时还会有 SQL 改写、并行执行、结果集合并等问题;所以项目经常会使用分库分表的组件,来屏蔽这些复杂的功能。

这类数据库中间件的实现方案基本上有两种:

服务端代理:需要独立部署一个代理服务,该代理服务后面管理多个数据库实例,在应用中通过一个数据源与该代理服务器建立连接,由该代理去操作底层数据库,并返回相应结果。优点是支持多语言,对业务透明,缺点是实现复杂,实现难度大,同时代理需要确保自身高可用。

客户端代理:在连接池或数据库驱动上进行一层封装,内部与不同的数据库建立连接,并对SQL进行必要的操作,比如读写分离选择走主库还是从库,分库分表select后如何聚合结果。优点是实现简单,天然去中心化,缺点是支持语言较少,版本升级困难

2、数据增量订阅与消费中间件

增量数据订阅和消费,用户对数据库操作,比如DML, DCL, DDL等,这些操作会产生增量数据,下层应用可以通过监测这些增量数据进行相应的处理。这个是基于对数据库增量日志解析,提供增量数据订阅和消费;最有名的是阿里的 Canal。根据MySQL的binlog实现,Canal 通过监听 Mysql 的 binlog 日志来获取数据,binlog 设置为 row 模式,能够获取到每一条新增、删除、修改的日志,同时还能获取到修改前后的数据。通常我们可以利用这个中间件,实时感知到 Mysql 中的数据变化,将其数据更新到 NoSQL 数据中,比如 MongoDB、ES 等等;通常项目组加入这些非关系数据库,可以减轻数据库查询压力、在分库分表的架构中,还能起到全局查询的作用。

也有针对Oracle(redolog)的增量数据订阅与消费的中间件。(Canal, Erosa)

3、数据库同步中间件

数据库同步中间件涉及数据库之间的同步操作,可以实现跨(同)机房同步以及异地容灾备份、分流等功能。可以涉及多种数据库,处理之后的数据也可以以多种形式存储。(Otter, JingoBus, DRC)

4、跨数据库(数据源)迁移中间件

数据库与数据库之间会有数据迁移(同步)的动作,同款数据同步原理比较简单,比如MySQL主备同步,只要在数据库层进行相应的配置既可,但是跨数据库同步就比较复杂了,比如Oracle->MySQL. 数据迁移一般包括三个步骤:全量复制,将原数据库的数据全量迁移到新数据库,在这迁移的过程中也会有新的数据产生;增量同步,对新产生的数据进行同步,并持续一段时间以保证数据同步;原库停写,切换新库。将“跨数据库”这个含义扩大一下——“跨数据源”,比如HDFS, HBase, FTP等都可以相互同步。(yugong, DataX)

二、常见的数据库中间件工具

1、Cobar

阿里开源的关系型数据库分布式服务中间件,已停更

2、DRDS

阿里分布式关系型数据库服务(Distribute Relational Database Service,简称DRDS)是一种水平拆分、可平滑扩缩容、读写分离的在线分布式数据库服务。整合云服务,收费、Cobar、TDDL整合,商用,首选。

3、MyCat

开源数据库中间件。遵守Mysql原生协议,跨语言,跨数据库的通用中间件代理。
基于心跳的自动故障切换,支持读写分离,支持 MySQL 一双主多从,以及一主多从
有效管理数据源连接,基于数据分库,而不是分表的模式。目前更新了MyCat2版本

4、Atlas

Atlas 是由 360 Web平台部基础架构团队开发维护的一个基于 MySQL 协议的数据中间层项目。它是在mysql-proxy 0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性。360内部使用 Atlas 运行的 MySQL 务,每天承载的读写请求数达几十亿条。主要功能有:

  • 读写分离
  • 从库负载均衡
  • IP过滤
  • SQL语句黑白名单
  • 自动分表

5、OneProxy 

OneProxy 分布式中间件,是平民软件完全自主开发的分布式数据访问层,帮助用户在 MySQL/PostgreSQL 集群上快速搭建支持分库分表的分布式数据库中间件,也是一款具有 SQ L白名单(防 SQL 注入)及 IP 白名单功能的 SQL 防火墙软件。采用与 MySQL Proxy 一致的反向协议输出模式,对应用非常简单和透明易用,让用户畏惧的分库分表(Horizontal Partitioning)工作变得极其简单可控。基于 Libevent 机制实现,单个实例可以实现25万的 SQL 转发能力,用一个 OneProxy 节点可以带动整个 MySQL 集群。

拓展阅读

什么是中间件?

中间件是介于应用系统和系统软件之间的一类软件,它使用系统软件所提供的基础服务(功能),衔接网络上应用系统的各个部分或不同的应用,能够达到资源共享、功能共享的目的。它并没有很严格的定义,但是普遍接受IDC的定义:中间件是一种独立的系统软件服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。从这个意义上可以用一个等式来表示中间件:中间件=平台+通信,这也就限定了只有用于分布式系统中才能叫中间件,同时也把它与支撑软件和实用软件区分开来。

为什么要使用中间件?

当出现下列问题时:

  1. 数据库存储的量不是很大,但是并发的读写操作都很大时,超过数据库的处理能力了。
  2. 应用的业务模块很多,总的数据量很大,并发的处理操作均超过单个数据库服务器的处理能力。
  3. 如果单个表的数据量很大,超过了单表的存储上限,如商品表、订单表等。

为了解决数据存储、访问性能我们需要用到数据库中间件。数据库中间件可以让我们在应用程序中快速的应用读写分离、分库分表,并且如果要是想让我们写代码时不需要关注数据库是不是进行了读写分离,所以需要隔离这些下端的数据库读写分离带来的变化屏蔽掉对上端的影响,就需要加数据库访问模块即数据库中间件。

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部