大家好,又见面了,我是你们的朋友全栈君。
- Consistency:强一致性
- Availability:可用性
- Partition tolerance:分区容错性
CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,
最多只能同时较好的满足两个。
因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三大类:
- CA :单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大
- CP:满足一致性,分区容忍必的系统,通常性能不是特别高
- AP:满足可用性,分区容忍性的系统,通常可能对一致性要求低一些
由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容忍性是我们必须需要实现的。
-
CA:传统Oracle数据库
-
AP:大多数网站架构的选择
-
CP:Redis、Mongodb
注意:分布式架构的时候必须做出取舍,一致性和可用性之间取一个平衡。对于大多数 web 应用,其实并不需要强一致性。因此牺牲 C 换取 P,这是目前分布式数据库产品的方向。
一致性与可用性的决择:
对于web2.0网站来说,关系数据库的很多主要特性却往往无用武之地
-
数据库事务一致性需求
很多 web 实时系统并不要求严格的数据库事务,对读一致性的要求很低, 有些场合对写一致性要求并不高。允许实现最终一致性。 -
数据库的写实时性和读实时性需求
对关系数据库来说,插入一条数据之后立刻查询,是肯定可以读出来这条数据的,但是对于很多web应用来说,并不要求这么高的实时性,比方说发一条消息之 后,过几秒乃至十几秒之后,我的订阅者才看到这条动态是完全可以接受的。 -
对复杂的SQL查询,特别是多表关联查询的需求
任何大数据量的 web 系统,都非常忌讳多个大表的关联查询,以及复杂的数据分析类型的报表查询,特别是 SNS 类型的网站,从需求以及产品设计角度,就避免了这种情况的产生。往往更多的只是单表的主键查询,以及单表的简单条件分页查询,SQL的功能被极大的弱化了。
BASE 就是为了解决关系数据库强一致性引起的问题而引起的可用性降低而提出的解决方案。BASE其实是下面三个术语的缩写:
- 基本可用(Basically Available)
- 软状态(Soft state)
- 最终一致(Eventually consistent)
它的思想是通过让系统放松对某一时刻数据一致性的要求来换取系统整体伸缩性和性能上改观。为什么这么说呢,缘由就在于大型系统往往由于地域分布和极高性能的要求,不可能采用分布式事务来完成这些指标,要想获得这些指标,我们必须采用另外一种方式来完成,这里 BASE 就是解决这个问题的办法
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/144255.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...