数据库中间件介绍

数据库中间件是连接数据库和应用程序之间的软件层,用于简化数据库管理、提高性能和可伸缩性,同时提供额外的功能和服务。在分布式系统和大规模应用中,数据库中间件发挥着重要的作用。

什么是数据库中间件?

数据库中间件是一种介于数据库系统和应用程序之间的软件层。它充当了一个抽象层,屏蔽了底层数据库的细节,为应用程序提供了更简化的接口。数据库中间件的主要目标是提供更高的性能、可用性、可扩展性,并简化数据库管理。

典型的数据库中间件设计方案有3种:proxy、smart-client、单元化架构

Smart-client 模式

通过独立的逻辑层建立数据分片和路由规则,实现单体数据库的初步管理,使应用能够对接多个单体数据库,实现并发、存储能力的扩展。其作为应用系统的一部分,对业务侵入比较深。这种客户端组件的典型产品是 Sharding-JDBC。

优点

  • 实现简单。大多数据数据库厂商已经针对不同的语言提供了相应的数据库驱动driver,例如mysql针对java语言提供了mysql-connector-java驱动,针对python提供了mysql-connector-python驱动,客户端的通信协议已经在driver层面做过了。因此smart-client模式的中间件,通常只需要在此基础上进行封装即可。

  • 天然去中心化。smart-client的方式,由于本身以sdk的方式,被应用直接引入,随着应用部署到不同的节点上,且直连数据库,中间不需要有代理层。因此除了网络资源之外,基本上不存在任何其他资源的竞争,也不需要考虑高可用的问题。只要应用的节点没有全部宕机,就可以访问数据库。

缺点

  • 通常仅支持某一种语言。例如tddl、zebra、sharding-jdbc都是使用java语言开发,因此对于使用其他语言的用户,就无法使用这些中间件。如果其他语言要使用,那么就要开发多语言客户端。
  • 版本升级困难。因为应用使用数据源代理就是引入一个jar包的依赖,在有多个应用都对某个版本的jar包产生依赖时,一旦这个版本有bug,所有的应用都需要升级。而数据库代理升级则相对容易,因为服务是单独部署的,只要升级这个代理服务器,所有连接到这个代理的应用自然也就相当于都升级了。

Proxy 模式

以独立中间件的方式,管理数据规则和路由规则,以独立进程存在,与业务应用层和单体数据库相隔离,减少了对应用的影响。随着代理中间件的发展,还会衍生出部分分布式事务处理能力。这种中间件的典型产品是 MyCat。

优点

  • 多语言支持。不论你用的php、java或是其他语言,都可以支持。以mysql数据库为例,如果proxy本身实现了mysql的通信协议,那么你可以就将其看成一个mysql 服务器。mysql官方团队为不同语言提供了不同的客户端驱动,如java语言的mysql-connector-java,python语言的mysql-connector-python等等。因此不同语言的开发者都可以使用mysql官方提供的对应的驱动来与这个代理服务器建通信。
  • 对业务开发同学透明。由于可以把proxy当成mysql服务器,理论上业务同学不需要进行太多代码改造,既可以完成接入。

缺点

  • 实现复杂。因为proxy需要实现被代理的数据库server端的通信协议,实现难度较大。通常我们看到一些proxy模式的数据库中间件,实际上只能代理某一种数据库,如mysql。几乎没有数据库中间件,可以同时代理多种数据库(sqlserver、PostgreSQL、Oracle)。
  •  proxy本身需要保证高可用。由于应用本来是直接访问数据库,现在改成了访问proxy,意味着proxy必须保证高可用。否则,proxy挂了,导致数据库无法正常访问,就尴尬了。
  •  租户隔离。可能有多个应用访问proxy代理的底层数据库,必然会对proxy自身的内存、网络、cpu等产生资源竞争,proxy需要需要具备隔离的能力。

单元化架构

单元化架构是对业务应用系统的彻底重构,应用系统被拆分成若干实例,配置独立的单体数据库,让每个实例管理一定范围的数据。例如对于外卖系统,可以为每个城市搭建独立的应用实例,管理各自的数据。当出现跨城市业务时,通过迁移用户信息进行下单。

优点

  • 灵活扩展。单元化架构通过统一的切分规则,将应用层和数据层进行立体拆分,无论是弹性扩缩容场景,还是多地多中心场景,都可以根据数据中心容量自由划分逻辑“切片”的多少。
  • 网络耗时低,链路稳定性高。单元化架构通过“单元”,将逻辑调用和数据访问在“单元”内形成闭环,只有少数特定场景的调用会跨单元访问,这样几乎大部分的请求在地域内就可以返回,极大程度地减少了访问耗时,避免了跨异地访问链路拥堵造成的服务夯死,提高了链路稳定性。重要的是单元带来的显著的故障隔离效果,链路的可观测性方面也得到了明显改善,即从链路访问层面屏蔽了跨地域访问所带来的上述问题。

缺点

  • 复杂的调度管理。首先需要确定一个统一的单元化规则中心,用于存储和下发单元化规则。实现方式可以是自身实现单元化规则服务,也可以借助注册配置中心,或者两者共存。单元化规则启用后很难再进行更改,所以在选择单元化切片的切分维度时需要慎重。
  • 改造成本高。单元化需要从全局视角思考基础设施改造,建设意味着现在或未来需要买更多的机器、建更多的机房、搭更多的框架平台做支撑,以及架构升级过程中带来的各种各样的问题,这就需要更多的钱、人、时间。
  • 风险高。单元化改造的参与者众多、落地时间周期长、业务影响面大,比如架构师需要重新做架构设计、研发人员需要针对单元化做适配开发、运维人员需要采购和部署、测试人员需要全量回归所有业务等等,其中某一环出现问题就可能造成延期或者埋下隐患。

总结

方式优点缺点
Proxy 模式1.多语言支持
2.对业务开发透明
1.实现复杂
2.Proxy 需要保证高可用
3.租户隔离需要考虑
Smart-client 模式1.实现简单,易于使用
2.天然去中心化
1.通常仅支持某一种语言
2.版本升级困难
单元化1.灵活扩展
3.网络耗时低,链路稳定性高
1.需要复杂的管理和调度
2.改造成本高
3.风险大

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/455956.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

42、WEB攻防——通用漏洞文件包含LFIRFI伪协议编码算法代码审计

文章目录 文件包含文件包含原理攻击思路文件包含分类 sessionPHP伪协议进行文件包含 文件包含 文件包含原理 文件包含其实就是引用&#xff0c;相当于C语言中的include <stdio.h>。文件包含漏洞常出现于php脚本中&#xff0c;当include($file)中的$file变量用户可控&am…

【Docker】了解Docker Desktop桌面应用程序,TA是如何管理和运行Docker容器(2)

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Docker容器》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对…

Galaxy生信云平台参考基因组简介

Galaxy生信云平台&#xff08;UseGalaxy.CN&#xff09;目前支持以下参考基因组&#xff1a; Arabidopsis (Arabidopsis thaliana): TAIR10Human (Homo sapiens) (b37): hg19Human (Homo sapiens) (b38): hg38Mouse (Mus Musculus) (b38): mm10Wheat (Triticum aestivum) (Chin…

服务器和CDN推荐

简介 陆云Roovps是一家成立于2021年的主机服务商&#xff0c;主要业务是销售美国服务器、香港服务器及国外湖北十堰高防服务器&#xff0c;还有相关CDN产品。&#xff08; 地址&#xff1a;roovps&#xff09; 一、相关产品

IntelliScraper 更新 --可自定义最大输出和相似度 支持Html的内容相似度匹配

场景 之前我们在使用IntelliScraper 初代版本的时候&#xff0c;不少人和我反馈一个问题&#xff0c;那就是最大输出结果只有50个&#xff0c;而且还带有html内容&#xff0c;不支持自动化&#xff0c;我声明一下&#xff0c;自动化目前不会支持&#xff0c;以后也不会支持&am…

电商小程序02数据源设计

上一篇我们讲解了电商小程序的需求分析&#xff0c;分析了需要具备的功能并且绘制了系统原型。有了原型之后下一步的事情就是根据原型来设计数据源。 数据源就像盖房子打地基一样&#xff0c;地基打不好&#xff0c;楼可能就盖不高&#xff0c;盖起来要再想调整就比较困难。 …

【Mybatis】从0学习Mybatis(2)

前言 本篇文章是从0学习Mybatis的第一篇文章&#xff0c;由于篇幅太长CSDN会限流&#xff0c;因此我打算分开两期来写&#xff0c;这是第二期&#xff01;第一期在这儿&#xff1a;【Mybatis】从0学习Mybatis&#xff08;1&#xff09;-CSDN博客 1.什么是ResultMap结果映射&am…

从源代码到可执行文件

从源代码到可执行文件的转换是软件开发过程中的一个核心步骤。这个过程包括几个关键阶段&#xff1a;预处理—编译—汇编—链接。下面是这个过程的一个概览&#xff0c;以及每个阶段的作用。 预处理 (Preprocessing) 目的 处理源代码文件中的预处理指令。这些指令以 # 开头…

<.Net>使用visual Studio 2022在VB.net中新添自定义画图函数(优化版)

前言 这是基于我之前的一篇博文&#xff1a; 使用visual Studio 2019在VB.net中新添自定义画图函数 在此基础上&#xff0c;我优化了一下&#xff0c;改进了UI&#xff0c;添加了示例功能&#xff0c;即以画圆函数为基础&#xff0c;添加了走马灯功能。 先看一下最终效果&#…

《剑指offer》之左旋字符串

判断一个字符串是否为另外一个字符串旋转之后的字符串。 输入示例&#xff1a;输入字符串s1 和 s2, 并且会输入移动位数。 例如&#xff1a;给定 s1 AABCD 和 s2 BCDAA&#xff0c;返回1 给定s1abcd和s2ACBD&#xff0c;返回0. AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得…

Quicker读取浏览器的书签(包括firefox火狐)

从edge换了火狐&#xff0c;但是quicker不能读取本地的bookmarks文件了&#xff0c;就研究了一下。 方法1&#xff1a;读取本地Bookmarks文件&#xff08;仅谷歌内核浏览器&#xff09; 谷歌内核的浏览器本地会有Bookmarks文件&#xff0c;放了所有的书签数据&#xff0c;直接…

nba2k24 周琦面补

nba2k24 周琦面补 nba2k23-nba2k24通用 周琦面补 下载地址&#xff1a; https://www.changyouzuhao.cn/9649.html