ShardingSphere 源码模块介绍

news2024/11/17 3:00:44

目录

Agent

Db-Protocol

Dialect-Exception

Distribution

Features

Infra

JDBC

Kernel

Mode

Proxy


Agent

agent 模块提供了基于 Java Agent 实现的可观察框架

  1. logging: 用于记录 ShardingSphere 的日志,支持文件
  2. metricrs:用于收集和公开监控指标,支持 Prometheus
  3. tracing:用于获取 SQL 解析 和 SQL 执行的链接跟踪信息,支持 OpenTelemetry

Db-Protocol

负责数据库协议的解析和处理。它实现了多种数据库协议的解析器。通过解析客户端请求,db-protocol 模块能够识别出具体的 SQL 语句,参数信息,从而进行后续的路由、分片等操作。

  1. mysql:MySQL 协议解析器
  2. opengauss:OpenGauss 协议解析器
  3. 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 模块提供了一系列的功能和扩展。

  1. encrypt:提供了数据加密功能,对敏感数据进行加密存储,以增加数据安全性
  2. mask:提供数据脱敏功能
  3. readwrite-splitting:提供读写分离功能
  4. shadow:提供影子库功能
  5. sharding:核心功能模块,提供了分片功能,用于将数据分散存储在不同的数据库中,并提供了相应的路由,分片策略,分布式事务等功能

Infra

公共基础设施模块,为其他模块提供一些共享的基础功能和工具类,它包含了以下几个主要的子模块。

  1. common:提供了一些通用的工具类和公共方法,用于其他模块的开发和使用。
  2. binder:提供了对象绑定的支持,用于将配置文件或其他类型的数据绑定到Java对象上。
  3. checker:提供了一些校验器,用于校验配置项的合法性和正确性。
  4. config:提供了一些配置对象的定义和解析器,用于解析配置文件并生成配置对象。
  5. context:提供了一些上下文对象,用于在模块之间传递信息和共享数据。
  6. database:提供了数据库连接和SQL执行的支持。
  7. exception:定义了一些异常类,用于处理和抛出异常

JDBC

用于实现关系型数据库的分库分表功能

Sharding - JDBC 主要实现数据库的分库分表,它通过解析应用程序的 SQL 语句,将其中的表名和条件就行解析和分析,然后根据预先配置的规则,将数据分散到不同的数据库和表中。

除了分库分表功能,ShardingSphere 的 JDBC 模块还提供了其他一些功能,如读写分离、分布式事务等。它可以根据配置的规则,自动将读操作路由到读库,将写操作路由到写库,从而实现数据库的负载均衡和性能优化。

Kernel

ShardingSphere 内核模块,实现了核心功能。

  1. Authority:提供了用户权限控制和认证功能。它可以与现有的认证授系统集成,实现对数据库访问权限的管理,并支持多种认证方式,如用户名和密码认证,LDAP 认证等
  2. Data-pipeline:用于数据清洗和转换。它可以将数据从不同的数据源中提取出来,进行清洗和加工,然后将数据写入目标数据源。这个模块可以用于数据迁移、数据同步等场景,支持多种数据源和数据格式。
  3. Global-clock:提供了全局时钟服务,在分布式系统中,各个节点的时钟可能存在差异,可能引发一些问题,如数据一致性、分布式事务等。Global-clock模块通过引入全局时钟,解决了这些问题,确保分布式系统的一致性和可靠性。
  4. Logging:提供了日志记录功能,用于记录系统运行过程中的各种操作和事件,方便故障排查和系统监控。
  5. Metadata:用于管理和存储数据库的元数据信息,包括表结构、索引、分片规则等。通过Metadata模块,ShardingSphere 可以动态获取和更新数据库的元数据,实现动态路由和数据分片。
  6. Single:提供了单库单表的支持,用于处理不需要分片的数据库操作。通过Single模块,可以直接操作单个数据库,而无需进行数据分片和路由。
  7. SQL-federation:实现了分布式SQL聚合功能,可以将多个数据库的结果聚合在一起返回,这个模块可以用于查询跨多个数据库的数据,提供了统一的查询接口。
  8. SQL-parser:用于解析 SQL 语句,将 SQL 语句解析成对应的语法树,方便后续的处理和执行。这个模块支持多种 SQL 方言,可以解析各种类型的 SQL 语句。
  9. SQL-translator:实现了 SQL 转换和重写功能,可以将 SQL 转换成特定的数据库 SQL 语句。通过这个模块,可以实现数据库的适配和兼容性。
  10. Time-service:提供了时间服务功能,用于处理与时间相关的操作和计算,这个模块可以提供统一的时间接口,解决分布式系统中时间一致性的问题。
  11. Traffic:用于流量控制和负载均衡,可以根据实际情况对请求进行调度和限流,确保系统的高可用和性能。
  12. Transaction:提供了分布式事务的支持,可以确保多个数据库之间的事务一致性,这个模块可以实现分布式事务的提交、回滚和恢复等功能。

Mode

模式模块,该模块定义了 ShardingSphere 的运行模式,包括 Cluster 和 Standalone。

  1. shardingsphere-cluster-mode:ShardingSphere 可以通过集群部署来提高高可用性和负载均衡的支持。
  2. shardingsphere-standalone-mode:在单机模式下,ShardingSphere 作为一个独立的数据库中间件,在单个节点上运行,提供分片功能。这种模式适用于小规模的应用,无需分布式部署和高可用性支持。

Proxy

用于提供数据库代理功能,它的作用是在应用程序和数据库之间充当一个中间层,接收来自应用程序的数据库请求,并根据配置进行相应的处理和路由

  1. Backend:负责与数据库实例进行通信,处理来自前端的数据库操作请求,并将请求转发给相应的数据库实例进行执行。它负责与后端数据库进行连接,执行 SQL 语句,事务管理等操作。
  2. Bootstrap:ShardingSphere-proxy的启动模块,负责加载配置信息,初始化各个子模块以及启动代理服务器。它负责初始化整个代理的运行环境,并协调各个子模块的工作。
  3. Frontend:Frontend子模块是与应用程序进行交互的接口,接收来自应用程序的数据库请求,并将请求转发给 backend 模块进行处理。它负责与应用程序进行通信,解析和处理应用程序的 SQL 语句,并将处理结果返回给应用程序。

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

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

相关文章

C++那些事之高性能SIMD

C那些事之高性能SIMD 最近在看相关向量化的内容,看起来有点头大,借此机会,学习一下高性能SIMD编程。 SIMD全称single-instruction multiple-data,单指令多数据。 在传统的计算机架构中,CPU一次只能处理一个数据元素。但是&#xf…

【机器学习】Feature scaling and Learning Rate (Multi-variable)

Feature scaling and Learning Rate 1、数据集2、学习率2.1 α \alpha α 9.9e-72.2 α \alpha α 9e-72.3 α \alpha α 1e-7 3、特征缩放3.1 特征缩放的原因3.2 Z-score 归一化3.3 预测3.4 损失等值线 导入所需的库 import numpy as np np.set_printoptions(precision…

【C++】类和对象-C++运算符重载

运算符重载 1.加号运算符重载 代码&#xff1a; #include <iostream> using namespace std; /******************************************/ //加号运算符重载class Person { public:int m_A;int m_B;//1、成员函数重载号(不能与下面方式2同时存在&#xff0c;否则代码报…

在docker中没有vi如何修改docker中的文件

今天在做学成在线的项目&#xff0c;遇到了一个问题&#xff0c;就是死活登不上xxl-job&#xff0c;按照之前遇到的nacos的问题&#xff0c;我怀疑很大概率是和当时的ip设置有关&#xff0c;不知道nacos的ip怎么修改的同学&#xff0c;可以看看这篇文章&#xff1a;关于docker中…

电子词典

项目要求&#xff1a; 1.登录注册功能&#xff0c;不能重复登录&#xff0c;重复注册。用户信息也存储在数据库中。 2.单词查询功能 3.历史记录功能&#xff0c;存储单词&#xff0c;意思&#xff0c;以及查询时间&#xff0c;存储在数据库 4.基于TCP&#xff0c;支持多客户…

【AI网站分享】

AI网站分享 1 AI应用2 AI 写作3 AI 编程4 AI设计5 AI作图6 AI训练模型7 AI影音编辑8 AI效率助手 网站链接&#xff1a; https://tools.haiyong.site/ai/ 网站中的内容大致可以分为八类&#xff1a;AI应用、AI写作、 AI 编程、 AI设计、 AI作图、AI训练模型、 AI影音编辑、 AI效…

线程属性——线程分离应用

文章目录 相关函数初始化释放线程属性的资源获取线程分离的状态属性设置线程分离的状态属性获取线程的栈的大小线程分离应用 相关函数 可以通过man pthread_attr_然后按两次table键查询和属性相关的函数 初始化 释放线程属性的资源 获取线程分离的状态属性 设置线程分离的状…

C# VS2022+WinForm+Oracle19.3+存储过程,SQL和代码分离

【我的目的】&#xff1a;SQL和代码分别存放在不同的地方&#xff0c;便于随时修改SQL的内容&#xff0c;也便于修改SQL的书写格式 方案1&#xff1a;把SQL存放在DataSet.xsd中实现SQL和代码分离 方案2&#xff1a;用存储过程实现SQL和代码分离 我最倾向方案1&#xff0c;利用…

链路 聚合

静态链路聚合&#xff1a;多数内网使用 。非物理直连建议与BFD联动 动态链路聚合LACP&#xff1a;是公有协议、内网、二层专线接口都能使用&#xff0c;现网多数使用此方式链路 聚合 PAGP&#xff1a;思科私有协议&#xff0c;只支持思科设备使&#xff0c;现网多数不用

Windows驱动开发

开发Windows驱动程序时&#xff0c;debug比较困难&#xff0c;并且程序容易导致系统崩溃&#xff0c;这时可以使用Virtual Box进行程序调试&#xff0c;用WinDbg在主机上进行调试。 需要使用的工具&#xff1a; Virtual Box&#xff1a;用于安装虚拟机系统&#xff0c;用于运…

谨防虚假发货!了解如何辨别真假发货单号

随着电子商务的发展&#xff0c;快递行业成为了一个不可忽视的重要环节。然而&#xff0c;虚假发货单号的出现给快递行业带来了一定的困扰。为了解决这个问题&#xff0c;一些快递批量查询高手软件开始应用于虚假发货单号的分析。本文将介绍这些软件如何分析出虚假发货单号&…

应用开发者的疑问:大模型是银弹吗?

被当成银弹的大模型 ChatGPT 火了之后&#xff0c;大模型似乎被当成了真正的银弹&#xff0c;所有的体验问题都想通过大模型解决&#xff1a; 能不能和大模型对话订机票&#xff1f;自然语言生成 SQL&#xff0c;简化报表分析工作&#xff1f;大模型帮老年人操作软件&#xff…

nosql之redis集群

文章目录 一.redis集群1.单节点redis服务器带来的问题2.集群redis3.集群的优势4.redis集群的实现方法5.redis群集的三种模式5.1 主从复制5.2 哨兵5.3 集群 二.Redis 主从复制1.主从复制概念2.主从复制的作用3.主从复制流程4.搭建Redis 主从复制4.1 安装 Redis4.2 修改 Redis 配…

RBF神经网络原理和matlab实现

1.案例背景 1.1 RBF神经网络概述 径向基函数(Radical Basis Function,RBF)是多维空间插值的传统技术,由Powell于1985年提出。1988年, Broomhead和 Lowe根据生物神经元具有局部响应这一特点,将 RBF引入神经网络设计中,产生了RBF神经网络。1989 年&#xff0c;Jackson论证了…

开源项目-erp企业资源管理系统(毕设)

哈喽,大家好,今天给大家带来一个开源项目-erp企业资源管理系统,项目通过ssh+oracle技术实现。 系统主要有基础数据,人事管理,采购管理,销售管理,库存管理,权限管理模块 登录 主页 基础数据 基础数据有商品类型,商品,供应商,客户,仓库管理功能

Python零基础入门(十)——模块与包

系列文章目录 个人简介&#xff1a;机电专业在读研究生&#xff0c;CSDN内容合伙人&#xff0c;博主个人首页 Python入门专栏&#xff1a;《Python入门》欢迎阅读&#xff0c;一起进步&#xff01;&#x1f31f;&#x1f31f;&#x1f31f; 码字不易&#xff0c;如果觉得文章不…

【C语言-扫雷游戏全功能详解】

目录 理解扫雷原理 梳理扫雷过程 9*9 棋盘 初始化棋盘 显示棋盘 ​编辑 布置雷 排查雷 统计x,y坐标周围有几个雷 使用递归函数来实现周围没地雷时展开多个 判断成功排除后剩下的方格数是否等于地雷数 排查函数 梳理编写代码思路 头文件game.h 库函数所需要头文件 …

STM32 cubemx配置USART DMA传输

文章目录 前言一、DMA概念二、STM32 DMA数据手册分析3.DMA模式介绍4.cubemx配置总结 前言 本篇文章来讲解DMA的概念&#xff0c;并使用DMA来进行串口的数据收发。 一、DMA概念 DMA&#xff08;Direct Memory Access&#xff0c;直接内存访问&#xff09;是一种计算机系统的技…

vue 设置数组

手写获取数据 <el-form-item label"缴纳方"><el-select v-model"form.invoiceCategoryName" placeholder"请选择缴纳方"><el-optionv-for"item in kplmList":key"item.value":label"item.label":v…

求解方程x^2=a的根,不使用库函数直接求解(不动点迭代法)

首先可以将方程两边同时加上x&#xff0c;&#xff0c;这时候两边同时再除以1x&#xff0c;就得到了&#xff0c;变形为。&#xff08;变性后的迭代式不唯一&#xff0c;这里随便选取一个&#xff09; 当x是准确值的时候&#xff0c;两边应该是相等的&#xff0c;如果x是近似值…