分布式系统的CAP原理及其应用

分布式系统的CAP原理及其应用什么是分布式系统的CAP原理    在分布式系统中,一致性(C)指每一次读都得到最近的写数据,或者一个异常;可用性(A)指每一个请求都得到一个非异常的响应,而不保证取得最近的写数据;分区容错性(P)是指结点间网络异常时,系统仍然可以继续运行。原理指出,一个分布式系统最多只能提供CAP中的两个保障。  值得注意的是,CAP原理指的是在分区发生时,只能在保证一致性或可用性中二选其一。而非因为分区不…

大家好,又见面了,我是你们的朋友全栈君。

什么是分布式系统的CAP原理

    在分布式系统中,一致性(C)指每一次读都得到最近的写数据,或者一个异常;可用性(A)指每一个请求都得到一个非异常的响应,而不保证取得最近的写数据;分区容错性(P)是指结点间网络异常时,系统仍然可以继续运行。原理指出,一个分布式系统最多只能提供CAP中的两个保障。

    值得注意的是,CAP原理指的是在分区发生时,只能在保证一致性或可用性中二选其一。而非因为分区不可避免,在系统设计时必须放弃一致性或可用性,没有分区发生时可以同时保证一致性和可用性。

CAP原理的简单模型解释

    如图,网络中有两个结点N1和N2,可以简单的理解N1和N2分别是两台计算机,他们之间网络可以连通,N1中有一个应用程序A,和一个数据库V,N2也有一个应用程序B和一个数据库V。

分布式系统的CAP原理及其应用

    正常运行时的场景如下图:

分布式系统的CAP原理及其应用

    当结点间的网络发生问题时,N1和N2间的数据同步失效。此时系统只能在一致性和可用性中二选一。选择一致性时,结点将对请求返回不可用异常。选择可用性时,结点将返回现有的数据,而此时数据可能已经过时。

分布式系统的CAP原理及其应用

CAP原理在互联网场景的应用

    对于多数大型互联网应用的场景,主机众多、部署分散,而且现在的集群规模越来越大,所以节点故障、网络故障是常态,而且要保证服务可用性达到N个9,即保证P和A,舍弃C(退而求其次保证最终一致性)。虽然某些地方会影响客户体验,但没达到造成用户流失的严重程度。

    对于涉及到钱财这样不能有一丝让步的场景,C必须保证。网络发生故障宁可停止服务(或者只读不写),这是保证CA,舍弃P。

CAP原理在数据库领域的应用

    CAP理论在数据库领域也有广泛的应用,如下图中按照CAP中三选二对数据库系统的分类:

分布式系统的CAP原理及其应用

    参考资料

1. http://www.hollischuang.com/archives/666

2. http://zohararad.github.io/presentations/big-data-introduction/

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

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

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

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

(0)
blank

相关推荐

  • 什么是敏捷开发_一个完整的敏捷开发的流程

    什么是敏捷开发_一个完整的敏捷开发的流程0、先来一张导图1、概念简单的说,敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换言之,

  • ArrayDeque in Java[通俗易懂]

    ArrayDeque in Java[通俗易懂]ArrayDequeinJavaArrayDequeinJavaprovidesawaytoapplyresizable-arrayinadditiontotheimplementationoftheDequeinterface.ItisalsoknownasArrayDoubleEndedQueueorArrayDeck.Thi…

  • quota命令详细拓展使用方法,RHEL 7中quota命令搭载方法!磁盘容量配额!

    磁盘容量配额Linux系统的设计初衷就是让许多人一起使用并执行各自的任务,从而成为多用户、多任务的操作系统。但是,硬件资源是固定且有限的,如果某些用户不断地在Linux系统上创建文件或者存放电影,硬盘空间总有一天会被占满。针对这种情况,root管理员就需要使用磁盘容量配额服务来限制某位用户或某个用户组针对特定文件夹可以使用的最大硬盘空间或最大文件个数,一旦达到这个最大值就不再允许继续使用。可以使用quota命令进行磁盘容量配额管理,从而限制用户的硬盘可用容量或所能创建的最大文件个数。quota命令还有软限

  • mysql 自动当前时间_Mysql 自动获取当前时间[通俗易懂]

    mysql 自动当前时间_Mysql 自动获取当前时间[通俗易懂]实现方式:1、将字段类型设为TIMESTAMP2、将默认值设为CURRENT_TIMESTAMP举例应用:1、MySQL脚本实现用例–添加CreateTime设置默认时间CURRENT_TIMESTAMPALTERTABLE`table_name`ADDCOLUMN`CreateTime`datetimeNULLDEFAULTCURRENT_TIMESTAMPC…

  • 继续測试,一如既往的稳定

    继续測试,一如既往的稳定

  • python数组_js数组添加数据

    python数组_js数组添加数据记linuxshell的两个小技巧:shell数组和字符串判断最近在使用shell写脚本的时候,想实现python中两个很简单的功能:1:判断一个字符串是否包含另一个字符串。2:怎么用实现python的列表功能。这里跟大家分享一下。1:判断一个字符串是否包含另一个字符串:123456string=”abcdefg”…文章余二五2017-11-151010浏览量Python数据类型Python…

发表回复

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

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