当前位置: 首页 > news >正文

ShardingSphere

1.简介

  • 1.开源的分布式数据生态项目
    • ShardingSphere-JDBC:轻量级Java框架
    • ShardingSphere-Proxy:数据库代理
    • ShardingSphere-Sidecar(规划中):Kubernetes的云原生数据库代理
  • 2.使用版本:ShardingSphere5.1.1

1.数据库集群架构

  • 1.出现原因:单个数据库服务器无法满足海量数据加海量用户的业务需求
  • 2.解决方式:采用数据库集群架构提高应用程序的性能
  • 3.具体实现
    • 1.读写分离
    • 2.数据分片

1.读写分离

在这里插入图片描述
在这里插入图片描述

  • 1.原理:将数据库读写操作分散到不同的节点上,分散了数据库读写的压力
  • 2.主机:负责事务性的增删改操作;从机:负责查询操作
  • 3.读写分离机制建立在数据库主从复制的基础上
  • 4.优点:通过读写分离可以有效避免数据更新导致的行锁,也可将查询负载均衡的分散到多个从机中,从而提高查询性能
  • 5.问题
    • 1.主机向从机复制数据的过程中会有时间的延迟,如果将数据写入主机,立即从从机读取数据,这时数据可能还未从主机完全复制到从机,所以会出现数据不一致问题,即CAP定理
    • 2.读写分离分散了数据库读写压力,但没有分散存储压力,为了业务数据存储的需求,需将存储分散到多台数据库服务器

1.CAP定理

  • 1.定义:分布式系统中,当涉及读写操作时,只能保证一致性(Consistence)可用性(Availability)分区容错性(Partition Tolerance)三者中的两个
    • 1.C一致性,对某个指定的客户端,读操作保证能够返回最新的写操作结果,即读写结果一致
    • 2.A可用性,非故障的节点在合理的时间内返回合理的响应(非错误和超时的响应)
    • 3.P分区容错性,当出现网络分区(多个服务器数据交换)后,系统能够继续履行职责(继续执行,可返回超时或历史数据)
  • 2.特点:实际设计过程中,每个系统不可能只处理一种数据,有的数据必须选择CP,有的数据必须选择AP,分布式系统理论上不可能选择CA
  • 3.CAP理论中的C在实践中不可能完美实现,数据复制的过程中,节点N1和节点N2的数据并不一致(强一致性);即使无法做到强一致性,但应用可以采用合适的方式达到最终一致性
    • 1.基本可用(Basically Available):分布式系统在出现故障时,允许损失部分可用性,保证核心可用
    • 2.软状态(Soft State):允许系统存在中间状态,该中间状态不会影响系统的整体可用性,这里的中间状态就是CAP理论中的数据不一致
    • 3.最终一致性(Eventual Consisitency),系统中的所有数据副本经过一定时间后,最终能够达到一致的状态
1.CP

在这里插入图片描述

  • 1.如图所示,为了保证一致性,当发生分区现象(丢包)后,N1节点上数据已经更新到y,但由于N1N2之间的复制通道中断,数据y无法同步到N2N2节点上的数据还是x
  • 2.此时客户端c访问N2时,N2需要返回Error,提示客户端C系统现在发生了错误,该处理方式违背了可用性的要求,此时CAP三者只能满足CP
2.AP

在这里插入图片描述

  • 1.如图所示,为了保证可用性,当发生分区现象后,N1节点上的数据已经更新到y,但由于N1N2之间的复制通道中断,数据y无法同步到N2N2节点上的数据还是x
  • 2.此时客户端C访问N2时,N2将当前自己拥有的数据x返回给客户端C,而实际当前最新的数据是y,不满足一致性的要求,此时CAP只能满足AP.

2.数据分片

  • 1.读写分离问题读写分离分散了数据库读写压力,从而缓解了单台服务器的访问压力,但没有分散存储压力,为了满足业务数据存储需求,需将存储分散到多台数据库服务器
  • 2.数据分片定义:将存放在单一数据库或表中的数据分散地存放至多个数据库或表中,以达到提升性能瓶颈以及可用性的效果
  • 3.数据分片的拆分方式
    • 1.垂直分片
    • 2.水平分片
  • 4.适用场景:《阿里开发手册》建议单表超过500万条记录或单表大小超过2GB需要考虑分库分表
    在这里插入图片描述

1.垂直分片

  • 1.定义:按照业务拆分的方式称为垂直分片/纵向拆分
  • 2.垂直分片可细分为
    • 1.垂直分库
    • 2.垂直分表
1.垂直分库

在这里插入图片描述
在这里插入图片描述

  • 1.定义:核心理念是专库专用
    • 1.拆分之前:一个数据库由多个数据表构成,每个表对应着不同的业务
    • 2.拆分之后:按照业务将表进行归类,分布到不同的专用数据库,从而将压力分散至不同的数据库
  • 2.问题:垂直分库可以缓解数据库数据量和访问量的问题,但无法处理单表数据量过大问题,此时需要水平分片进一步处理
2.垂直分表
  • 1.定义:核心理念是专表专用
    • 1.拆分之前:一个数据表由多个字段构成,每个字段对应着不同的业务
    • 2.拆分之后:按照业务将字段进行归类,分布到不同的专用数据表,从而将压力分散至不同的数据表
  • 2.问题
    • 1.垂直分表可以缓解数据表访问量和占用量的问题,但无法处理单表数据量过大问题,此时需要水平分片进一步处理
    • 2.垂直分表会引入额外的复杂度,原来只要一次查询,现在需要两次查询
  • 3.适用范围:垂直分表适合将表中不常用的列或是占了大量空间的列拆分出去
  • 4.注意:垂直分表对应的主键id应该保持一致

2.水平分片

  • 1.定义:通过某个字段(或某几个字段),根据某种规则将数据分散至多个库或表中的方式称为水平分片/横向拆分
  • 2.水平分片可细分为
    • 1.水平分库
    • 2.水平分表
1.水平分库

在这里插入图片描述

  • 1.定义:相对于垂直分库,不再将数据根据业务逻辑分类,而是通过某个字段(或某几个字段),根据某种规则将数据分散至多个库中,每个数据库的分片仅包含数据的一分部(例:根据主键分片,偶数主键的记录放入0库,奇数主键的记录放入1库)
  • 2.单表进行切分后,是否将多个表分散在不同的数据库服务器中,可以根据实际的切分效果来确定
  • 3.适用场景:如果单表拆分为多表后,单台服务器依然无法满足性能要求,那就需要将多个表分散在不同的数据库服务器中
2.水平分表

在这里插入图片描述

  • 1.定义:相对于垂直分表,不再将数据根据业务逻辑分类,而是通过某个字段(或某几个字段),根据某种规则将数据分散至多个表中,每个数据表的分片仅包含数据的一分部(例:根据主键分片,偶数主键的记录放入0表,奇数主键的记录放入1表)
  • 2.适用范围:水平分表适合表行数特别大的表
    在这里插入图片描述
  • 3.注意
    • 1.单表切分为多表后,新的表即使在同一个数据库服务器中,也可能带来可观的性能提升;如果性能能够满足业务要求,可不拆分到多台数据库服务器,因为业务分库也会引入更多复杂性
    • 2.将拆分的表引入多台数据库会更复杂(例:分布式事务,跨库关联,数据库成本)

3.读写分离和数据分片

在这里插入图片描述

  • 1.上图展示将数据分片与读写分离一同使用时,应用程序与数据库集群之间的复杂拓扑关系

1.实现方式

  • 1.读写分离和数据分片具体的实现方式一般有两种
    • 1.程序代码封装
    • 2.中间件封装
1.程序代码封装
  • 1.定义:指在代码中抽象一个数据访问层(或中间层封装),对程序进行一个封装,让数据访问层直接去访问不同数据库集群中的数据源,实现读写分离操作和数据库服务器连接的管理
    在这里插入图片描述
2.中间件封装
  • 1.中间件封装是指的是独立一套系统出来提供数据访问层的功能,从而实现读写操作分离和数据库服务器连接的管理
  • 2.对于程序服务器而言,访问中间件和访问数据库没有区别
  • 3.常用的中间件有ShardingSphereMyCat,其中已经封装好了数据访问层供程序使用
  • 4.Apache ShardingSphere既提供了程序级别也提供了中间件级别两种解决方案;MyCat只提供了中间件解决方案

2.ShardingSphere JDBC

1.简介

  • 1.ShardingSphere JDBC定位为轻量级Java框架,在Java的JDBC层提供的额外服务,类似生成一个数据访问层,它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架
  • 使用与任何基于JDBC的ORM框架,如:JPA,Hibetnate,mybatis,Spring JDBC Template或直接使用JDBC
  • 支持任何第三方的数据库连接池,如:DBCP,C3P0,BoneCP,HikariCP等
  • 支持任意实现JDBC规范的数据库,目前支持MySQL,PostgreSQL,Oracle,SQLServer以及任何可使用JDBC访问的数据库
    在这里插入图片描述
  • 如果应用程序也是集群模式可以采用服务治理组件G… Center,例Zookeeper

ShardingSphere-Proxy

在这里插入图片描述

  • 定位为透明化的数据库代理器,即只是一个中间件,提供了封装了数据库二进制协议的服务端版本,用于完成对异构语言(即非Java的项目)的支持,目前提供Mysql和PostgreSQL版本,它可以使用任何兼容MySQL/PostgreSQL协议的访问客户端(如:MySQL Command Client,MySQL Workbench,Navicat等)操作数据,对DBA更加友好
  • 向应用程序完全透明,可直接当做MySQL/PostgreSQL使用
  • 适用于任何兼容MySQL/PostgreSQL协议的客户端

安装Docker

  • Docker可以运行在Windows,Mac,CentOS,Ubuntu等操作系统上
  • Docker支持以下的CentOS版本
  • 1.CentOS7(64-bit)
  • 2.CentOS6.5(64-bit)或更高的版本
  • 目前,CentOS仅发行版本中的内核Docker
  • Docker运行在CentOS7上,要求系统为64位,系统内核版本为3.10以上
  • Docker运行在CentOS-6.5或更高的版本的CentOS上,要求系统为64位,系统内核版本为2.6.37或更高版本
  • 2.查看系统内核
  • uname命令用打印当前系统相关信息
  • uanme -r
  • 3.查看已安装的CentOs的版本信息
  • cat /etc/redhat-release

3.CentOS7安装docker

  • 1.安装需要的软件包
  • yy -utils提供了yy-config-manager相关功能,device-mapper-persistent-data和lvm2是设备映射器驱动程序所需要的
  • yum install -y yuim-utils \ device-mapper-persistent-data \ lvm2
  • 2.设置docker下载镜像
  • 推荐阿里云下载地址
  • yum-config-manager --add-repo http://mirrors
  • 3.更新yum软件包索引
  • 我们在更新或配置yum源之后,通常都会使用yum makecache生成缓存,这个命令是将软件包信息提前在本地缓存一份,用来提高搜索安装软件的速度
  • yum makecache fast
  • 4.安装docker ce
  • yum install -y docker -ce
  • 5.启动docker
  • systemctl start docker
  • 6.版本验证
  • docker version
  • 7.设置开机启动
  • 查看服务是否自动启动(enabled,是;disabled,否)
  • systemctl list-unit-files | grep docker.service
  • sysmctl enable docker
  • systemctl deamon-reload
  • systemctl diable docker
  • systenctl deamin-reload
  • 卸载
  • systemctl stop docer
  • yum remove -y docker -ce
  • rm -rf /var/lib/docker

相关文章:

ShardingSphere

1.简介 1.开源的分布式数据生态项目 ShardingSphere-JDBC:轻量级Java框架ShardingSphere-Proxy:数据库代理ShardingSphere-Sidecar(规划中):Kubernetes的云原生数据库代理 2.使用版本:ShardingSphere5.1.1 1.数据库集群架构 1.出现…...

配置Maven

对于刚开始认识的Maven的初学者超级有用的哦!项目统一共享使用一套jar包,由maven统一管理。节省了jar空间,统一jar包版本首先将maven安装完毕测试有没有配置完成,在命令框里面打 mvn -version进行测试maven安装完,第一…...

赛宁网安“网络安全卓越中心”:立足科技创新 推动网安产业高质量发展

​​2月22日上午,网络安全卓越中心CPCOE——圆桌论坛活动在南京召开。本次论坛由南京未来科技城主办,南京赛宁信息技术有限公司承办。论坛上,江苏省科协副主席、南京理工大学教授李千目,江苏省互联网协会副理事长兼秘书长刘湘生&a…...

操作系统题目收录(十四)

1、 有些操作系统中将文件描述信息从目录项中分离出来,这样做的好处是()。 A:减少读文件时的I/O信息量B:减少写文件时的I/O信息量C:减少查找文件时的I/O信息量D:减少复制文件时的I/O信息量 解…...

Qt 第1课、Qt 的窗口组件和窗口类型

GUI 程序的开发原理: GUI 程序在运行的时候,操作系统会为它创造一个消息队列,消息队列用于存储操作系统发过来的系统消息。 用户使用操作系统的过程中,操作系统内核检测到用户的操作(鼠标,键盘&#xff09…...

【Jmeter】ForEach控制器

一、什么是ForEach控制器 ForEach控制器是遍历某个数组读取不同的变量值,来控制其下的采样器或控制器执行一次或多次。而这个数组可以是用户自定义变量,也可以是从前面接口请求中提取到需要的数据,然后进行遍历循环。 二、ForEach控制器相关…...

Julia 数据类型

在编程语言中,都有基本的数学运算和科学计算,它们常用的数据类型为整数和浮点数。 另外还有一个"字面量"的术语,字面量(literal)用于表达源代码中一个固定值的表示法(notation)&…...

01-基于SOA架构someip 开发-Linux开发环境搭建

前言:SOME/IP 是一个汽车的中间件解决方案,可用于控制消息。从一开始,它的设计就是为了完美地适应不同尺寸和不同操作系统的设备。这包括小型设备,如相机、AUTOSAR设备,以及头部单元或远程信息处理设备。同时还确保了S…...

历时半年!从外包到现在阿里网易25K,分享一下自己的涨薪经验

前言 首先自我介绍一下,本人普通一本毕业,年初被老东家裁员干掉了,之后一直住在朋友那混吃等死,转折是今年年后,二月初的时候和大佬吃了个饭,觉得自己不能这样下去了,拿着某大佬给我的面试资料…...

支付系统中的设计模式04:改进的策略与外观模式

随着业务越做越大,交易量大了,老板觉得可以用一些变相的方法增加一些收入了,同时也有利于用户,做到双赢。这很好理解,“往地上戳一棍子都能冒出油来”,谁能扛得住这种诱惑呢? 于是,老板就提了这样的需求: 支付系统需要根据不同的结算模式,返利给账户: 1、选择T+1结算…...

关于数据分析和数据指标,企业还需要做什么?

数据虽然已经成为了各行各业对未来的共识,也切实成为了各领域企业的重要资产。但真正谈到发挥数据的价值,就必须从规模庞大的数据中找出需求的数据,然后进行利用。这个过程光是想想就知道很麻烦,更别提很多数据都是经常会用到的&a…...

jvm之垃圾回收器

分类 按线程 串行并行工作模式 并发式独占式碎片处理方式 压缩式非压缩式工作内存空间 年轻代老年代 评估GC的性能指标 吞吐量:运行用户代码的时间占总运行时间的比例暂停时间:执行垃圾收集时,程序的工作线程被暂停的时间内存占用: java堆区…...

【c++】类和对象7—继承

文章目录关于继承继承与非继承的对比继承方式继承中的对象模型继承中的构造和析构顺序继承同名成员处理方式继承同名静态成员处理方式多继承语法菱形继承关于继承 我们发现,定义一些类时,下级别的成员处理拥有上一级的共性,还有自己的特性。 …...

vue实现预览、下载和打印后端返回的pdf文件流

需求:后端返回pdf文件流,前端能够预览、下载打印。 后端返回的文件流部分截图 需要实现的效果图 前面第1步只是为了展示后台返回数据流,完成功能的时候,不需要调用接口的,只需要利用调用接口的url。 实现步骤&am…...

【Android视频号④ 问题总结】

这节坑比较多~ 差点没把我给整死!!! 环境介绍 首先我调试都是root过的真机,但是生产环境都是没有Root的云机,属于自己改的Rom框架也不是XP或LSP 是技术人员利用Xposed源码改的框架 问题&解决 模块源码更改 这…...

推荐算法—widedeep原理知识总结代码实现

wide&deep原理知识总结代码实现1. Wide&Deep 模型的结构1.1 模型的记忆能力1.2 模型的泛化能力2. Wide&Deep 模型的应用场景3. Wide&Deep 模型的代码实现3.1 tensorflow实现3.2 pytorch实现今天,总结一个在业界有着巨大影响力的推荐模型&#xff0c…...

PHP面向对象03:命名空间

PHP面向对象03:命名空间一、命名空间基础二、子空间三、命名空间访问1. 非限定名称2. 限定名称3. 完全限定名称四、全局空间五、命名空间应用六、命名空间引入一、命名空间基础 namespace,是指人为的将内存进行分隔,让不同内存区域的同名结构…...

Elasticsearch:使用 pipelines 路由文档到想要的 Elasticsearch 索引中去

路由文件 当应用程序需要向 Elasticsearch 添加文档时,它们首先要知道目标索引是什么。在很多的应用案例中,特别是针对时序数据,我们想把每个月的数据写入到一个特定的索引中。一方面便于管理索引,另外一方面在将来搜索的时候可以…...

前端开发常用的18个JavaScript框架和库

JavaScript 可以说是最流行的编程语言之一,也是Web 开发人员必须学习的 3 种语言之一,JavaScript 几乎可以做任何事情,更可以在包括物联网在内的多个平台和设备上运行。在WebGL库和SVG/Canvas元素的支持下,JavaScript变得惊人的强…...

理解、总结重点知识

一、常见的数据结构 1、数组结构 数组结构: 存储区间连续、内存占用严重、空间复杂度大 优点:随机读取和修改效率高,原因是数组是连续的(随机访问性强,查找速度快)缺点:插入和删除数据效率低&a…...

从测速到配置:一套完整的cFosSpeed网络加速保姆级教程(适用于小白)

从零开始掌握cFosSpeed:网络加速全流程实战指南对于经常进行在线游戏、视频会议或大文件传输的用户来说,网络延迟和带宽利用率低下往往是影响体验的关键痛点。cFosSpeed作为一款专业的网络流量优化工具,能够显著改善这些问题,但许…...

第3篇:系统透视——信息部门如何构建“税务友好型”IT架构

本篇导读:如果你是信息总监或IT负责人,请通读全文,尤其是“系统合规设计的三必须”和“现场检查SOP”;如果你是财税人员,请重点阅读“研产供销全链条的系统对接要求”和“与IT部门的协作要点”;如果你是老板…...

WPF虚拟桌宠组件:可嵌入、高性能、工程化UI生命体

1. 这不是“桌面宠物”,而是一个可嵌入的WPF UI组件化生命体你可能在Windows XP时代见过那只晃着尾巴、偶尔打哈欠的3D小猫,也可能在Win10系统托盘里点开过一个会眨眼的像素狐狸——但那些是独立进程、是系统级小工具、是“看一眼就关掉”的轻量娱乐。而…...

PentestGPT实战部署指南:AI驱动的渗透测试工作流落地

1. 这不是另一个“AI安全”的概念玩具,而是一套能真正跑起来的渗透测试辅助工作流“PentestGPT”这个名字刚在GitHub上出现时,我第一反应是点开又关掉——过去三年里,我见过太多打着“AI渗透”旗号的项目:有的只是把ChatGPT API封…...

可解释AI新突破:基于局部帕累托最优的模型解释框架

1. 项目概述:当AI模型成为“黑箱”,我们如何撬开它?在机器学习项目里摸爬滚打十几年,我见过太多这样的场景:团队花大力气训练出一个准确率高达95%的复杂模型(比如深度神经网络),业务…...

Unity Visual Scripting不是拖拽玩具:中阶开发者的编程范式重构指南

1. 为什么Unity官方Visual Scripting不是“拖拽完就能跑”的玩具,而是一套需要重新理解的编程范式很多人第一次点开Unity的Visual Scripting(VS)面板时,看到那些五颜六色的节点和丝滑的连线,下意识觉得:“这…...

国产麒麟系统上编译GDAL 3.2.1踩坑记:从PROJ6依赖缺失到Qt环境集成

麒麟系统GDAL 3.2.1编译实战:PROJ6依赖修复与Qt工程深度集成在国产操作系统生态中部署地理数据处理工具链,往往会遇到比常规Linux发行版更复杂的依赖问题。最近在麒麟系统上为北斗定位项目编译GDAL 3.2.1时,遭遇了经典的"PROJ 6 symbols…...

JavaScript对象创建:告别繁琐,四种灵活写法一学就会

在JavaScript里,创建对象的这般方法常把刚开始学习的新手弄得困惑不已,好像无论走哪条道都行得通,可又不清楚该挑哪一条才好。我编写JavaScript都有十几年功夫了,对象创建这事差不多每天都会碰到可谓基础技能。它不像变量声明那般…...

从脚本到系统:设计一个支持插件、限流、重试与监控的 Python 异步爬虫框架

从脚本到系统:设计一个支持插件、限流、重试与监控的 Python 异步爬虫框架 很多人第一次写 Python 爬虫,都是从几十行脚本开始的:requests.get()、BeautifulSoup、for 循环、保存 CSV。它很快,也很有成就感。但真实项目往往不是“…...

还在手动触发Lindy子任务?这6个隐藏API+3个低代码集成技巧,今天就能上线全自动流水线

更多请点击: https://kaifayun.com 第一章:Lindy多步骤任务自动化的价值与演进路径 Lindy效应指出,一项技术的预期剩余寿命与其当前已存在时间正相关;在自动化领域,Lindy原则催生了对“经久验证、语义稳定、可组合性强…...