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过程中看到这个名词,查找各位大佬的文章发现这篇 ...
随机推荐
- k8s 无头service 方式向内发布
k8s 无头service 是指 clusterIP 为 None 的service 案例,假定有一个 deployment,containerPort 端口80,同时还被打上 python=mywe ...
- 15个问题告诉你如何使用Java泛型
摘要:Java泛型其本质是参数化类型,也就是说所操作的数据类型被指定为一个参数(type parameter)这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. Java ...
- Word Reversal(string)
For each list of words, output a line with each word reversed without changing the order of the word ...
- 1-web 服务器 框架。
1.静态网页与动态网页 1.静态网页:无法与服务器进行交互的网页. 2.动态网页:能够与服务器进行交互的网页. 2.web与服务器 1.web:网页(HTML,CSS,JS) 2.服务器:能够给用户提 ...
- 12- winmerge讲解
WinMerge是一款运行于Windows系统下的免费开源的文件比较/合并的工具,使用它可以非常方便的比较多个文档内容设置是文件夹与文件夹之间的差异.适合程序员或者经常撰写文稿的朋友使用.
- hdu4268贪心
题意: 两个人有一些图片,矩形的,问a最多能够覆盖b多少张图片.. 思路: 明显是贪心,但是有一点很疑惑,如果以别人为主,每次都用自己最小的切能覆盖敌人的方法就wa,而以自己为 ...
- codeforces 229C
题意: http://codeforces.com/problemset/problem/229/C 给你一个全图,分成两部分,问你这两个途中一共有多少个三角形. 思 ...
- DexExtractor的原理分析和使用说明
本文博客链接:http://blog.csdn.net/qq1084283172/article/details/53557894 周末有空就写下博客了,今天来扯一扯Android平台的脱壳工具Dex ...
- 分子动力学模拟软件VMD的安装与使用
技术背景 在分子动力学模拟过程中会遇到一些拓扑结构非常复杂的分子模型,所谓的复杂不仅仅是包含众多的原子,还有各种原子之间的成键关系与成键类型等.这时候就非常能够体现一个好的可视化软件的重要性了,这里我 ...
- NumPy之:使用genfromtxt导入数据
目录 简介 genfromtxt介绍 多维数组 autostrip comments 跳过行和选择列 简介 在做科学计算的时候,我们需要从外部加载数据,今天给大家介绍一下NumPy中非常有用的一个方法 ...