分布式之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

相关文章

Redis实现分布式锁全过程

《Redis实现分布式锁全过程》文章介绍Redis实现分布式锁的方法,包括使用SETNX和EXPIRE命令确保互斥性与防死锁,Redisson客户端提供的便捷接口,以及Redlock算法通过多节点共识... 目录Redis实现分布式锁1. 分布式锁的基本原理2. 使用 Redis 实现分布式锁2.1 获取锁

Redis分布式锁中Redission底层实现方式

《Redis分布式锁中Redission底层实现方式》Redission基于Redis原子操作和Lua脚本实现分布式锁,通过SETNX命令、看门狗续期、可重入机制及异常处理,确保锁的可靠性和一致性,是... 目录Redis分布式锁中Redission底层实现一、Redission分布式锁的基本使用二、Red

redis和redission分布式锁原理及区别说明

《redis和redission分布式锁原理及区别说明》文章对比了synchronized、乐观锁、Redis分布式锁及Redission锁的原理与区别,指出在集群环境下synchronized失效,... 目录Redis和redission分布式锁原理及区别1、有的同伴想到了synchronized关键字

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Jenkins分布式集群配置方式

《Jenkins分布式集群配置方式》:本文主要介绍Jenkins分布式集群配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装jenkins2.配置集群总结Jenkins是一个开源项目,它提供了一个容易使用的持续集成系统,并且提供了大量的plugin满

Golang实现Redis分布式锁(Lua脚本+可重入+自动续期)

《Golang实现Redis分布式锁(Lua脚本+可重入+自动续期)》本文主要介绍了Golang分布式锁实现,采用Redis+Lua脚本确保原子性,持可重入和自动续期,用于防止超卖及重复下单,具有一定... 目录1 概念应用场景分布式锁必备特性2 思路分析宕机与过期防止误删keyLua保证原子性可重入锁自动

基于MongoDB实现文件的分布式存储

《基于MongoDB实现文件的分布式存储》分布式文件存储的方案有很多,今天分享一个基于mongodb数据库来实现文件的存储,mongodb支持分布式部署,以此来实现文件的分布式存储,需要的朋友可以参考... 目录一、引言二、GridFS 原理剖析三、Spring Boot 集成 GridFS3.1 添加依赖

Redis实现分布式锁全解析之从原理到实践过程

《Redis实现分布式锁全解析之从原理到实践过程》:本文主要介绍Redis实现分布式锁全解析之从原理到实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、背景介绍二、解决方案(一)使用 SETNX 命令(二)设置锁的过期时间(三)解决锁的误删问题(四)Re

Gradle下如何搭建SpringCloud分布式环境

《Gradle下如何搭建SpringCloud分布式环境》:本文主要介绍Gradle下如何搭建SpringCloud分布式环境问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Gradle下搭建SpringCloud分布式环境1.idea配置好gradle2.创建一个空的gr

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式