CAP原理应用与分布式矩阵

article/2025/9/19 18:23:34

CAP原理是描述一致性,可用性,和分区兼容性的理论,但这个原理用在实际情况下时往往让人很困惑。什么样的情况适用于这样的原理?有哪些先决条件?如何创建一个同时满足一致性和可用性,分区兼容性的分布式系统?等等的问题。现在我就尝试使用一种简单易懂的方式来把分布式的各种问题抽茧剥丝的放在大家面前。



首先我们把红色的球定义为数据,蓝色的框定义为容器。那么分布式的问题就可以简化为数据如何放入容器内和如何访问的问题?容器也就是CAP原理所描述的分区。当你想把1个数据放入到n分区时我们可以有3种放入的方式。

第一种CP的方式,假设当前有两个容器,我们把数据切分为两个部分,分别放入AB两个容器中。这个分布式模型中能够保证数据的一致的,即数据被平分为左右两个部分,不会出现数据的歧义,那么这个模型下也是有分区兼容性的因为被平分之后放入两个分区中。


这里一致性指的是当修改分区内的数据A时。两个容器内的数据也是相同的,不会出现数据歧义。但当AB其中任何一个分区无法使用时。就会获取不到全部的数据,导致数据出现不可用的状态。

第二种AP的方式,我们把数据复制两份分别放入AB两个分区。当AB任意分区不能使用的情况下,也可以使用数据,保持数据的可用性。

但当两个容器分别修改数据就会导致不能获得一致的数据,这就是AP方式保持可用性和分区兼容性,牺牲数据一致性。

第三种CA的方式,就是保持数据的一致性和可用性牺牲数据分区兼容性。直白的说就是把数据完整的放到一个分区内,那么他也不是一个分布式系统。

好的以上就是关于CAP基本原理的介绍。那么设计一个分布式系统最基本要考虑的,就是如何把数据放入到各个分区中。因为CA就不是一个分布式系统,那么它首先可以被排除掉了。在剩下的CP和AP中对数据的一致性就成了必然的选择,因为不可用的数据或者互相矛盾的数据显然是不可以接受的。那么我们唯一的选择就剩下了CP的分布式系统。但CP的问题也很明显就是任何一个分区或叫节点崩溃之后数据就是不完整的了,会导致数据的错误和不可使用。作为一个互联网工程师首先想到的是我们为每一个分区加上备份服务器好不好呢?而CAP原理的作者认为你加入的不是备份服务,对于CAP原理来说只是是将CP的方式变为了AP的方式。

备份服务器A1与B1与原来的服务器组合成了一个怪异的CP与AP的混合体。虽然增加了可用性,备份服务器与原服务器如果因为任何意外的原因产生数据不一致那么整个系统就失去了一致性,这个组合就是变成了AP系统。所以我们要把备份服务器A1放到A的后面让用户不能直接修改A1服务器。A1服务器只能由A服务器来修改。

那么分布式系统就变成了一个由CP面和AP面组成的矩阵。

在一般情况下其中CP面负责统一的对外通信,提供统一的可分区的数据服务。AP面对用户为不可见状态,当CP面任意节点崩溃或不可用时,在AP方向选择一个可用的服务器转为CP服务器继续为用户提供服务。只要系统有足够多的AP服务器可以转换为CP服务器使其抵消不可用服务器的概率,那么就能保证整个分布式矩阵式CP&AP完备。

在这个分布式矩阵里也可以不单单使用某个面为外部提供数据服务。在系统的设计上可以使用AP节点为用户提供只读服务。这也不局限在CP节点或者某个面,任意的节点其实都可以对外提供只读服务。那么对于可靠性要求不高的只读服务,所有节点就相当于是一个平面二维的系统。可见分布式矩阵相当的灵活,可以依据用户视图做不同的切割。

那么在现实中有没有CP&AP的系统呢?答案是有的,传统的主从服务器就是一个C&AP的系统。注意这里是C&AP不是CP&AP,因为单机的主从系统并不是分布式的。但是提供分布式服务的主从系统例如大型的网站加上阿里的云的数据库,就可以看作是CA&AP完备的系统。因为阿里云的数据库隐含的,提供了主从备份和磁盘备份,相当于对用户和开发者不可见的AP系统。

同理现在的区块链技术也是一个C&AP的系统。由一个POW或DPOS选择的C提供一致性服务,与全网或若干服务器提供的AP服务,组成的单C的分布式矩阵。

接下来深度讨论一个关于一致性定义的问题。因为这涉及到一个C容器能否划分为CP容器的问题?也就是什么样的数据需要一致性的问题?

我们看上图,一个全部为红色的球分为两半分别放入AB两个容器。当A容器内的球变为绿色的时候。把容器内的两个球拿出来拼成绿红的球是否是一个有效的球,如果有效的球,那么我们称这个球是可以分区的,也就是分区兼容的数据。如果这个球必须是全部变成绿才是有效的,那么这个数据本身就是分区不兼容的数据。

那么将C&AP转为CP&AP的过程,就要找到C中可以分区兼容的数据进行分区的过程。

 

参考资料:

http://blog.csdn.net/godfrey90/article/details/6754884



http://chatgpt.dhexx.cn/article/kPfLGeLq.shtml

相关文章

【Scala-spark.mlib】分布式矩阵——分布式计算的基石与利器

分布式矩阵 1. mlib.linalg.distributed包2. DistributedMatrix特质3. BlockMatrix类4. CoordinateMatrix类5. IndexedRowMatrix类6. RowMatrix类7. 小结 1. mlib.linalg.distributed包 矩阵计算是很多科学计算的重要步骤,而分布式矩阵存储则是分布式计算的基础。根…

Spark Mllib里的分布式矩阵(行矩阵、带有行索引的行矩阵、坐标矩阵和块矩阵概念、构成)(图文详解)...

不多说,直接上干货! Distributed matrix : 分布式矩阵  一般能采用分布式矩阵,说明这数据存储下来,量还是有一定的。在Spark Mllib里,提供了四种分布式矩阵存储形式,均由支持长整形的行列数和…

Shiro权限管理详解(授权和注解开发)【面试点】

Shiro权限管理详解 1. 权限管理1.1什么是权限管理1.2用户身份认证1.2.1 概念1.2.2 用户名密码身份认证流程1.2.3 关键对象 1.3 授权1.3.1 概念 1.3.2 授权流程1.3.3 关键对象1.3.4 权限模型1.3.5 权限分配1.3.6 权限控制1.3.6.1 基于角色的访问控制 1. 权限管理 1.1什么是权限…

Shiro权限管理之自定义Realm

文章目录 1. SpringBoot集成shiro快速入门1. shiro 用户认证2. shiro用户授权 2. SpringBoot 使用IniRealm进行认证授权3. Spring Boot 使用 JdbcRealm 进行认证授权1. 数据库驱动2. 数据库表结构3. 创建 testJdbcRealm方法4. 更改数据库表名 4. Spring Boot 使用自定义 Realm …

权限管理框架Shiro简介

Shiro 1、shiro简介 shiro是一个强大易用的java安全框架,可以帮助我们完成:身份认证、授权、加密、会话管理、与web集成、缓存等。 包括了三个核心组件:Subject、SecurityManage和Realm 外部架构 内部架构 authentication(认证…

Java shiro权限管理框架视频教程

shiro权限管理框架视频教程 中级 共14课 权限系统在任何一个系统中都存在,随着分布式系统的大行其道,权限系统也趋向服务化,对于一个高级工程师来说,权限系统的设计是必不可少需要掌握的技术栈。 课程简介 权限系统在任何一个…

【Shiro权限管理】一、简介

一、简介 Apache Shiro 是Java 的一个安全框架。Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE 环境,也可以用在JavaEE 环境。Shiro 可以帮助我们完成:认证、授权、加密、会话管理、与Web 集成、缓存等。 官网地址&#xf…

SSM集成shiro权限管理

这几天在学习了shiro权限管理框架,在刚开始的时候学的时候因为这个配置问题困扰了我很长时间,所以在这篇文章我整合了自己用SSM搭建shiro权限框架的过程。 1.配置 1.1jar包 在项目配置开始前需要先导入shiro的相关jar包,下载地址&#xff1a…

shiro权限管理的应用

shiro权限管理的应用 官网:http://shiro.apache.org 一, 什么是权限管理: 对系统中的资源进行权限配置 , 对资源的一种保护 ; 一般需要进过两个步骤: 身份认证- 授权 - 资源访问; 1.1 身份认证&…

shiro权限管理框架简介(一)

一:什么是shiro? shiro是apache的一个开源框架,是一个权限管理的框架,实现 用户认证、用户授权。 spring中有spring security (原名Acegi),是一个权限框架,它和spring依赖过于紧密,没有shiro使用简单。 s…

shiro权限管理框架学习

一、权限框架简介 基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。权限管理包括用户身份认证和授权两…

shiro权限管理的配置

建立一个权限管理配置类,在类上添加注解Configuration,如下: 1、设置安全管理 Bean public DefaultWebSecurityManager securityManager(CookieRememberMeManager rememberMeManager, CacheManager cacheShiroManager, SessionManager sessio…

Shiro 权限管理入门之认证与授权

Shiro 权限管理什么是权限管理?什么是身份认证?什么是授权? Shiro 是什么?Shiro 的核心架构Shiro 中的认证认证关键对象认证流程认证的开发自定义 RealmSimpleAccountRealm开发自定义 Realm MD5 和 Salt自定义 md5 salt 的 Realm 并验证 Sh…

Shiro权限管理详解

1权限管理1.1什么是权限管理 基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。 权限管理包括用户身份…

Shiro权限控制

目录 认识Shiro的整体架构,各组件的概念简介Shiro与Spring Security比较Shiro整体架构 Shiro认证,授权的过程shiro认证Shiro授权 Shiro自定义的Realm,FilterIniRealm配置文件JdbcRealm自定义Realmshiro加密 Shiro Session管理Shiro 缓存管理S…

Shiro权限管理框架详解

1 权限管理1.1 什么是权限管理 基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。 权限管理包括用户身份认证和授权两部分,简称认证授权…

Shiro 权限管理

一共5个表 用户表角色表权限表用户角色中间表角色权限中间表 权限验证 用户不跟权限直接关联, 可以给用户多个角色, 每个角色都有对应的权限,所以给用户加一个角色,就相当于,给用户赋了对应的权限。一个用户可以有多…

Shiro: 权限管理

一、权限管理 1、什么是权限管理 权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问且只能访问自己被授权的资源。   权限管理包括用户身份认证和授权两部分,简称认证授权。对于需要…

【权限管理框架】一文看懂Shiro权限管理框架!

文章目录 1.JavaWeb中的权限控制2.权限框架核心知识ACL和RBAC2.1.ACL和RBAC简介2.2主流权限框架介绍 3.Shiro架构和基本概念3.1.Shiro的4大核心模块3.2.Shiro权限控制运行流程 4.Shiro简单API案例4.1.项目搭建所需依赖4.2.Shiro认证简单实操4.3.Shiro授权简单实操 5.安全数据来…

【端口扫描工具】nmap核心使用方法

目录 nmap的基础使用: 1.1、常用命令参数: 命令格式: 主机发现: 扫描 扫描速度 扫描端口 1.2、基本扫描 1.3、自定义端口扫描 1.4、Ping扫描 1.5、路由追踪 1.6、扫描网段,C段 1.7、操作系统类型的探测 1.8、nmap万能…