当前位置:   article > 正文

一文读懂数据库中间件分类,应用场景!

数据库中间件有哪些

点击上方蓝色“终端研发部”,选择“设为星标”

 
 
学最好的别人,做最好的我们

数据库中间件简述

数据库中间件可以简化对读写分离以及分库分表的操作,并隐藏底层实现细节,可以像操作单库单表那样操作多库多表,主流的设计方案主要有两种:

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

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

一些常见的数据库中间件如下:

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

  • DRDS:脱胎于Cobar,全称分布式关系型数据库服务

  • MyCat:开源数据库中间件,目前更新了MyCat2版本

  • Atlas:Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目,同时还有一个NoSQL的版本,叫Pika

  • tddl:阿里巴巴自主研发的分布式数据库服务

  • Sharding-JDBC:ShardingShpere的一个子产品,一个轻量级Java框架

为什么需要数据库中间件

普通应用程序和数据库的访问如下图:
901cb0baaa4b76589c4ebac33ec7e30a.png
当出现下列问题时:

  1. 数据库存储的量不是很大,但是并发的读写操作都很大时,超过数据库的处理能力了。

  2. 应用的业务模块很多,总的数据量很大,并发的处理操作均超过单个数据库服务器的处理能力。

  3. 如果单个表的数据量很大,超过了单表的存储上限,如商品表、订单表等。

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

数据库中间件设计要点

  1. 要能解析SQL

  2. 能支持读写分离

  3. 能支持从库读的负载均衡

  4. 支持分库操作

  5. 支持分表操作

  6. 支持跨库关联查询

  7. 对事务处理的支持

  8. 主键ID生成

  9. 数据源管理

数据库的拆分

数据库拆分主要分为垂直拆分、水平拆分

垂直拆分

按业务模块进行垂直拆分
7731cb000cbf0c5dfd4d952ee26f6fd9.png
优点:

  1. 拆分之后业务清晰,拆分规则明确

  2. 系统之间整合和扩展容易

  3. 数据维护简单

缺点:

  1. 部分业务表无法jion,只能通过接口方式解决,提高了系统的复杂度

  2. 每种业务不同的限制存在单库性能瓶颈,不易数据库的扩展和性能提高

  3. 事务处理复杂

水平拆分

对海量数据进行分库分表的存储
84c06348d298d63fa54aa48d836683ab.png
优点:

  1. 拆分规则抽象好,join操作基本可以数据库做

  2. 不存在单库数据量大,高并发的性能瓶颈

  3. 应用端改造少

  4. 提高了系统的稳定性跟负载能力

缺点:

  1. 拆分规则难以抽象

  2. 分片事务一致性难以解决

  3. 数据库多次扩张跟维护量极大

  4. 跨库join性能较差

水平对数据进行拆分最重要的是分片规则 – 拆分规则

可以如何来进行拆分?

  1. 范围:时间、数值

  2. 列表:按地域、按组织、分类

  3. 散列:hash(某个字段)%分片数、一致性hash

  4. 复合多种方式

分库分表的技术难点

无论是垂直拆分、水平拆分都有共同的技术难点:

  1. 引入分布式事务的问题

  2. 跨节点join问题

  3. 跨节点和平排序分页的问题

  4. 多数据源管理的问题

这将是我们考量数据库中间件需要关心的主要问题。

数据库中间件的两种实现模式

客户端模式

cedb2163a2d2c824bb9e9098925cfb94.png

客户端模式是在应用程序中集成数据库中间件模块,通过该模块来配置管理应用需要的一个(或者多个)数据源,以及访问各个数据源,在模块内完成数据整合。(在小的系统中可以使用该模式,当系统过于庞大时尽量避开该模式,因为每个程序都要配置中间件模块难以进行管理并且繁琐)

服务端模式

cf1dff87e6babbc6efd2356ea221a64a.png

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

常用数据库中间件简介

175ba2a96a4aebccc134ac28aba06745.png

ad92cf049be1952bdfff2c296691b60a.png

作者:老马
链接:https://blog.csdn.net/majie639/article/details/96762216

写在最后的话
大家看完有什么不懂的可以在下方留言讨论,也可以私信问我一般看到后我都会回复的。最后觉得文章对你有帮助的话记得点个赞哦,点点关注不迷路
每天都有新鲜的干货分享!

  1. 回复 【idea激活】即可获得idea的激活方式
  2. 回复 【Java】获取java相关的视频教程和资料
  3. 回复 【SpringCloud】获取SpringCloud相关多的学习资料
  4. 回复 【python】获取全套0基础Python知识手册
  5. 回复 【2020】获取2020java相关面试题教程
  6. 回复 【加群】即可加入终端研发部相关的技术交流群
  7. 阅读更多
  8. 用 Spring 的 BeanUtils 前,建议你先了解这几个坑!
  9. lazy-mock ,一个生成后端模拟数据的懒人工具
  10. 在华为鸿蒙 OS 上尝鲜,我的第一个“hello world”,起飞!
  11. 字节跳动一面:i++ 是线程安全的吗?
  12. 一条 SQL 引发的事故,同事直接被开除!!
  13. 太扎心!排查阿里云 ECS 的 CPU 居然达100%
  14. 一款vue编写的功能强大的swagger-ui,有点秀(附开源地址)
  15. 相信自己,没有做不到的,只有想不到的在这里获得的不仅仅是技术!
  16. 喜欢就给个“在看”
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号