当前位置: 首页 > 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…...

记一次从文件备份泄露到主机上线

前言 记录下某个测试项目中,通过一个文件备份泄露到主机上线的过程。 文件备份泄露 对于测试的第一项当然是弱口令,bp跑了一通词典,无果。目录又爆破了一通,发现一个web.rar可通,赶紧下载看看,如下图所示…...

8年测开经验面试28K公司后,吐血整理出1000道高频面试题和答案

1、python的数据类型有哪些 答:Python基本数据类型一般分为:数字、字符串、列表、元组、字典、集合这六种基本数据类型。 浮点型、复数类型、布尔型(布尔型就是只有两个值的整型)、这几种数字类型。列表、元组、字符串都是序列。 2、列表和元组的区别 答…...

Linux 基础知识之权限管理

目录一、权限的认识二、用户切换三、文件权限1.三类文件访问者2.文件权限类型3.文件访问权限4.文件权限值表示一、权限的认识 权限是对用户所能进行的操作的限制,如果不对用户作出限制,那么碰到恶意用户,就会损害其他用户的利益。 Linux是多用…...

百度LAC分词

对应数据的链接放这里了 import pandas as pd from util.logger import Log import os from util.data_dir import root_dir from LAC import LAC os_file_name os.path.split(os.path.realpath(__file__))[-1]# 加载LAC模型 lac LAC(mode"lac") # 载入自定义词典 …...

软件测试面试题 —— 整理与解析(1)

😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡主页地址:🌎【Austin_zhai】🌏 🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能&#xf…...

深入浅出C++ ——红黑树模拟实现STL中的set与map

文章目录一、红黑树二、用泛型红黑树模拟实现set三、用泛型红黑树模拟实现map一、红黑树 红黑树作为set和map的底层容器,既要实现插入key又要实现插入pair,所以做了稍许的改动,使其成为一颗泛型结构的红黑树,通过不同的实例化参数…...

自动化测试框架设计

大数据时代,多数的web或app产品都会使用第三方或自己开发相应的数据系统,进行用户行为数据或其它信息数据的收集,在这个过程中,埋点是比较重要的一环。 埋点收集的数据一般有以下作用: 驱动决策:ABtest、漏…...

【虚拟仿真】Unity3D中实现鼠标的单击、双击、拖动的不同状态判断

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 这篇文章分享一下虚拟仿真项目中经常碰到鼠标事件控制代码。 …...

【2023】Prometheus-相关知识点(面试点)

目录1.Prometheus1.1.什么是Prometheus1.2.Prometheus的工作流程1.3.Prometheus的组件有哪些1.4.Prometheus有什么特点1.5.Metric的几种类型?分别是什么?1.6.Prometheus的优点和缺点1.7.Prometheus怎么采集数据1.8.Prometheus怎么获取采集对象1.9.Promet…...

英语二-电子邮件邀请短文写作

1. 邮件模板 Dear 邀请人, Hope you have a great day. I am writing this email to invite you to attend 主题. Please kindly find the following information for your reference: Time: 时间 Address: 地点 We hope that nothing will prevent you from coming, as…...