分布式系统架构常识:CAP理论

转载自 分布式系统架构常识:CAP理论

什么是CAP理论?

2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想。2年后麻省理工学院的Seth Gilbert和NancyLynch从理论上证明了CAP,之后CAP理论正式成为分布式计算领域的公认定理。

CAP理论是由下面三个概念组成的,且在分布式系统中三者不能兼得,只能同时满足两种条件。

一致性(C)

All nodes see the same data at the same time

所有数据库集群节点在同一时间点看到的数据完全一致,即所有节点能实时保持数据同步。

可用性(A)

Reads and writes always succeed

读写操作永远是成功的。即服务一直是可用的,即使集群一部分节点故障,集群整体还能正常响应客户端的读写请求。

分区容错性(P)

The system continues to operate despite arbitrary message loss or failure of part of the system

尽管系统中有任意的信息丢失或故障,系统仍在继续运行。以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。

CAP权衡使用

1、保留CA,放弃P

如果想避免分区容错性问题的发生,一种做法是将所有的数据(与事务相关的)都放在一台机器上。虽然无法100%保证系统不会出错,但不会碰到由分区带来的负面效果。当然这个选择会严重的影响系统的扩展性。

作为一个分布式系统,放弃P,即相当于放弃了分布式,一旦并发性很高,单机服务根本不能承受压力。

像很多银行服务,确确实实就是舍弃了P,只用单台小型机+ORACLE保证服务可用性。

2、保留CP,放弃A

相对于放弃“分区容错性“来说,其反面就是放弃可用性。一旦遇到分区容错故障,那么受到影响的服务需要等待一定的时间,因此在等待期间系统无法对外提供服务。

作为分布式系统,有分区服务发生问题很有可能,如果因为某些服务不能用,导致整个服务都不能用,这个根本不是好的分布式系统。

3、保留AP,舍弃C

这里所说的放弃一致性,并不是完全放弃数据一致性,而是放弃数据的强一致性。即放弃了同一时刻的数据一致性,而保留数据的最终一致性。

以网络购物为例,对只剩下一件库存的商品,如果同时接受到了两份订单,那么较晚的订单将被告知商品告罄。

通常情况下,很多分布式服务系统都是采用该方案,保证可用性性,分布式服务,因为某些分区服务发生问题,先容忍,最终通过一些折中的方法达到最终数据一致性。


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

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

相关文章

GIt代码管理仓库

1.Git的概念 a.Git是一个代码版本控制工具&#xff0c;有下面几个特点 <1>Git可以用于备份项目代码 <2>Git可以管理代码的各个版本 <3>Git可以方便大家协同工作 <4>Git可以方便代码追责 b.Git和SVN对比 SVN是集中式的版本控制系统&#xff0c;而Git是…

程序员三年的门槛该如何跨过去?

转自&#xff1a; http://blog.csdn.net/singit/article/details/78668490第一阶段&#xff1a;三年 我认为三年对于程序员来说是第一个门槛&#xff0c;这个阶段将会淘汰掉一批不适合写代码的人。这一阶段&#xff0c;我们走出校园&#xff0c;迈入社会&#xff0c;成为一名程…

静态资源Html基础语法

1.div划分【样式控制】 <style>div {/*显示边框*/border: 1px solid pink;/*宽度 占用屏幕的60%*/width: 60%;/*高度 500像素*/height: 500px;/*边框外边距*/margin: auto;/*文字居中*/text-align: center;/*height: 500px;*//*line-height: 500px;*/}</style>2.d…

关系型数据的分布式处理系统:Cobar

转载自 关系型数据的分布式处理系统&#xff1a;CobarCobar简介 Cobar是关系型数据的分布式处理系统&#xff0c;它可以在分布式的环境下像传统数据库一样为您提供海量数据服务。Github&#xff1a;https://github.com/alibaba/cobar整体架构图&#xff1a;快速启动场景 系统对…

thinking-in-java(16) 数组

【16.1】数组有什么特殊 1&#xff09;数组与其他类型容器的区别&#xff1a; 效率&#xff0c;类型和保持基本类型的能力&#xff1b;数组是效率最高的存储和随机访问对象引用序列的方式&#xff1b;数组大小固定&#xff0c;容器大小可以不固定&#xff0c;所以这增加了弹性…

推荐一个在线创作流程图、思维导图软件—ProcessOn

转载自 推荐一个在线创作流程图、思维导图软件—ProcessOn 最近要画流程图&#xff0c;破解了半天Visio2016没搞定&#xff0c;2016的估计都被封了&#xff0c;Visio收费又过贵&#xff0c;又不想折腾低版本的破解&#xff0c;所以找了个在线画图平台ProcessOn&#xff0c;没想…

静态资源Css基础语法

1.css的引入方式 <1>内联样式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>引入方式1</title> </head> <body><!--内联样式--><h1 style"color: red; fon…

DevExperience(1712)

【1】在 DML 或 DDL 语句中&#xff0c;不要添加 数据库表前缀&#xff1a; 因为开发环境的数据库表名 和 生产环境的数据库表名 有可能不一样&#xff1b; 这个时候就有可能报 SQL 异常&#xff1b;造成生产事故&#xff1b;不推荐&#xff1a; select * from db_name.tbl_nam…

常用缓存淘汰算法(LFU、LRU、ARC、FIFO、MRU)

转载自 常用缓存淘汰算法&#xff08;LFU、LRU、ARC、FIFO、MRU&#xff09;缓存算法是指令的一个明细表&#xff0c;用于决定缓存系统中哪些数据应该被删去。 常见类型包括LFU、LRU、ARC、FIFO、MRU。最不经常使用算法&#xff08;LFU&#xff09;&#xff1a; 这个缓存算法使…

动态资源Servlet接口

1.Servlet接口的作用 Servlet是运行在Web服务器上的应用程序。Servlet本身是一个Java接口&#xff0c;它定义了浏览器访问服务器程序的规则&#xff0c;我们写服务器程序只需要按照需求复写Servlet方法即可 2.Servlet的体系结构 <1>直接继承实现类结构 <2>其他…

thinking-in-java(14)类型信息

【0】开场白 1&#xff09;运行时类型信息使得你可以在程序运行时发现和使用类型信息&#xff1b;2&#xff09;java是如何在运行时识别对象和类信息的&#xff1f;两种方式&#xff1a; 方式1&#xff09;传统的RTTI&#xff08;RunTime Type Identification 运行时类型定义&a…

服务降级的概念及应用手段

转载自 服务降级的概念及应用手段什么是服务降级 服务降级&#xff0c;就是对不怎么重要的服务进行低优先级的处理。说白了&#xff0c;就是尽可能的把系统资源让给优先级高的服务。资源有限&#xff0c;而请求是无限的。如果在并发高峰期&#xff0c;不做服务降级处理&#xf…

Servlet其他关联类---ServletConfig类

1.ServletConfig介绍 a.ServletConfig是Servlet的配置参数对象&#xff0c;在Servlet的规范中&#xff0c;允许为每一个Servlet都提供一些初始化的配置。所以&#xff0c;每个Servlet都有一个自己的ServletConfig b.作用:在Servlet的初始化时&#xff0c;把一些配置信息传递给…

thinking-in-java(19)枚举类型

【0】开场白 1&#xff09;关键字 enum 可以将一组具名的值的有限集合创建为一种新的类型&#xff0c;而这些具名的值可以作为常规的程序组件使用&#xff1b;2&#xff09;所有的枚举类都继承自 Enum&#xff0c;通过 enumClass.getSuperclass() class java.lang.Enum 得知。…

8条关于Web前端性能的优化建议

转载自 8条关于Web前端性能的优化建议 一般网站优化都是优化后台&#xff0c;如接口的响应时间、SQL优化、后台代码性能优化、服务器优化等。高并发情况下&#xff0c;对前端web优化也是非常重要的。 下面说说几种常见的优化措施。 1、HTML CSS JS位置 一般需要将CSS放页面最上…

Servlet其他关联类---ServletContext类

1.ServletContext介绍 <1>域对象 域对象指的是对象有作用域。也就是有作用范围。域对象可以实现数据的共享。不同作用范围的域对象&#xff0c;共享数据的能力也不一样。在Servlet规范中&#xff0c;一共有4个域对象。ServletContext就是其中的一个。它也是web应用中最…

分布式Session共享解决方案

转载自 分布式Session共享解决方案 Session是服务器用来保存用户操作的一系列会话信息&#xff0c;由Web容器进行管理。单机情况下&#xff0c;不存在Session共享的情况&#xff0c;分布式情况下&#xff0c;如果不进行Session共享会出现请求落到不同机器要重复登录的情况&…

thinking-in-java(20)注解

【1】注解介绍 1&#xff09;注解是什么&#xff1f; 注解&#xff08;元数据&#xff09;是 java提供的一种对程序元素&#xff08;如类&#xff0c;方法&#xff0c;变量&#xff09;打标记的方法&#xff1b;以便运行程序或编译器可以识别这些元素进行特殊处理&#xff1b…

Servlet---注解开发

1.引入 在Servlet3.0以后的版本提供了Servlet注解配置&#xff0c;大大简化了代码编写。它可以替代xml文件的配置 2.代码实现 <1>注解开发代码如下&#xff1a; WebServlet(value "/servlet1", initParams {WebInitParam(name "charset", val…

Git操作常用的命令都在这里了

转载自 Git操作常用的命令都在这里了 创建仓库 git init 在当前目录执行&#xff0c;会生成 .git目录文件&#xff0c;这个和SVN一致。 提交到仓库 git commit -m "first commit" -m&#xff1a;表示提交描述&#xff0c;必须要填。 添加到远端仓库 git remote …