CAP理论之思考
分布式系统的最大难点就是各个节点如何保持一致。最近我在工作中就遇到这样的问题,不同节点之间,彼此通过API,进行通信,交互数据,但有些服务节点存在延迟等问题,导致我看到的并不是实时的数据,以及系统更新时,更新A服务,间接影响到B服务,而B服务受到影响后,C服务随之受到影响,以此类推。对于公司技术架构平台设计者之一的我而言,虽然采用一些临时性措施解决了这些问题,但我不得不深入的去思考分布式一些本质上的东西,因为很多问题不从根本上弄清楚并解决,后面只会以一种或多种不同的状态存在着。搞清楚理论并带着直面的问题思考,或许能找到解决问题的最佳方式。
一、什么是CAP理论(引用维基百科解释)?
在理论计算机科学中,CAP理论,又被称作布鲁尔定理,它指出对于一个分布式计算系统来说,不可能同时满足以下三点:
- 一致性(等同于所有节点访问同一份最新的数据副本);
- 可用性(每次请求都能获取到非错的响应——但是不保证获取的数据为最新数据);
- 分区容错性(以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择)。
C对应的是一致性,A对应的是可用性,P对应的是分区容错性。
二、为什么说C、A、P只可同时满足两点,而不能三者兼顾呢?
一致性、可用性,分区容错性,分区容错性是一致性和可用性的前提。
这里我引用《分布式服务架构:原理、设计与实战》来解释为什么不能三者兼顾,该书是这样概括:
CAP原理证明,任何分布式系统只可满足以上两点,无法三者兼顾。由于关系型数据库是单节点无复制的,因此不具有分区容错性,但是具有一致性和可用性,而分布式的服务化系统都需要满足分区容忍性,那么我们必须在一致性和可用性之间进行权衡。如果在网络上有消息丢失,也就是出现了网络分区,则复制操作可能会被延后,如果这时我们的使用方等待复制完成再返回,则可能导致有限时间内无法返回,就失去了可用性;而如果使用方不等待复制完成,而在主分片写完后直接返回,则具有了可用性,但是失去了一致性。
三、C、A、P究竟该如何取舍?
从我个人的角度来看,并结合目前的情况,分区容错性和可用性于我们目前是最重要的,数据上我们可以允许有一定或部分的延迟。A和P是适合我们目前的情况。
四、那么如何实现A和P呢?即如何实现可用性和分区容错性?
最直接的方式就是分布式(分布式中的每个节点都需要集群,通过集群的冗余极大的保证可用性,不同节点的职责保证系统的稳定性),综合利用多台服务器提高整体性能,这个性能包括提高容错率、提高并发处理能力、各个节点的服务器计算能力等。
之前写过一篇文章《从单体架构到分布式微服务架构的思考》或许让大家对分布式应用系统有一定的理解。
五、总结
近来遇到了很多问题,让我不得不更深入地学习与思考,在不断深入地学习与思考以及实践过程中,摸索出适合公司的分布式架构体系,但这并不是一件很容易的事情,面对着很多突发情况和问题,我需要保持冷静,并积极寻找问题解决的办法。
CAP理论之思考的更多相关文章
- 关于Mongodb的Cap理论的思考(转载)
大约在五六年前,第一次接触到了当时已经是hot topic的NoSql.不过那个时候学的用的都是mysql,Nosql对于我而言还是新事物,并没有真正使用,只是不明觉厉.但是印象深刻的是这么一张图片( ...
- CAP理论与MongoDB一致性、可用性的一些思考
大约在五六年前,第一次接触到了当时已经是hot topic的NoSql.不过那个时候学的用的都是mysql,Nosql对于我而言还是新事物,并没有真正使用,只是不明觉厉.但是印象深刻的是这么一张图片( ...
- CAP理论
自打引入CAP理论的十几年里,设计师和研究者已经以它为理论基础探索了各式各样新颖的分布式系统,甚至到了滥用的程度.NoSQL运动也将CAP理论当作对抗传统关系型数据库的依据. CAP理论主张任何基于网 ...
- (转)CAP理论十二年回顾:"规则"变了
编者按:由InfoQ主办的全球架构师峰会将于2012年8月10日-12日在深圳举行,为了更好地诠释架构的意义.方法和实践,InfoQ中文站近期会集中发布一批与架构相关的文章,本篇即为其中之一.Info ...
- 分布式系统之CAP理论
任老师第一节主要讲了分布式系统实现时候面临的八个问题,布置的作业就是这个,查询CAP理论. 笔者初次接触分布式,所以本文主要是一个汇总. 一.CAP起源 CAP原本是一个猜想,2000年PODC大会的 ...
- 重温分布式系统的CAP理论
1. CAP理论的历史 2000年7月,Eric Brewer教授提出CAP猜想:2年后,Seth Gilbert和Nancy Lynch从理论上证明了CAP:之后,CAP理论正式成为分布式计算领域的 ...
- ZooKeeper和CAP理论及一致性原则
一.CAP理论概述CAP理论告诉我们,一个分布式系统不可能同时满足以下三种 一致性(C:Consistency)可用性(A:Available)分区容错性(P:Partition Tolerance) ...
- CAP 理论
CAP理论被很多人拿来作为分布式系统设计的金律,然而感觉大家对CAP这三个属性的认识却存在不少误区.从CAP的证明中可以看出来,这个理论的成立是需要很明确的对C.A.P三个概念进行界定的前提下的.在本 ...
- 【Redis数据库】再有人问你CAP理论是什么,就把这篇文章发给他
CAP是Consistency(一致性),Availability(可用性),Partition tolerance(分区容错性)的缩写.在学习redis过程中看到这个名词,查找各位大佬的文章发现这篇 ...
随机推荐
- Day01_10_Scanner 接收用户输入
Scanner函数 import java.util.Scanner; class ScannerTest { public static void main(String[] args){ Syst ...
- aws EKS
登陆aws账号 1)找到eks 相关的项目,并进入 2)填写集群的名称,然后下一步 3)集群设置页面,添加集群服务角色 (aws eks cluster role) 4)继续集群配置 5)集群创建完成 ...
- Mybatis一级缓存和结合Spring Framework后失效的源码探究
1.在下面的案例中,执行两次查询控制台只会输出一次 SQL 查询: mybatis-config.xml <?xml version="1.0" encoding=" ...
- 已知a=a
高中时酷爱经济学. 薄薄的纸片竟然决定着整个社会的运转趋势,整个人生的起伏也是靠着纸片来衡量的. 可笑的是你怎么闹腾也逃不过康波周期等一系列命中注定的路线,即,已知a=a,那么a等于且仅等于a. 所有 ...
- 1017. Convert to Base -2
Given a number N, return a string consisting of "0"s and "1"s that represents it ...
- jQuery+AJAX实现纯js分页功能
使用jQuery的AJAX技术,在bootstrap的框架下搭建的纯js分页 bootstrap作为Twitter推的一款前端框架,效果个人还是觉得很不错的.这次只是拿来作为网页元素的css样式表使用 ...
- Python3解决棋盘覆盖问题的方法示例
本文实例讲述了Python3解决棋盘覆盖问题的方法.分享给大家供大家参考,具体如下: 问题描述: 在2^k*2^k个方格组成的棋盘中,有一个方格被占用,用下图的4种L型骨牌覆盖所有棋盘上的其余所有方格 ...
- c语言编程学习之二维数组
二维数组 c语言按照行主序存储二维数组.也就是说,二维数组元素在内存中的位置是连续的,每行末尾元素(若不是最后一行)的下一个元素就是下一行的首元素. 如下图所示 接下来我们来分析一下如何将二维数组所有 ...
- GDI编程基础
窗口和视口 视口是基于设备的采用的是设备坐标(单位:像素),窗口是基于程序的采用的是逻辑坐标(单位:像素/毫米/厘米等). 在默认的映射模式下,视口是与窗口等同的.但是如果改变其映射模式,则其对应的单 ...
- 敏杰开题——软工团队项目选择与NABCD分析
这是一篇软件工程课程博客 Q A 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 团队项目选择 我们在这个课程的目标是 团队协作实践敏捷开发 这个作业在哪个具 ...