数据库中间件概述

1.为什么需要数据库中间件,何为数据库中间件

不同的应用程序有不同的数据存储方式和组网。数据量小的普通的应用程序一般采用单机数据库来持久化数据,如下图。

当数据的并发读写超过数据库服务器的处理能力时,需要进行读写分离来分离读写压力,加缓存服务器来减少数据库的读取压力,如下图。

一般DAO层的代码编写的时候只会连接一个数据库服务器进行数据操作,那么这时就需要数据库中间件隔离这种变化,如下图。

 

2.不同场景所需的数据库中间件特性

不同的应用有不同的业务场景。当应用的业务模块变多时,总的数据量会曾大,并发读写操作会逐渐超过单个数据库服务器的处理能力。

这时,针对读取压力,可以进行集群,多个从库来解决,如下图组网。

而针对写入压力,则不能多个主库,因为多个主库数据需要同步,难以保证数据一致性,而且数据量大单库存储不下,所以需要进行分库分表,如下图组网。

当有些业务数据不仅量大而且读写压力也大的时候,就需要构建如下组网进行分库分表+读写分离。

如此多的复杂情况,综合所有的数据读写压力对数据库中间的能力要求就很严苛,需要支持分库、分表,支持读写分离,对DAO层的影响还要小。

3.数据库中间件设计要点

数据库中间件的设计要点主要有如下9点:

  • 要能解析SQL
  • 能支持读写分离
  • 能支持从库读的负载均衡
  • 支持分库操作
  • 支持分表操作
  • 支持跨库关联查询
  • 对事务处理的支持
  • 主键ID生成
  • 数据源管理

在这之前,对于开发人员来说,数据库的分库分表设计也很重要,即数据库拆分规则,主要有两个层面来拆分,垂直拆分和水平拆分。

垂直拆分是指业务模块来拆分。优点是拆分后业务清晰,拆分规则明确;系统之间整合或扩展容易;数据维护简单。缺点是部分业务表无法join,只能通过接口方式解决,提高了系统复杂度;受每种业务不同的限制存在单库性能瓶颈,不易数据扩展跟性能提高;事务处理复杂。

水平拆分是指对海量数据的表进行分库分表存储,即一张表拆分到不同数据库或者同数据库不同数据表中。优点是拆分规则抽象好,join操作基本可以数据库做;不存在单库大数据,高并发的性能瓶颈;应用端改造较少;提高了系统的稳定性跟负载能力。缺点是拆分规则难以抽象;分片事务一致性难以解决;数据多次扩展难度跟维护量极大;跨库join性能较差。水平拆分中最重要的就是分片的拆分规则,具体可以按范围(时间、数值),列表(地域、组织、分类),散列(hash(字段)%分片数、一致性hash)等方式拆分,甚至可以复合多种方式拆分。

但是无论水平拆分还是垂直拆分,都有共同的技术难点:引入分布式事务问题;跨节点join问题;跨节点合并排序分页问题;多数据源管理问题,这些难点都需要由数据库中间件来解决。

市面上的数据库中间件目前有两种实现模式。

客户端模式,即在应用程序中集成数据库中间件模块,通过该模块来配置管理应用需要的一个或多个数据源,以及访问各个数据源,在模块内完成数据的整合。

服务端(代理)模式,通过中间代理层来统一管理所有的数据源,后端数据库集群对前端应用程序透明,同时易于数据库扩展。独立的服务能提供更强的处理能力。适用于大型复杂系统。

数据库中间件的相关产品及相关特性支持如下:

数据库中间件大致情况就介绍这么多,后续再对相关中间件再深入探讨。

 


版权声明:本文为a7151593原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。