分布式之CAP定理

2024-05-05 15:48
文章标签 分布式 定理 cap

本文主要是介绍分布式之CAP定理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

总结自:

1.CAP Theorem:Revisited

2.网络编程(七):CAP原理推导和应用


先说定义吧

一致性(Consistency):对于某次读取返回的内容是该信息的最新版本。

可用性(Availability):一个正常工作的节点,对于client的请求会在合理的时间内返回一个合理的响应,这个响应不应该是错误也不应该是请求超时。

分区容忍性(Partition Tolerance):当网络分区发生时,系统仍然工作正常。


说说一些注意事项以及认识

1.一致性

不一致并不是像移动通信里面的错误一样,由于干扰的存在产生传输的数据都解码出来错误了。

比如本来拷贝一个变量x,值为1,从node1拷贝到node2,发生错误变成了值为2。

(1)不一致主要是因为需要维护变量x的多个副本,在有些节点或者网络故障的时候,一些对于x变量的修改操作没有在某些节点里面进行,

导致了不同节点之内表示的同一个变量的值不一致。

(2)少数派在crash之后或者在被partition之后,recovery出来执行一些已经执行、没有执行反正不一样的动作。


2.可用性

可用性的概念就是上面提到的概念。值得注意的是,在分析系统的时候我们也经常会将具备可用性的概率也称作可用性。

比如,如果对于单机系统,如果宕机的概率是p,那么就有1-p的概率是具备可用性的,习惯上我们也说可用性是1-p


3.分区容忍性

要弄清分区容忍性,首先就要清楚什么是network partition

network partition就是说,由于网络设备的故障导致原来的网络分裂为2个,分裂出来的2个网络现在是不能互通的了。

而分区容忍性就是说,当network partition发生的时候,系统也能工作正常。

系统也能正常工作的意思是说,系统并没有随着network partition也表现出分裂为两部分的现象,

系统对外仍然表现为仿佛只存在一个统一的整体,并对外提供服务。


4.可用性和分区容忍性的区别

其实在上面的3中,关于分区容忍性的概念还有一个比较模糊的地方,就是什么是系统工作正常。

其实这个系统正常工作就是能不能正常对外提供服务,换句话说就是client来了一个请求,会是一个怎样的结果。

从这个角度来说可用性和分区容忍性的确有很大的相似程度。

我们不妨将整个系统划分为以下几个部分:client、distributed system(node + network)

而我们又可以将distributed system划分为:network和node部分,其中network是node之间通信的网络,而node是对client提供服务的逻辑实体。

我现在的认识是,凡是node对于提供服务的影响就是可用性,凡是network对于提供服务的影响就是分区容忍性。

将这个概念带入到网络编程(七):CAP原理推导和应用里面提供的几个模型中去分析,感觉还是比较清晰地。

特别要注意的是,其实可用性说穿了就是一个请求是否能够顺利达到目的,但是在分析的时候应该对于读请求和写请求分别对待。

因为正如网络编程(七):CAP原理推导和应用里面所列举的,同一个架构下读请求和写请求的可用性改变甚至是相反的。


5.几种网络架构

总结自网络编程(七):CAP原理推导和应用

(1)单机系统

(2)Sharding

(3)多副本读写

(4)Clustering--多副本同步

(5)Clustering--多副本非同步


这篇关于分布式之CAP定理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/962062

相关文章

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

集中式版本控制与分布式版本控制——Git 学习笔记01

什么是版本控制 如果你用 Microsoft Word 写过东西,那你八成会有这样的经历: 想删除一段文字,又怕将来这段文字有用,怎么办呢?有一个办法,先把当前文件“另存为”一个文件,然后继续改,改到某个程度,再“另存为”一个文件。就这样改着、存着……最后你的 Word 文档变成了这样: 过了几天,你想找回被删除的文字,但是已经记不清保存在哪个文件了,只能挨个去找。真麻烦,眼睛都花了。看

开源分布式数据库中间件

转自:https://www.csdn.net/article/2015-07-16/2825228 MyCat:开源分布式数据库中间件 为什么需要MyCat? 虽然云计算时代,传统数据库存在着先天性的弊端,但是NoSQL数据库又无法将其替代。如果传统数据易于扩展,可切分,就可以避免单机(单库)的性能缺陷。 MyCat的目标就是:低成本地将现有的单机数据库和应用平滑迁移到“云”端

laravel框架实现redis分布式集群原理

在app/config/database.php中配置如下: 'redis' => array('cluster' => true,'default' => array('host' => '172.21.107.247','port' => 6379,),'redis1' => array('host' => '172.21.107.248','port' => 6379,),) 其中cl

基于MySQL实现的分布式锁

概述 在单机时代,虽然不需要分布式锁,但也面临过类似的问题,只不过在单机的情况下,如果有多个线程要同时访问某个共享资源的时候,我们可以采用线程间加锁的机制,即当某个线程获取到这个资源后,就立即对这个资源进行加锁,当使用完资源之后,再解锁,其它线程就可以接着使用了。例如,在JAVA中,甚至专门提供了一些处理锁机制的一些API(synchronize/Lock等)。 但是到了分布式系统的时代,这种

Kafka 分布式消息系统详细介绍

Kafka 分布式消息系统 一、Kafka 概述1.1 Kafka 定义1.2 Kafka 设计目标1.3 Kafka 特点 二、Kafka 架构设计2.1 基本架构2.2 Topic 和 Partition2.3 消费者和消费者组2.4 Replica 副本 三、Kafka 分布式集群搭建3.1 下载解压3.1.1 上传解压 3.2 修改 Kafka 配置文件3.2.1 修改zookeep

Java验证辛钦大数定理

本实验通过程序模拟采集大量的样本数据来验证辛钦大数定理。   实验环境: 本实验采用Java语言编程,开发环境为Eclipse,图像生成使用JFreeChart类。   一,验证辛钦大数定理 由辛钦大数定理描述为: 辛钦大数定理(弱大数定理)  设随机变量序列 X1, X2, … 相互独立,服从同一分布,具有数学期望E(Xi) = μ, i = 1, 2, …, 则对于任意正数ε ,

Spring Cloud整合Seata实现分布式事务

文章目录 1.Seata1.1 官网1.2 下载1.3 通过安装包运行seata1.3.1 解压seata-server-1.3.0.zip1.3.2 修改 conf/file.conf 配置文件1.3.3 修改conf/registry.conf配置文件1.3.4 添加seata配置信息到nacos1.3.5 配置seata服务端数据库表结构1.3.6 启动seata 2.Spring

ELK+Spring Cloud搭建分布式日志中心

ELK+Spring Cloud搭建分布式日志中心 1.ELK简介2.资源包下载3.Elasticsearch安装3.1 解压Elasticsearch3.2 修改Elasticsearch的配置文件3.3 修改系统配置3.4 启动Elasticsearch 4.ElasticSearch-head插件安装5.Logstash安装6.Kibana安装7.SpringCloud集成logsta

Redis进阶(七):分布式锁

在分布式系统下,涉及到多个节点访问同一个公共资源的情况,此时需要通过 锁 进行互斥控制:避免出现 线程安全问题。 1.分布式锁的基本实现 超卖问题: 解决: 采用redis实现分布式锁 可用采取:在购票的时候,操作过程中需要先加锁。在redis上设置一个key - value,完成上述买票操作,再把key - value 删掉。如果发现key - value 存在,就加锁失败,无法进