首页 > 数据库 >数据库系列: 主流分库分表中间件介绍(图文总结)

数据库系列: 主流分库分表中间件介绍(图文总结)

时间:2024-08-02 09:17:52浏览次数:11  
标签:分库 系列 数据库 中间件 MySQL 分表

相关文章

数据库系列:MySQL慢查询分析和性能优化
数据库系列:MySQL索引优化总结(综合版)
数据库系列:高并发下的数据字段变更
数据库系列:覆盖索引和规避回表
数据库系列:数据库高可用及无损扩容
数据库系列:使用高区分度索引列提升性能
数据库系列:前缀索引和索引长度的取舍
数据库系列:MySQL引擎MyISAM和InnoDB的比较
数据库系列:InnoDB下实现高并发控制
数据库系列:事务的4种隔离级别
数据库系列:RR和RC下,快照读的区别
数据库系列:MySQL InnoDB锁机制介绍
数据库系列:MySQL不同操作分别用什么锁?
数据库系列:业内主流MySQL数据中间件梳理
数据库系列:巨量数据表的分页性能问题

1 介绍

物理服务机的CPU、内存、存储设备、连接数等资源有限,某个时段大量连接同时执行操作,会导致数据库在处理上遇到性能瓶颈。为了解决这个问题,行业先驱门充分发扬了分而治之的思想,对大库表进行分割,
然后实施更好的控制和管理,同时使用多台机器的CPU、内存、存储,提供更好的性能。而分治有两种实现方式:垂直拆分和水平拆分。

  • 垂直拆分(Scale Up)分为垂直分库和垂直分表,主要按功能模块拆分,以解决各个库或者各个表之间的资源竞争。比如分为订单库、商品库、用户库...这种方式,多个数据库之间的表结构是不同的。
  • 水平拆分(Scale Out)又分为库内分表和分库分表,来解决单表中数据量增长出现的压力,这些数据库中的表结构完全相同。

详细可以参考笔者的这两篇文章:
MySQL全面瓦解28:分库分表
MySQL全面瓦解29:分库分表之Partition功能详解

2 常见主流中间件介绍

既然已经是实现了分库分表的方案,那么就需要有便捷的组件来支持管理.
分库分表中间件是数据库架构中用于解决高并发、大数据量等问题的关键组件。这些中间件通过数据分片、路由、负载均衡等功能,提高了数据库的性能和扩展性。以下是一些常见的分库分表中间件介绍:

2.1 ShardingSphere

概述

  • ShardingSphere是一款开源的分布式数据库中间件,提供了分库分表、读写分离、分布式事务等功能。
  • 它支持多种数据库,如MySQL、PostgreSQL、Oracle、SQL Server等,并且可以与现有的数据库系统无缝集成。

架构与原理

ShardingSphere由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar三个主要组件组成。

  • Sharding-JDBC:用于实现分库分表功能的模块,它可以在应用层通过简单的配置实现透明的分库分表操作。
  • Sharding-Proxy:用于实现数据库代理功能的模块,它可以将数据库请求路由到不同的数据库节点上,实现读写分离和负载均衡。
  • Sharding-Sidecar(规划中):定位为Kubernetes的云原生数据库代理,以Sidecar的形式代理所有对数据库的访问。

image

其原理是通过数据分片和路由来实现分库分表。数据分片是将数据划分为多个片段,每个片段存储在不同的数据库实例或数据表中;路由则是根据数据的分片规则将请求路由到对应的数据库实例或数据表上。

优势与适用场景

  • 灵活的扩展性:支持水平扩展和垂直扩展,可以根据业务需求灵活调整数据库的规模和性能。
  • 高可用性:支持主从复制和多活架构,提供高可用的数据库访问和数据保护。
  • 简化开发和维护:提供了简单易用的接口和配置,可以减少开发人员的工作量和维护成本。
  • 适用于高并发访问、大数据量存储、跨地域部署等场景。

2.2 MyCAT

概述

  • MyCAT是一个开源的分布式数据库中间件,基于Java编写,支持MySQL协议,可以作为MySQL的代理服务器使用。
  • 它支持分库分表、读写分离、全局序列号等功能,并且具有跨语言、跨平台、跨数据库的通用性。

架构与原理

  • MyCAT采用代理模式来实现数据库的路由和分片。
  • 它包括MyCAT-Server和MyCAT-DataNode两个主要部分。MyCAT-Server用于接收客户端的数据库请求,并将请求路由到不同的数据库节点上;MyCAT-DataNode则用于实际存储数据的数据库节点。

image

优势与适用场景

  • 易于部署和使用:对于项目来说是透明的,如果遇到升级之类的操作,只需要在中间件层面进行即可。
  • 适用于大规模MySQL集群的管理和扩展问题。
  • 但是,MyCAT的SQL支持相对较弱,可能需要对SQL语句进行一定的改写和优化。

2.3 Vitess

概述

  • Vitess是由YouTube开发的一个开源分布式数据库中间件,主要用于解决大规模MySQL集群的管理和扩展问题。

架构与原理

  • Vitess提供了数据分片、读写分离、水平扩展等功能,并且具有强大的负载均衡和故障恢复能力。
  • 它通过vtgate(Vitess的查询路由器)来实现对数据库的访问控制和负载均衡。

优势与适用场景

  • 适用于大规模MySQL集群的场景,具有强大的水平扩展和负载均衡功能。
  • 但是,Vitess对于非MySQL数据库的支持较弱,可能不适用于其他类型的数据库系统。

2.4 其他中间件介绍

除了上述三种常见的分库分表中间件外,还有其他一些中间件如Cobar(已逐渐被淘汰)、TDDL(淘宝分布式数据层)、Atlas(Qihoo 360开源)等。这些中间件在特定的历史时期或特定的业务场景下有一定的应用价值,但随着技术的发展和市场的变化,它们的使用范围和影响力逐渐减弱。

3 总结

在选择分库分表中间件时,需要根据具体的业务需求、技术栈、性能要求等因素进行综合考虑。ShardingSphere、MyCAT和Vitess是当前较为流行和成熟的中间件选择,它们各自具有不同的优势和适用场景。同时,也需要关注中间件的发展动态和社区支持情况,以便在后续的技术升级和维护中获得更好的支持。

标签:分库,系列,数据库,中间件,MySQL,分表
From: https://www.cnblogs.com/wzh2010/p/18031229

相关文章

  • 深入理解MyCAT分库分表机制:架构师的秘密武器
    一、MyCAT分库和分表的概念1.分库(DatabaseSharding)分库是将一个大数据库拆分成多个小数据库,以减小单个数据库的压力并提高系统的扩展性。每个子数据库可以分布在不同的服务器上,从而分散负载并提高性能。示例:假设我们有一个用户信息数据库users_db,其中包含了大量的用......
  • MyCAT数据库中间件:让你的数据库无缝扩展!
    什么是MyCATMyCAT是一个开源的数据库中间件系统,设计用于支持分布式数据库环境。它被广泛用于大数据和高并发的场景中,作为传统关系数据库(如MySQL)的扩展,以提高性能和扩展能力。MyCAT提供了数据库分片、读写分离、负载均衡、以及跨库的事务支持等功能。MyCAT的详细解释及其......
  • Web中间件漏洞提权
    Web中间件漏洞提权什么是Web中间件是一类提供系统软件和应用软件之间的连接,便于软件各部件之间的沟通的软件,应用软件可以借助中间件在不同的技术架构之间共享信息和资源。中间件位于客户机服务器的操作系统之上,管理着计算资源和网络通信。中间件=平台+通信一、IIS中间件1、IIS......
  • 【Linux应急响应—下 】一文解明Linux应急响应(hw蓝队兄弟看这里):主机资源异常如何排查?C
    Linux应急响应重要声明linux应急响应各项资源异常CPU排查内存网络带宽网络连接关闭进程Linux系统日志排查登入验证日志登入失败次数登入成功统计攻击者IP个数攻击次数排列,由高到低中间件日志nginxapachetomcat分析维度:上篇文章在此处:【Linux应急响应—上】一文......
  • MQTT协议与中间件
    发布订阅模式:消费者(客户端)订阅服务器(作为代理Broker)上的主题,当有生产者(客户端)在主题中发布消息时,消费者可以收到。MQTT:基于发布订阅模式的轻量级通讯协议,可以以极少的代码和有限带宽,为连接远程设备提供实时可靠的消息服务。广泛应用于物联网,小型设备。MQTT传输的消息分为两......
  • MiddlewareMixin--中间件类的便捷基类
    在Django中,MiddlewareMixin是一个用于创建中间件类的便捷基类。中间件是Django框架中的一种强大机制,允许在请求到达视图之前或响应返回客户端之前执行一些预处理或后处理任务。MiddlewareMixin类位于django.utils.deprecation模块中,它为编写中间件提供了一些标准方法和结......
  • 信创简报:2022年服务器国产化中间件替代品信息一览表(转)
    转载https://www.cnblogs.com/ios9/p/17695864.html#_label0*博客文章部分截图及内容来自于学习的书本及相应培训课程以及网络其他博客,仅做学习讨论之用,不做商业用途。*如有侵权,马上联系我,我立马删除对应链接。*@authorAlan*@[email protected]目录一、JDK/Open......
  • Redis 缓存中间件 缓存数据库
    Redis缓存中间件缓存数据库nginxweb服务PHP转发动态请求tomcatweb页面也可以转发动态请求springboot自带tomcat所有的数据库不支持高并发,一旦访问量激增,数据库很快就会崩溃。Redis非关系型数据库nosqlnotonlysql不仅仅是sql键值对形式:keyvalue数据的......
  • go高并发之路——消息中间件kafka(上)
    一般高并发的业务都是某个时间段的请求量特别大,比如本人负责的直播业务,基本上一天就两个高峰段:早上和晚上的特定时间段。其它的时间里,流量基本都比较平稳。那么面对流量高峰,我们可以采取哪些措施呢?常见的有服务器和DB提前扩容、监控告警(盯监控)、流量削峰、加缓存、网关限流、服务......
  • go-zero 自定义中间件的几种方式
    目录1.通过api文件生成并填入具体逻辑定义api生成对应的模板填充中间件逻辑2.在server启动前完成中间件的注册定义中间件:注册到server中首先go-zero已经为我们提供了很多的中间件的实现,但有时难免有需求需要自定义,这里介绍几种自定义的方法,供参考。1.通过api文件生......