大家好,我是mikechen。
Java面试经常问到数据库中间件,比如:数据库中间件有哪些?下面我就重点来详解6大数据库中间件@mikechen
本篇已经收纳于mikechen创作的《阿里架构师进阶专题合集》里面。
数据库中间件定义数据库中间件作为应用程序和数据库之间的代理,充当一个缓冲层,使得应用程序可以通过中间件来访问数据库,而不必直接与数据库通信。
为什么需要数据库中间件传统的架构模式就是 应用连接数据库直接对数据进行访问,这种架构特点就是简单方便。
但是随着目前数据量不断的增大我们就遇到了问题:
- 单个表数据量太大、单个库数据量太大;
- 单台数据量服务器压力很大;
- 读写速度遇到瓶颈;
当面临以上问题时,我们会想到不断增加硬件性能,这种方式只能暂时解决问题,当业务量不断增长时还是解决不了问题。
特别是淘宝,facebook,youtube这种业务成线性,甚至指数级上升的情况。
此时除了增加应用服务器外,还会涉及到数据库的垂直以及分库分表,数据库读写分离等,这个时候就需要用到数据库中间件。
数据库中间件作用数据库中间件可以简化对读写分离以及分库分表的操作,并隐藏底层实现细节,可以像操作单库单表那样操作多库多表。
数据库中间件分类常见的数据库中间件如下,主要包含如下6类数据库中间件:
1.MyCatMyCat是开源社区在阿里cobar基础上进行二次开发,解决了cobar存在的问题,并且加入了许多新的功能在其中。
MyCat是基于MySQL协议开发的,可以将多个MySQL数据库服务器组合成一个逻辑数据库,从而实现数据分片、负载均衡、读写分离、故障切换等功能。
以下是MyCat的一些主要特点:
- 数据分片:MyCat支持将数据分成多个分片,并将它们分布在多个MySQL数据库服务器上。
- 读写分离:MyCat可以将读请求路由到只读节点,从而减轻主节点的负载。
- 负载均衡:MyCat可以将查询和更新请求分配到不同的MySQL服务器上,以达到负载均衡的目的。
- 自动故障转移:当一个MySQL服务器故障时,MyCat可以自动将连接转移到另一个可用的MySQL服务器上,从而保持服务的可用性。
- 支持SQL解析和路由:MyCat可以解析和优化SQL语句,从而提高查询性能。
MySQL-Proxy是一种开源的MySQL代理服务器,可以用于在客户端和MySQL服务器之间进行拦截和操作。
实现如下功能:
- 负载均衡:可以将MySQL连接分配到多个MySQL服务器中,以达到负载均衡的目的。
- 高可用性:当一个MySQL服务器故障时,可以自动将连接切换到另一个可用的MySQL服务器上,从而保持服务的可用性。
- 数据过滤和重写:可以动态地修改MySQL请求和响应,例如将SQL语句中的某些关键字替换为其他值,或者过滤掉某些敏感数据。
- 监控和日志记录:可以记录MySQL的请求和响应,并提供实时的统计信息和日志记录功能。
阿里DRDS是一种云原生的关系型数据库中间件,由阿里巴巴集团开发和维护。
DRDS是阿里巴巴致力于解决单机数据库服务瓶颈问题,而自主研发推出的分布式数据库产品。
DRDS的前身是淘宝根据自己的业务特点开发了TDDL,全称是Taobao Distributed Data Layer 框架,主要解决了分库分表对应用的透明化以及异构数据库之间的数据复制。
以下是DRDS的一些主要特点:
- 数据分片:DRDS支持将数据分成多个分片,并将它们分布在多个MySQL数据库服务器上
- DRDS 高度兼容 MySQL 协议和语法;
- 支持自动化水平拆分、在线平滑扩缩容、弹性扩展;
- 透明读写分离:DRDS可以将读请求路由到只读节点,从而减轻主节点的负载;
- 具备数据库全生命周期运维管控能力;
Atlas是360团队基于mysql proxy 把lua用C改写的版本,是一个基于MySQL协议的数据中间层项目。
Atlas它能够对数据库进行读写分离、分库分表配置,配合MHA架构进行高可用环境搭建有较好的效果。
5.ZebraZebra 是美团点评开发的数据库访问层中间件,它的设计目标是提供高性能、高可用性和易于管理的关系型数据库解决方案。
具有以下的功能点:
- 配置集中管理,动态刷新;
- 支持读写分离、分库分表;
- 丰富的监控信息在CAT上展现;
- 异步化数据库请求,多数据源支持;
Apache ShardingSphere 是一套开源的分布式数据库中间件,它由 JDBC、Proxy 和 Sidecar这 3 款相互独立,却又能够混合部署配合使用的产品组成。
分库分表是所有ShardingSphere产品中最为经典、成熟,也是使用最多的功能。
ShardingSphere它支持多种数据库,包括MySQL、Oracle、DB2、PostgreSQL和SQLServer等。
以上就是数据库中间件的详解,希望对你掌握数据库中间件有所帮助。
本篇已经收纳于mikechen创作的《阿里架构师进阶专题合集》里面。