分布式理论CAP定理

CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标:

Consistency(一致性): 所有的节点上的数据时刻保持同步,强一致性;
Availability(可用性): 每个请求都能接受到一个响应,无论返回的数据是否一致;
Partition tolerance(分区容错性): 系统应该能持续提供服务,即使在遇到某节点或网络分区故障的时候。
它们的第一个字母分别是 C、A、P。
Eric Brewer 说,这三个指标不可能同时做到。这个结论就叫做 CAP 定理。

下面分别讲述下这三个概念:

1.分区容错性
相对于单点系统,分布式系统会部署在多台机器上,机器之间有可能是跨区域的,比如服务器机房一个在北京,一个在上海,如果在这两个机房之间构建了分布式系统,那么这两个区域的机器是需要通信的,而只要通信就有可能出现通信失败,所以分区容错性P是我们在设计分布式系统中必须要考虑到的问题。

2.一致性
一致性是说客户端从分布式系统中拿数据,不管从那一台机器中获取,都应该是最新的。

 

假设某一时间client向server1服务器更新vo->v1,之后不管从server1还是从server2取值都是v1,这样才满足一致性。而如果cleint往server1写过数据后,从server2中去获取值,此时server1和server2之间还未同步,那么就会依然获取到vo,那么就不满足一致性。

3.可用性
可用性是指,不管任何时候,client向任意一台server发起请求,都能得到响应,不管获得的数据是v0还是v1。

一致性和可用性之间的矛盾

因为分区容错P的必然性,所以一致性C和可用性A无法同时成立。

 

如果保证 Server2的一致性,那么 Server1 必须在写操作时,锁定 Server2 的读操作和写操作。只有数据同步后,才能重新开放读写。锁定期间,Server2 不能读写,这样可用性就无法满足。

如果保证 Server2 的可用性,那么就不能锁定 Server2,所以一致性不成立。

综上所述,Server2 无法同时做到一致性和可用性。系统设计时只能选择一个目标。如果追求强一致性,那么无法保证所有节点的可用性;如果追求所有节点的可用性,那就没法做到强一致性。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272204.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

xmlWriter 以UTF-8格式写xml问题

dom4j中的XMLWriter提供以下几种构造方法: XMLWriter() XMLWriter(OutputFormat format) XMLWriter(OutputStream out) XMLWriter(OutputStream out, OutputFormat format) XMLWriter(Writer writer) XMLWriter(Writer writer, OutputFormat format) 最简单常…

linux线程(互斥锁、条件)

线程概念: 典型的UNIX/Linux进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情。有了多个控制线程后,在程序设计时可以把进程设计成在同一时刻做不止一件事,每个线程各自处理独立的任务。 进程是程序执行时的一个实例…

centos下防火墙设置

1、开启防火墙 systemctl start firewalld2、开放指定端口firewall-cmd --zonepublic --add-port8888/tcp --permanent命令含义: --zone #作用域 --add-port1935/tcp #添加端口,格式为:端口/通讯协议 --permanent #永久生效,没有…

linux网络编程、socket编程

进程间通信: 特点:依赖于内核,造成缺陷——无法实现多机通信。 网络: 地址:由IP地址(IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址&#xf…

【Python】Python Mako模板使用

参考资料: Mako Templates for Python官网:http://www.makotemplates.org/ Python模板库Mako的用法:http://my.oschina.net/u/877170/blog/290438 Mako 1.0.4 Documentation:http://docs.makotemplates.org/en/latest/usage.html#…

简单的ftp服务器(客户端、服务器端、socket)

查看本机IP地址: 127.0.0.1 服务器功能: 可以获取服务器文件使用get指令可以展示服务器有哪些文件使用ls指令进入服务器某个文件夹使用指令cd文件夹名称上传本地文件到服务器,使用指令putpwd可以查看客户端在当前服务器的位置 客户端本地…

JavaScript 全局对象

JavaScript 全局对象 全局属性和函数可用于所有内建的 JavaScript 对象。 顶层函数(全局函数) 函数描述decodeURI()解码某个编码的 URI。decodeURIComponent()解码一个编码的 URI 组件。encodeURI()把字符串编码为 URI。encodeURIComponent()把字符串编码…

Redis持久化方式~RDB 持久化和AOF 持久化

持久化 Redis 是内存型数据库,为了保证数据在断电后不会丢失,需要将内存中的数据持久化到硬盘上。 RDB 持久化 将某个时间点的所有数据都存放到硬盘上。 可以将快照复制到其它服务器从而创建具有相同数据的服务器副本。 如果系统发生故障&#xff0…

Linux文件和目录权限笔记

查看文件或者目录的权限命令:ls -al # -a 表示全部文件包含隐藏文件,-l 表示列出每个文件的详细信息比如执行 ls -altotal 115drwxr--x--- 4 root root 4096 Oct 24 02:07 install.log格式说明:通过 ls -al 格式化输出的文件详细信息&#x…

python基础:序列(列表、元组、字符串)、函数、字典、集合

Python语言运行环境: windowslinuxunixMacos等等 博客记录内容: Python3的所有语法、面向对象思维、运用模块进行编程、游戏编程、计算机仿真。 Python是什么类型的语言: Python是脚本语言,脚本语言(Scripting language)是电脑…

Redis 与 Memcached的区别

Redis 与 Memcached 两者都是非关系型内存键值数据库,主要有以下不同: 数据类型 Memcached 仅支持字符串类型,而 Redis 支持五种不同的数据类型,可以更灵活地解决问题。 数据持久化 Redis 支持两种持久化策略:RDB…

python基础(文件、异常、模块、类、对象)

文件: 打开文件使用open函数,open()的第一个参数是:要打开文件的路径,如果只传入文件名那么将在当前文件下查找文件并打开。第二个参数是:文件的打开模式,其他参数都是默认的。文件的打开模式如下图所示&a…

redis 和 memcached 的区别

redis 和 memcached 的区别 对于 redis 和 memcached 我总结了下面四点。现在公司一般都是用 redis 来实现缓存,而且 redis 自身也越来越强大了! redis支持更丰富的数据类型(支持更复杂的应用场景):Redis不仅仅支持简…

树莓派入门(树莓派登录的几种方式)

什么是嵌入式? 嵌入式即嵌入式系统,IEEE(美国电气和电子工程师协会)对其定义是用于控制、监视或者辅助操作机器和设备的装置,是一种专用的计算机系统。国内普遍认同的嵌入式系统定义是以应用为中心,以计算…

git 如何删除本地创建的仓库(转载自 https://segmentfault.com/q/1010000002996177?_ea=262685)...

可以先清除本地文件夹下的git文件,然后在重新初始化新建的git仓库 //删除文件夹下的所有 .git 文件 find . -name ".git" | xargs rm -Rf接着add,commit等操作即可转载于:https://www.cnblogs.com/xiahl/p/5289266.html

mysql中SQL查询优化方法总结

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t w…

Linux库概念及相关编程(动态库、静态库、环境变量)

分文件编程&#xff1a; 好处&#xff1a;分模块编程思想&#xff0c;功能和责任划分清楚便与调试&#xff0c;main函数简洁&#xff0c;代码易于阅读。编程时头文件有的是使用<>这个符号括起来的&#xff0c;有的是" "使用的是双引号&#xff0c;使用尖括号括…

复利计算器

import java.util.Scanner;public class Fulijisuan {public static void main(String[] args) {// TODO Auto-generated method stubdouble F0;double singlesum0;double doublesum0;double m0;Scanner scanner new Scanner(System.in);System.out.println("1:复利计算\n…

kali扫描内网ip_Metasploit路由转发实现内网渗透

利用背景在渗透的过程中常常会遇到这种场景&#xff1a;我们已经通过web渗透拿下一台内网服务器&#xff0c;为了进一步进行内网渗透&#xff0c;我们会利用“沦陷主机”作为跳板进行进一步的内网渗透&#xff0c;扩大战果。现在假设的场景是此时我们已经拿下一台内网服务器的远…