CAP拾遗

概念

在一个分布式系统(指互相连接并共享数据的节点的集合)中,当涉及读写操作时,只能保证一致性、可用性、分区容错性三者中的两个,另外一个必须被牺牲

  • Consistency
    对某个指定的客户端来说,读操作保证能够返回最新的写操作结果
  • Availaility
    非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应)
  • Partition Tolerance
    当出现网络分区后,系统能够继续“履行职责”
    网络分区是指因为网络故障导致网络不连通,不同节点分布在不同的子网络,各个子网络内网正常

选择

在分布式系统中,网络分区不可避免,因此分区容错性P必须满足。

  • CP
    为保证一致性,当发生分区现象后,N1节点的数据更新到y,但由于N1、N2之间的复制通道中断,N2无法同步最新的数据,当客户访问N2时,N2需要返回Error。
  • AP
    为保证可用性,当发生分区现象后,N1和N2的数据并不同步,当客户C访问N2时,将旧数据返回了。注意:这里N2节点返回x,虽然不是一个“正确”的结果,但是一个“合理”的结果。

拾遗

  • CAP关注的粒度是数据,而不是整个系统
    每个系统不可能只有一种数据类型,有的数据必须选择CP,有的数据必须选择AP,如果只从整个系统的角度去考虑,只会出现顾此失彼的问题
  • 正常运行情况下,不存在CP和AP的,可以同时满足CA
    既要考虑分区发生时选择CP还是AP,也要考虑分区没有发生时如何保证CA
  • 牺牲并不等于什么都不做,需要为分区恢复后做准备

原文地址:https://www.cnblogs.com/yeni/p/11881339.html

时间: 2024-10-18 05:20:11

CAP拾遗的相关文章

位运算总结&拾遗

JavaScript 位运算总结&拾遗 最近补充了一些位运算的知识,深感位运算的博大精深,此文作为这个系列的总结篇,在此回顾下所学的位运算知识和应用,同时也补充下前文中没有提到的一些位运算知识. 把一个数变为大于等于该数的最小的2的幂 一个数为2的幂,那么该数的二进制码只有最高位是1. 根据这个性质,我们来举个栗子,比如有数字10,转为二进制码后为: 1 0 1 0 我们只需把 0 bit的位置全部用1填充,然后再把该二进制码加1就ok了.而x | (x + 1)正好可以把最右边的0置为1,可是

C++拾遗--多线程:临界区解决子线程的互斥

C++拾遗--多线程:临界区解决子线程的互斥 前言 为了解决子线程的互斥问题,windows系统提出了关键段或临界区(CRITICAL_SECTION)的概念.它一共有四个共两对操作:初始化.销毁,进入.离开.它们定义在头文件synchapi.h中. 1.初始化变量 VOID WINAPI InitializeCriticalSection( LPCRITICAL_SECTION lpCriticalSection ); 2.销毁变量 VOID WINAPI DeleteCriticalSect

C++拾遗--多线程:原子操作解决线程冲突

C++拾遗--多线程:原子操作解决线程冲突 前言 在多线程中操作全局变量一般都会引起线程冲突,为了解决线程冲突,引入原子操作. 正文 1.线程冲突 #include <stdio.h> #include <stdlib.h> #include <process.h> #include <Windows.h> int g_count = 0; void count(void *p) { Sleep(100); //do some work //每个线程把g_c

C++拾遗--name_cast 显式类型转换

C++拾遗--name_cast 显式类型转换 前言 C++中提供了四种显式的类型转换方法:static_cast,const_cast,reinterpret_cast,dynamic_cast.下面分别看下它们的使用场景. 显式类型转换 1.staitc_cast 这是最常用的,一般都能使用,除了不能转换掉底层const属性. #include <iostream> using namespace std; int main() { cout << "static_c

谈谈对CAP定理的理解

谈谈对CAP定理的理解 CAP定理的常规解释是任何分布式系统只能在一致性(Consitency),可用性(Availability)和分区容忍性(Partition Tolerance)中三选二.这个解释很让人费解,笔者在看了一些文章后谈谈我对它的理解,还请斧正. 从问题出发 假设我们用一台服务器A对外提供存储服务,为了避免这台服务器宕机导致服务不可用,我们又在另外一台服务器B上运行了同样的存储服务.每次用户在往服务器A写入数据的时候,A都往服务器B上写一份,然后再返回客户端.一切都运行得很好,

分布式系统中的CAP原理

分布式系统中的CAP原理,布布扣,bubuko.com

【D】分布式系统的CAP理论

2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想.2年后,麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP.之后,CAP理论正式成为分布式计算领域的公认定理. CAP理论概述 一个分布式系统最多只能同时满足一致性(Consistency).可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项. CAP的定义 Consistency 一致性 一致性指"all no

Java HashMap拾遗

Java HashMap拾遗 @author ixenos 零碎知识 尽量返回接口而非实际的类型,如返回List.Set.Map而非ArrayList.HashSet.HashMap,便于更换数据结构,而客户端代码不用改变.这就是针对抽象编程 Map.entrySet 方法返回Map映射的 Set 视图Set<Map.Entry<K,V>>,维护entry键值对 该 set 受Map映射支持,所以对Map映射的更改可在此 set 中反映出来,反之亦然! 如果对该 set 进行迭代的

Python之路【第一篇:Python基础之拾遗】

拾遗一:Python种类 1.Cpython: 由C语言实现,将.py文件编译为.pyc文件的字节码,再转换为机器码.    2.Jpython: 由JAVA语言实现,将python的代码编译为JAVA的字节码,再转换为机器码.    3.Ironpython: 由C#实现,将将python的代码编译为C#字节码,再转换为机器码. 4.pypy: 将python的代码转换为字节码的同时也转换为机器码,提高执行速度. 拾遗二:Python的编码 1.ASCII码(American Standard