返回顶部
首页 > 资讯 > 数据库 >数据库中间件漫谈
  • 881
分享到

数据库中间件漫谈

数据库中间件漫谈 2022-03-23 11:03:21 881人浏览 绘本
摘要

1.前言 随着业务的发展,Mysql数据库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作的开销也会越来越大;另外,无论怎样升级硬件资源,单台服务器的资源(CPU、磁盘、内存、网络io、事务数、连接数)总是有限的,最终数据库

数据库中间件漫谈

1.前言

随着业务的发展,Mysql数据库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作的开销也会越来越大;另外,无论怎样升级硬件资源,单台服务器的资源(CPU、磁盘、内存、网络io事务数、连接数)总是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。

分表、分库和读写分离可以有效地减小单台数据库的压力。

本文主要针对业界主流的数据库中间件的实现、功能、成本等方面进行对比,总结数据库中间件的实现方式,并展望未来的可能发展。

2. 实现方式

一般来说,对于数据库中间件,可以在以下六个层次做切入。

 

数据库中间件漫谈

 

2.1 代码层

在同一个项目中创建多个数据源,采用if else的方式,直接根据条件在代码中路由。

spring中有动态切换数据源的抽象类,具体参见AbstractRoutingDataSource。

如果项目不是很庞大,使用这种方式能够快速的进行分库。但缺点也是显而易见的,这种海量的代码侵入是绝不能被接受的。

而且当查询结果返回时,需要对跨库、聚合等查询结果进行归并,开发工作量非常巨大。

这种方式了解一下即可,一般不会去使用。

2.2 框架

主要是修改或增强现有ORM框架的功能,在sql中增加一些自定义原语或者hint来实现。

常见的比如实现一些拦截器(比如mybatis的Interceptor接口),增加一些自定义解析来控制数据的流向,效果虽然较好,但会改变一些现有的编程经验。

这种情况适合公司ORM框架统一的情况,但在很多情况下不太现实。

而且大部分情况下要修改框架源码,因此,也不推荐。

2.3 驱动层

无论是从代码层还是框架层做处理,都是高侵入、难维护的。

因此,常见的数据库中间件,至少需要从驱动层开始,我们可以理解为一个smart-client。

什么意思是smart-client呢?

通常smart-client是在连接池或者driver的基础上进行了一层封装。

这个smart-client内部可以与不同的数据库建立连接。

服务需要查询的sql,就交给smart-client进行解析、优化,然后发送给具体的数据库进行操作。

例如在读写分离情况下,smart-client会选择sql走从库还是主库;在分库分表的情况下,进行sql解析、sql改写等操作,然后路由到不同的分库,将得到的结果进行合并,返回给应用。

 

数据库中间件漫谈

 

我们熟知的TDDL、Sharding-JDBC等,都是在此层切入。

优点:

1 实现方便,业务无入侵。smart-client不需要实现客户端通信协议,只需要在数据数据库厂商提供的不同语言的数据库驱动上做封装即可。例如mysql针对java语言提供了mysql-connector-java驱动,针对python提供了mysql-connector-Python驱动。

2 天然去中心化。smart-client以sdk的方式被应用引入,然后部署到不同的服务节点上,不需要有代理层proxy。因此相较于代理方式而言,不需要考虑高可用的问题。只要应用的节点没有全部宕机,就可以访问数据库。(这里的高可用是相比代理层proxy而言,数据库本身的高可用还是需要保证的)

缺点:

1 通常仅支持某一种语言。例如tddl、zebra、sharding-jdbc都是使用java语言开发,因此对于使用其他语言的用户,就无法使用这些中间件。如果其他语言要使用,那么就要开发多语言客户端。

2 版本升级困难。因为应用使用数据源代理就是引入一个jar包的依赖,在有多个应用都对某个版本的jar包产生依赖时,一旦这个版本有bug,所有的应用都需要升级。而数据库代理升级则相对容易,因为服务是单独部署的,只要升级这个代理服务器,所有连接到这个代理的应用自然也就相当于都升级了。

3 去中心化的缺点,比如无法做全局的sql限流

2.4 代理层

在应用中,我们通过一个普通的数据源(c3p0、druid、dbcp等)与代理服务器建立连接,所有的sql操作语句都是发送给这个代理,由这个代理去操作底层数据库,得到结果并返回给应用。在这种方案下,分库分表和读写分离的逻辑对开发人员是完全透明的。

数据库中间件漫谈

 

像MySQL Router、MyCat、ShardingSphere(proxy模式)等,都是在此层切入。

优点:

1 多语言支持。也就是说,不论你用的PHP、java或是其他语言,都可以支持。以mysql数据库为例,如果proxy本身实现了mysql的通信协议,那么你可以就将其看成一个mysql 服务器,因此不同语言的开发者都可以使用mysql官方提供的对应的驱动来与这个代理服务器建通信。

2 对业务开发同学透明。由于可以把proxy当成mysql服务器,理论上业务同学不需要进行太多代码改造,既可以完成接入。

缺点:

1 实现复杂。因为proxy需要实现被代理的数据库server端的通信协议,实现难度较大。

2 proxy本身需要保证高可用。由于应用本来是直接访问数据库,现在改成了访问proxy,意味着proxy必须保证高可用。否则,数据库没有宕机,proxy挂了,导致数据库无法正常访问,就尴尬了。

3 租户隔离。可能有多个应用访问proxy代理的底层数据库,必然会对proxy自身的内存、网络、cpu等产生资源竞争,proxy需要需要具备隔离的能力。

2.5 Sidecar

Sharding-Sidecar是ShardingSphere的第三个产品,目前仍然在规划中。 定位为kubernetes或Mesos的云原生数据库代理,以DaemonSet的形式代理所有对数据库的访问。

通过无中心、零侵入的方案提供与数据库交互的的啮合层,即Database Mesh,又可称数据网格。 Database Mesh的关注重点在于如何将分布式的数据访问应用与数据库有机串联起来,它更加关注的是交互,是将杂乱无章的应用与数据库之间的交互有效的梳理。使用Database Mesh,访问数据库的应用和数据库终将形成一个巨大的网格体系,应用和数据库只需在网格体系中对号入座即可,它们都是被啮合层所治理的对象。

数据库中间件漫谈

 

优点:

分布式云原生的数据库中间件模式,集成了jdbc和proxy各自的优点,能满足高可用、跨语言、无感知升级等多种优势特性

缺点:

需要整体架构支持云原生体系

目前还没正式上线。

2.6 存储层

这个层次实际上不应该叫数据库中间件了,需要更换存储。

比如Aurora、polardb、tidb等分布式数据库,通过计算节点和存储节点分离,计算节点scale up,存储节点scale out的理念将公有云的关系数据库产品推向了一个新的高度。

这样一来,实际上已经不再需要传统的数据库中间件了,一切问题天然就不存在了。

3. 功能对比

从上文可以了解到,目前最主流的数据库中间件主要是从驱动层smart-client和代理层proxy切入的。

下面,我们来了解下业界主流的中间件产品在这两个层次的站队情况与实现的功能对比。

 

数据库中间件漫谈

 

其他还有比如:

Atlas、Kingshard、DBProxy、mysql router、MaxScale、58 Oceanus、ArkProxy、Ctrip DAL、Tsharding、Youtube vitess、网易DDB、Heisenberg、proxysql、ManGo、DDAL、Datahekr、MTAtlas、

我们可以看到,基本各个大厂都撸过一遍自己的中间件产品。不过目前开源而且比较火的已经不多了,主要还是以shardingsphere为主。

我们从功能维度,来对比一下几个产品。

 

数据库中间件漫谈

 

4. 展望

从上文的分析可以看出,尽管目前主流的数据库中间件还是在smart-client和proxy两个层面进行处理的,但是,已经能看到未来的方向了。云原生的到来,估计会做进一步的降维打击。

一方面是作为sidecar的模式,可能会有一个新的阶段,比如shardingsphere推出sidecar模式后。

而另一方面,云数据库通过全新的计算存储分离的架构方式,打破传统关系型数据库的性能瓶颈,传统数据库中间件将不再需要关注,一切都将以数据库基础设施的形式提供给使用者。

 

看到这里了,原创不易,点个关注、点个赞吧,你最好看了~

知识碎片重新梳理,构建Java知识图谱:https://GitHub.com/saigu/JavaKnowledgeGraph(历史文章查阅非常方便)

扫码关注我的公众号“阿丸笔记”,第一时间获取最新更新。同时可以免费获取海量Java技术栈电子书、各个大厂面试题

阿丸笔记

您可能感兴趣的文档:

--结束END--

本文标题: 数据库中间件漫谈

本文链接: https://lsjlt.com/news/4997.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 数据库中间件漫谈
    1.前言 随着业务的发展,MySQL数据库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作的开销也会越来越大;另外,无论怎样升级硬件资源,单台服务器的资源(CPU、磁盘、内存、网络IO、事务数、连接数)总是有限的,最终数据库...
    99+
    2022-03-23
    数据库中间件漫谈
  • 数据库中间件__mycat
    摘要:MyCat截至到2015年4月,保守估计已经有超过60个项目在使用,主要应用在电信领域、互联网项目,大部分是交易和管理系统,少量是信息系统。比较大的系统中,数据规模单表单月30亿。本文带你全面了解My...
    99+
    2024-04-02
  • 数据库查询优化漫谈:打破神话,拥抱现实
    神话 1:索引始终提高性能 现实:索引实际上可以降低某些查询的性能。当表上有多个索引时,数据库必须决定使用哪个索引。如果索引选择不当,查询可能会执行得更慢。 神话 2:查询越简单越好 现实:并非总是如此。对于某些查询,使用更复杂的查询计划...
    99+
    2024-04-02
  • 数据库中间件详解
    导读:本文详细介绍了中间件,主要从数据库拆分过程及挑战、主流数据库中间件设计方案、读写分离核心要点、分库分表核心要点展开说明。  1. 数据库拆分过程及挑战 互联网当下的数据库拆分过程...
    99+
    2024-04-02
  • 大数据环境下互联网行业数据仓库/数据平台的架构之漫谈
    导读:整体架构数据采集数据存储与分析数据共享数据应用实时计算任务调度与监控元数据管理总结一直想整理一下这块内容,既然是漫谈,就想起什么说什么吧。我一直是在互联网行业,就以互联网行业来说。先大概列一下互联网行业数据仓库、数据平台的用途:整合公...
    99+
    2023-06-05
  • 【MySQL】数据库中间件--ProxySQL+MGR
    [root@wallet01 ~]# mysql -uroot -p < addition_to_sys.sql  Enter password: [root@wallet01 ~]# mysql ...
    99+
    2024-04-02
  • 谈谈数据库sql编写
    本文主要给初学者关于关系数库的一个浮光掠影式的介绍,如果想深入理解,必须对于下文提到的每个内容单独深入学习!   it-information technology的简称,中文是信息机技术,信息其实就是数据。 要处理数据,则至少涉及到几个方...
    99+
    2017-10-03
    谈谈数据库sql编写
  • redis是数据库还是中间件
    redis既是数据库又是中间件,可用于数据持久化、数据结构存储、高速缓存、消息传递和会话管理。 Redis是数据库还是中间件 Redis即Redis Database Server,它...
    99+
    2024-04-19
    redis 数据丢失
  • 浅谈PostgreSQL数据库
    近期工作重点一直放在数据库设计方面,借助这次机会抽时间整理了一些我对PostgreSQL数据库的理解,同时也是对近段时间学习的一个总结。对于很多人而言或许没有听说过这个数据库,通常我们耳边伴随的都是Orac...
    99+
    2024-04-02
  • 数据库中间件——MyCat部署安装
    关于mycat的链接:Mycat官网Mycat下载链接Mycat官方文档,百度网盘官方文档下载链接,提取码:f9nq。Mycat简略文档 可以在开始之前,阅读Mycat简略文档,对其有个大概了解。 注:My...
    99+
    2024-04-02
  • postgresql数据库中间件怎么查看
    在PostgreSQL数据库中,可以通过以下几种方法来查看中间件的相关信息: 查询pg_stat_activity视图:这个视图可...
    99+
    2024-04-08
    postgresql
  • 浅谈android中数据库的拷贝
    SQLiteDatabase不支持直接从assets读取文件,所以要提前拷贝数据库。在读取数据库时,先在项目中建立assets文件夹用于存放外部文件,将数据库文件拷到该目录下。...
    99+
    2022-06-06
    数据 拷贝 数据库 Android
  • 浅谈数据库约束
    国有国法 家有家规其实很多时候技术和生活息息相关,怎样的需求就会有出来解决方案数据库也是那么一个神奇的东西,毕竟是关系型数据库,数据独立而又可以表表关联,有时候就需要约束,在某些时候要规规矩矩做人做事,才能...
    99+
    2024-04-02
  • 12C数据库Goldengate同步异构数据库Kafka中间件之二
    前两天测试环境的需求将上线生产环境,需求还是a. 数据源:SSP库 ssp.m_system_user,Oracle DB 12.1.0.2.0,Ogg Version 12.2.0.1.1 OGGCORE...
    99+
    2024-04-02
  • 数据库中间件分片算法之hash
    前言 夜深人静的时候,打开云音乐,点上一曲攀登,带上真无线蓝牙耳机,瞬间燃到爆,键盘打字如飞倦意全无。 分片规则 这几天有人问我,dble和MyCat到底有什么不同。其实dble作为MyCAT的同门,吸收了MyCat的精华,同时也...
    99+
    2015-11-27
    数据库中间件分片算法之hash
  • 数据库中间件MyCat的示例分析
    这篇文章主要为大家展示了“数据库中间件MyCat的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“数据库中间件MyCat的示例分析”这篇文章吧。1、Myc...
    99+
    2024-04-02
  • 为什么要引入数据库中间件
    为什么要引入数据库中间件,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。不少朋友经常会问我以下问题:58到家有没有使用数据库中间件使用了什么...
    99+
    2024-04-02
  • Java数据库读写分离中的数据库中间件DBProxy是怎样的
    Java数据库读写分离中的数据库中间件DBProxy是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。前言碎语好久没更博了,今天引用美团技术团队的一篇文章来...
    99+
    2023-06-17
  • 数据库中数据计算中间件技术的示例分析
    这篇文章主要介绍了数据库中数据计算中间件技术的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。传统企业大数据架构的问题上图是大家都很熟...
    99+
    2024-04-02
  • 浅谈数据库--事务(mysql)
    事务  事务其实是一组对数据库增删改操作的组合,可以这样来理解,当你往某个人身上打1000元的时候,在数据库中会发生两个改变,一个是你的钱减少了,另一个是那个人的钱增加了,这两个操作必须同时满足,...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作