数据库中间件介绍

文章目录

  • 什么是数据库中间件?
  • Smart-client 模式
    • 优点
    • 缺点
  • Proxy 模式
    • 优点
    • 缺点
  • 单元化架构
    • 优点
    • 缺点
  • 总结

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

什么是数据库中间件?

数据库中间件是一种介于数据库系统和应用程序之间的软件层。它充当了一个抽象层,屏蔽了底层数据库的细节,为应用程序提供了更简化的接口。数据库中间件的主要目标是提供更高的性能、可用性、可扩展性,并简化数据库管理。
典型的数据库中间件设计方案有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.灵活扩展
2.网络耗时低,链路稳定性高
1.需要复杂的管理和调度
2.改造成本高3.风险大

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

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

相关文章

基于阿里云物联网平台,我们这样实现简易出入监控

本文通过一个简单实例,主要介绍了如何使用树莓派快速接入阿里云iot platform,并实现了一个简易的监控人员出入并拍照上送钉钉群的场景 场景 在公司大门入口处布点树莓派和红外感应,实现出入口人员出入时,自动拍照并上送钉钉群机器…

RabbitMQ消息流转图

生产者生产消息,发送到MQ的交换机(exchange)上,交换机可以绑定多个队列(Message Queue)。这个图中有3个队列,只有一个队列收到了消息,这是因为咱们的交换机是有路由策略的,这个路由就是Routerke…

结合实际场景谈一谈微服务配置

作为 Nacos 5W1H 的系列文章,本文将围绕“Where”,讲述 Nacos 配置管理的三个典型的应用场景: 数据库连接信息限流阈值和降级开关流量的动态调度上一篇:Nacos帮我解决了什么问题? 数据库连接信息 曾经有朋友跟我聊过…

哈工大人工智能研究院院长刘劼:AIoT 核心在“智”不在“联”,需云边端协同...

受访者 | 刘劼采访者 | 伍杏玲出品 | CSDN(ID:CSDNnews)物联网是继计算机、互联网和移动通信之后的又一次信息产业的革命性发展。近几年来,物联网发展迅速:据研究机构IDC公司预测,到2020年,物联…

RabbitMQ 管控台配置导入导出和重要性

背景:rabbitmq100个节点,做迁移,现在linux6环境,想升级到linux7版本,然后把rabbitmq部署到linux7版本上 怎么去做呢? 不可能把rabbitmq重新构建好,再把对应的交换机、绑定、配置重新设置一遍&am…

使用Spring整合Quartz轻松完成定时任务

文章目录1. 必不可少jar包依赖2. 编写任务调度类013. 编写任务调度类024. quartz配置文件5. 测试service6. 效果图开发环境版本jdk1.8Maven3.6.1springSpring 4.2.6.RELEASEIdea2019 1. 必不可少jar包依赖 <dependency><groupId>org.springframework</groupId&g…

太真实了:程序员等级图鉴

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 肥又君责编&#xff5c;阿秃程序员是一个非常神奇的工种&#xff0c;他们对技术有特殊的崇拜&#xff0c;有着严格的等级划分&#xff0c;不同级别的程序员有什么不同之处呢&#xff1f;Let us 瞅瞅 &#xff5e;日常工作日常…

windows故障转移群集和mysql_Windows 2016 无域故障转移群集部署方法 超详细图文教程...

故障转移群集是一个很实用的功能,而windows在2016版本开始,终于支持不用域做故障转移群集.在群集中,我们可以设定一个"群集IP"而客户端只需要根据这个"群集IP"就能连接当前群集的主服务器.而不必关心群集服务器之间的替换.而更棒的是,它是"去中心&quo…

Dubbo下一站:Apache顶级项目

近日&#xff0c;在Apache Dubbo开发者沙龙杭州站的活动中&#xff0c;阿里巴巴中间件技术专家曹胜利(展图)向开发者们分享了Dubbo2.7版本的规划。 本文将为你探秘 Dubbo 2.7背后的思考和实现方式。 Dubbo 2.7 将围绕 异步支持优化、元数据改造&#xff0c;引入JDK8的特性、Net…

Java 中判断连接Oracle数据库连接成功

import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class Application {public static Connection getConnection() {Connection conn null;try { //连接driver为&#xff1a;oracle.jdbc.driver.OracleDriver//或者oracle…

从内部自用到对外服务,配置管理的演进和设计优化实践

本文整理自阿里巴巴中间件技术专家彦林在中国开源年会上的分享&#xff0c;通过此文&#xff0c;您将了解到&#xff1a; 微服务给配置管理所带来的变化配置管理演进过程中的设计思考配置管理开源后的新探索配置中心控制台设计实践“为什么相对于传统的软件开发模式&#xff0…

12 种主流编程语言输出“ Hello World ”,把我给难住了!

作为一名程序员&#xff0c;在初步学习编程想必都绕不开一个最为基础的入门级示例“Hello World”&#xff0c;那么&#xff0c;你真的了解各个语言“Hello World”的正确写法吗&#xff1f;在我们刚开始打开编程世界的时候&#xff0c;往往写的第一个程序都是简单的文本输出&a…

优秀工程师必备的三大思维,你拥有哪些?

不同岗位、不同职责的技术人对工程师思维的深度要求是不一样的&#xff0c;但从多维度去思考却应是每个技术人都应该具备的素养。本文整理自阿里巴巴高级技术专家至简在团队内部的个人分享&#xff0c;希望通过对工程师思维的分析和解读&#xff0c;让大家能正确对待那些在现实…

看完这篇还不了解Nginx,那我就哭了!

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 蔷薇Nina责编 | 阿秃想必大家一定听说过 Nginx&#xff0c;若没听说过它&#xff0c;那么一定听过它的"同行"Apache 吧&#xff01;Nginx 的产生Nginx 同 Apache 一样都是一种 Web 服务器。基于 REST 架构风格&…

迁移学习NLP:BERT、ELMo等直观图解

2018年是自然语言处理的转折点&#xff0c;能捕捉潜在意义和关系的方式表达单词和句子的概念性理解正在迅速发展。此外&#xff0c;NLP社区已经出现了非常强大的组件&#xff0c;你可以在自己的模型和管道中自由下载和使用&#xff08;它被称为NLP的ImageNet时刻&#xff09;。…

开发函数计算的正确姿势 —— 爬虫

在 《函数计算本地运行与调试 - Fun Local 基本用法》 中&#xff0c;我们介绍了利用 Fun Local 本地运行、调试函数的方法。但如果仅仅这样简单的介绍&#xff0c;并不能展现 Fun Local 对函数计算开发的巨大效率的提升。 这一次&#xff0c;我们拿一个简单的场景来举例子——…

SonarQube 规则的挂起与激活

文章目录规则添加规则挂起规则添加 规则挂起

内存性能的正确解读

一台服务器&#xff0c;不管是物理机还是虚拟机&#xff0c;必不可少的就是内存&#xff0c;内存的性能又是如何来衡量呢。 1. 内存与缓存 现在比较新的CPU一般都有三级缓存&#xff0c;L1 Cache&#xff08;32KB-256KB&#xff09;&#xff0c;L2 Cache&#xff08;128KB-2M…

2019年技术盘点云数据库篇(一):UCloud专家谈云数据库:千锤百炼 云之重器

作者 | 刘丹 出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09; 公有云逐渐成为企业运行 IT 设施的新趋势&#xff0c;那么作为企业最核心的系统—数据库&#xff0c;数据上云也成为大数据时代的必然选择。对企业来说&#xff0c;数据可视为其命脉&#xff0…