CAP定理整理_craig定理

CAP定理整理_craig定理CAP定理是分布式系统设计中最基础、最关键的理论,CAP定理又称CAP原则,指的是在一个分布式系统中,Consistency(一致性)、Availability(可用性)、Partitiontolerance(分区容错性),最多只能同时三个特性中的两个,三者不可兼得CAP的定义Consistency(一致性):“allnodesseethesamedataatthe…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

CAP定理是分布式系统设计中最基础、最关键的理论,CAP定理又称CAP原则,指的是在一个分布式系统中,Consistency(一致性) Availability(可用性)Partition tolerance(分区容错性)最多只能同时三个特性中的两个,三者不可兼得

CAP的定义

Consistency (一致性):

“all nodes see the same data at the same time”,即更新操作成功并返回客户端后,所有节点在同一时间的数据完全一致,这就是分布式的一致性。一致性的问题在并发系统中不可避免,对于客户端来说,一致性指的是并发访问时更新过的数据如何获取的问题。从服务端来看,则是更新如何复制分布到整个系统,以保证数据最终一致。即每次读取要么获得最近写入的数据,要么获得一个错误

Availability (可用性):

可用性指“Reads and writes always succeed”,即服务一直可用,而且是正常响应时间。好的可用性主要是指系统能够很好的为用户服务,不出现用户操作失败或者访问超时等用户体验不好的情况。也就是每次请求都能获得一个响应,这个响应是非错误的,但是不确保返回的是最新写入的数据

Partition Tolerance (分区容错性):

即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性或可用性的服务。

分区容错性要求能够使应用虽然是一个分布式系统,而看上去却好像是在一个可以运转正常的整体。比如现在的分布式系统中有某一个或者几个机器宕掉了,其他剩下的机器还能够正常运转满足系统需求,对于用户而言并没有什么体验上的影响。

取舍策略

CAP三个特性只能满足其中两个,那么取舍的策略就共有三种:

CA without P:如果不要求P(不允许分区),则C(强一致性)和A(可用性)是可以保证的。但放弃P的同时也就意味着放弃了系统的扩展性,也就是分布式节点受限,没办法部署子节点,这是违背分布式系统设计的初衷的。比如两阶段提交(2PC)

CP without A:如果不要求A(可用),相当于每个请求都需要在服务器之间保持强一致,而P(分区)会导致同步时间无限延长(也就是等待数据同步完才能正常访问服务),一旦发生网络故障或者消息丢失等情况,就要牺牲用户的体验,等待所有数据全部一致了之后再让用户访问系统。注意,CP关注的是系统中大多数人的一致性协议,比如Paxos 算法 (Quorum 类的算法)。设计成CP的系统其实不少,最典型的就是分布式数据库,如Redis、HBase等。对于这些分布式数据库来说,数据的一致性是最基本的要求,因为如果连这个标准都达不到,那么直接采用关系型数据库就好,没必要再浪费资源来部署分布式数据库。eg. Zookeeper

 AP without C:要高可用并允许分区,则需放弃一致性。一旦分区发生,节点之间可能会失去联系,为了高可用,每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。典型的应用就如某米的抢购手机场景,可能前几秒你浏览商品的时候页面提示是有库存的,当你选择完商品准备下单的时候,系统提示你下单失败,商品已售完。这其实就是先在 A(可用性)方面保证系统可以正常的服务,然后在数据的一致性方面做了些牺牲,虽然多少会影响一些用户体验,但也不至于造成用户购物流程的严重阻塞。eg. Eureka

作为服务发现产品,可用性优先级较高,一致性的特点则不重要,哪怕返回错误的数据,也比不返回结果要好一些。

服务列表变更Zookeeper服务端会有通知,Eureka则通过长轮询来实现,将来会实现watch机制。

我司使用了Zookeeper作为服务注册发现中间件,但是如上文所述,Zookeeper是CP系统,无法保证分布式下的可用性,需要使用AP系统。因此,公司大佬们实现AP系统服务注册发现,保证了数据的最终一致性。根据 Netflix Eureka 研发并优化的golang版本服务注册发现系统Discovery,与caster平台进行结合,基于k8s pod(k8s项目中的原子调度单位)实现滚动发布、蓝绿发布等,客户端使用HTTP协议与注册中心交互。 网络闪断时服务可开启自我保护,保证健康的服务可用。由于公司各部门开发语言不一致,有golang、java、python、php、C++等,再实现各个语言的sdk,基于http协议保证交互简易。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/226838.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • oracle数据库的随堂笔记(三)-过程、函数、触发器

    oracle数据库的随堂笔记(三)-过程、函数、触发器

  • Java单例模式中双重检查锁的问题

    Java单例模式中双重检查锁的问题单例创建模式是一个通用的编程习语。和多线程一起使用时,必需使用某种类型的同步。在努力创建更有效的代码时,Java程序员们创建了双重检查锁定习语,将其和单例创建模式一起使用,从而限制同步代码量。然而,由于一些不太常见的Java内存模型细节的原因,并不能保证这个双重检查锁定习语有效。它偶尔会失败,而不是总失败。此外,它失败的原因并不明显,还包含Java内存模型的一些隐秘细节。这些事实将导致代

  • 20210225-1 Python错误与异常「建议收藏」

    20210225-1 Python错误与异常「建议收藏」一、什么是异常Python错误与异常什么是异常>异常是一个事件,该事件会在程序执行过程中发生,影响程序的正常执行。一般情况下,在Python无法正常处理程序时就会发生异常。异常是Pyth

  • JVM内存划分[通俗易懂]

    JVM内存划分[通俗易懂]目录 1.概述2.运行时数据区域 2.1程序计数器2.2Java虚拟机栈2.3本地方法栈2.4Java堆2.5方法区2.6补充2.6.1运行时常量池和Class文件常量池2.6.2直接内存3.HotSpot虚拟机3.1内存划分3.2对象的创建、内存布局、访问定位3.2.1对象的创建3.2.2对象的内存布局…

  • 较新颖的智能优化算法[通俗易懂]

    较新颖的智能优化算法[通俗易懂]32个较新颖的智能优化算法序号方法参考文献年份1人群搜索算法Dai,C.,Y.Zhu,andW.Chen.Seekeroptimizationalgorithm.inInternationalConferenceonComputationalandInformationScience.2006.Springer.20062人工蜂群算法Karaboga,D.andB.J.J.o.g.o.Basturk,Apowerfu

  • HUAWEI Mate40Pro解除账号忘记密码ID强制刷机鸿蒙系统激活锁能解开吗

    HUAWEI Mate40Pro解除账号忘记密码ID强制刷机鸿蒙系统激活锁能解开吗华为Mate40pro账号锁过程需要准备一下工具:windwos系统电脑一台(有条件可以准备配置好点的电脑,可以有效提高解锁效率)。 准备Tpye-c数据线一根(一拖三的数据线不行),其他品牌的数据线也可以。 电脑下载todesk远程控制软件,(进行电脑远程救援)。 安装专业USB端口镜像工具。 关注【刷机爱好者】微信公众账号,获取更多帮助!本次教程简要及目录第一步:将用户电脑USB镜像到我的电脑,进行USB1.0模式底层烧录。第二步:底层烧录完成,成功获取临时权限,手机自动进入fas.

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号