目录
Agent
Db-Protocol
Dialect-Exception
Distribution
Features
Infra
JDBC
Kernel
Mode
Proxy
Agent
agent 模块提供了基于 Java Agent 实现的可观察框架
- logging: 用于记录 ShardingSphere 的日志,支持文件
- metricrs:用于收集和公开监控指标,支持 Prometheus
- tracing:用于获取 SQL 解析 和 SQL 执行的链接跟踪信息,支持 OpenTelemetry
Db-Protocol
负责数据库协议的解析和处理。它实现了多种数据库协议的解析器。通过解析客户端请求,db-protocol 模块能够识别出具体的 SQL 语句,参数信息,从而进行后续的路由、分片等操作。
- mysql:MySQL 协议解析器
- opengauss:OpenGauss 协议解析器
- postgresql:PostgreSQL协议解析器
Dialect-Exception
用于处理数据库方言相关的异常
在关系型数据库中,不同的数据库产品使用不同的 SQL 语法和特性。而 ShardingSphere 是一个数据库中间件,它需要能够支持多种不同的数据库产品,为了实现这种多数据库的兼容性,ShardingSphere提供了Dialect-Exception 模块。
Dialect-Exception 模块定义了一系列异常类,用于处理不同数据库方言的特定异常,这些异常类提供了对不同数据库特性的适配和处理机制。
Distribution
主要负责项目的整合和发布,该模块中的文件主要是一些配置和脚本文件,用于控制项目的构建和打包流程。
assembly 文件夹中包含了 assembly.xml 文件,它使用Apache Maven Assembly 插件来创建项目的可分发的归档文件。这个文件告诉 Maven 如何打包项目,包括要包含哪些文件,以及包含的文件应该放在归档文件的什么位置。
bin 文件夹包含了一些可执行的脚本文件,比如用于启动项目或测试的 Shell 或 Batch 脚本。
conf 文件夹包含了一些配置文件,比如项目的运行配置,数据库连接的配置等。
Features
features 模块提供了一系列的功能和扩展。
- encrypt:提供了数据加密功能,对敏感数据进行加密存储,以增加数据安全性
- mask:提供数据脱敏功能
- readwrite-splitting:提供读写分离功能
- shadow:提供影子库功能
- sharding:核心功能模块,提供了分片功能,用于将数据分散存储在不同的数据库中,并提供了相应的路由,分片策略,分布式事务等功能
Infra
公共基础设施模块,为其他模块提供一些共享的基础功能和工具类,它包含了以下几个主要的子模块。
- common:提供了一些通用的工具类和公共方法,用于其他模块的开发和使用。
- binder:提供了对象绑定的支持,用于将配置文件或其他类型的数据绑定到Java对象上。
- checker:提供了一些校验器,用于校验配置项的合法性和正确性。
- config:提供了一些配置对象的定义和解析器,用于解析配置文件并生成配置对象。
- context:提供了一些上下文对象,用于在模块之间传递信息和共享数据。
- database:提供了数据库连接和SQL执行的支持。
- exception:定义了一些异常类,用于处理和抛出异常
JDBC
用于实现关系型数据库的分库分表功能
Sharding - JDBC 主要实现数据库的分库分表,它通过解析应用程序的 SQL 语句,将其中的表名和条件就行解析和分析,然后根据预先配置的规则,将数据分散到不同的数据库和表中。
除了分库分表功能,ShardingSphere 的 JDBC 模块还提供了其他一些功能,如读写分离、分布式事务等。它可以根据配置的规则,自动将读操作路由到读库,将写操作路由到写库,从而实现数据库的负载均衡和性能优化。
Kernel
ShardingSphere 内核模块,实现了核心功能。
- Authority:提供了用户权限控制和认证功能。它可以与现有的认证授系统集成,实现对数据库访问权限的管理,并支持多种认证方式,如用户名和密码认证,LDAP 认证等
- Data-pipeline:用于数据清洗和转换。它可以将数据从不同的数据源中提取出来,进行清洗和加工,然后将数据写入目标数据源。这个模块可以用于数据迁移、数据同步等场景,支持多种数据源和数据格式。
- Global-clock:提供了全局时钟服务,在分布式系统中,各个节点的时钟可能存在差异,可能引发一些问题,如数据一致性、分布式事务等。Global-clock模块通过引入全局时钟,解决了这些问题,确保分布式系统的一致性和可靠性。
- Logging:提供了日志记录功能,用于记录系统运行过程中的各种操作和事件,方便故障排查和系统监控。
- Metadata:用于管理和存储数据库的元数据信息,包括表结构、索引、分片规则等。通过Metadata模块,ShardingSphere 可以动态获取和更新数据库的元数据,实现动态路由和数据分片。
- Single:提供了单库单表的支持,用于处理不需要分片的数据库操作。通过Single模块,可以直接操作单个数据库,而无需进行数据分片和路由。
- SQL-federation:实现了分布式SQL聚合功能,可以将多个数据库的结果聚合在一起返回,这个模块可以用于查询跨多个数据库的数据,提供了统一的查询接口。
- SQL-parser:用于解析 SQL 语句,将 SQL 语句解析成对应的语法树,方便后续的处理和执行。这个模块支持多种 SQL 方言,可以解析各种类型的 SQL 语句。
- SQL-translator:实现了 SQL 转换和重写功能,可以将 SQL 转换成特定的数据库 SQL 语句。通过这个模块,可以实现数据库的适配和兼容性。
- Time-service:提供了时间服务功能,用于处理与时间相关的操作和计算,这个模块可以提供统一的时间接口,解决分布式系统中时间一致性的问题。
- Traffic:用于流量控制和负载均衡,可以根据实际情况对请求进行调度和限流,确保系统的高可用和性能。
- Transaction:提供了分布式事务的支持,可以确保多个数据库之间的事务一致性,这个模块可以实现分布式事务的提交、回滚和恢复等功能。
Mode
模式模块,该模块定义了 ShardingSphere 的运行模式,包括 Cluster 和 Standalone。
- shardingsphere-cluster-mode:ShardingSphere 可以通过集群部署来提高高可用性和负载均衡的支持。
- shardingsphere-standalone-mode:在单机模式下,ShardingSphere 作为一个独立的数据库中间件,在单个节点上运行,提供分片功能。这种模式适用于小规模的应用,无需分布式部署和高可用性支持。
Proxy
用于提供数据库代理功能,它的作用是在应用程序和数据库之间充当一个中间层,接收来自应用程序的数据库请求,并根据配置进行相应的处理和路由
- Backend:负责与数据库实例进行通信,处理来自前端的数据库操作请求,并将请求转发给相应的数据库实例进行执行。它负责与后端数据库进行连接,执行 SQL 语句,事务管理等操作。
- Bootstrap:ShardingSphere-proxy的启动模块,负责加载配置信息,初始化各个子模块以及启动代理服务器。它负责初始化整个代理的运行环境,并协调各个子模块的工作。
- Frontend:Frontend子模块是与应用程序进行交互的接口,接收来自应用程序的数据库请求,并将请求转发给 backend 模块进行处理。它负责与应用程序进行通信,解析和处理应用程序的 SQL 语句,并将处理结果返回给应用程序。