Linux/Python学习论坛-京峰教育

 找回密码
 立即注册

一键登录:

搜索
热搜: 活动 交友 discuz
查看: 945|回复: 0

高可用架构之ACID、BASE及CAP

[复制链接]

238

主题

288

帖子

1925

积分

超级版主

Rank: 8Rank: 8

积分
1925
QQ
发表于 2015-3-20 16:48:14 | 显示全部楼层 |阅读模式
高并发、大流量的网站的架构会显得比较重要,今天来说说关于高可用架构的几个概念,都是从网上发现的,我在这里归纳与总结一下,与大家共同学习。

ACID
ACID,指数据库事务正确执行的四个基本要素的缩写.包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的数据库系统,必需要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求.

  原子性
  整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
  一致性
  在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
  隔离性
  两个事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据。
  持久性
  在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

关于数据库完整性的说明
数据完整性

保证数据完整性(主要指数据的正确性与一致性)是数据库管理员的最重要任务之一。

可以通过限制(Constraint)、规则(Rule)和默认(Default)保证数据的完整性,也可以在应用程序层保证数据完整性(这是应用程序设计的问题),或通过存储过程和触发器保证。

数据完整性类型包括:实体完整性、参照完整性和用户定义完整性

实体完整性(Entity Integrity) :现实世界的实体是可区分的,即它们具有某种唯一性标识。相应地,关系模型中主键应作为唯一性标识。因此实体完整性规则规定基本关系的所有主键(Primary Key)都不能取空值(NULL) 。

参照完整性(Referential Integrity) :参照完整性维护表与表之间的相关性,通常用“主键(Primary Key)/外键(Foreign Key)”保证,其中Foreign Key可以取NULL值,或取其参照表中Primary Key的取值。

用户定义的完整性(User_defined Integrity ):针对某一具体数据的约束条件,由应用环境决定。例如:某个属性必须取惟一值(UNIQUE)、某个非主属性不能取NULL值、某个属性的取值范围在0~100之间(CHECK)等等。

保证数据完整性

声明性数据完整性

声明性数据完整性用限制(Constraint)、规则(Rule)和默认(Default)在数据库中提供保证,这是保证完整性的较好方法。它驻留在数据库内,编程简单,开销小,能更集中管理和保证数据的一致性。

过程性数据完整性

过程性数据完整性用存储过程、触发器和应用程序代码保证,通常较为复杂、开销较大,但可以执行更多的业务规则。

通常,过程性数据完整性是声明性数据完整性的补充
Via:http://hi.baidu.com/%C9%FA%B4%E6%B5%C4%D7%CA%B1%BE/blog/item/228868f3233a8158342acc2a.html

CAP
C: Consistency 一致性
A: Availability 可用性
P: Tolerance of network Partition 分区容忍性

熊掌与鱼不可兼得,三个目标不能同时满足。如果对"一致性"要求高,且必需要做到"分区",那么就要牺牲可用性;而对大型网站,可用性与分区容忍性优先级要高于数据一致性,一般会尽量朝着 A、P 的方向设计,然后通过其它手段保证对于一致性的商务需求。

Via:CAP:高可用架构的另一基石

下面这段eBay的文章更好理解
对于高流量的网站来说,我们必须选择分区耐受性,因为它是实现可伸缩的根本。对于24x7运行的网站,选择可用性也是理所当然的。于是只好放弃即时一致性(immediate consistency)。
Via:可伸缩性最佳实践:来自eBay的经验

对一致性的理解:
比如说,如果你选择放松一致性要求,那么开发人员就要决定怎样处理这种情形——对系统的写入不会立即反映到对应的读出中

BASE
    * Basically Availble --基本可用
    * Soft-state --软状态/柔性事务
    * Eventual Consistency --最终一致性
Via:详细看BASE -- 高可用架构的基石之一

关于可用性的一些说明
保证持续稳定的系统运行时间变得越来越重要,而传统意义上的小型机系统让普通用户望而却步。用户需要的是更高的可用性以及更低的成本。高可用性(HA)技术能自动检测服务器节点和服务进程错误、失效,并且当发生这种情况时能够自动适当地重新配置系统,使得集群中的其他节点能够自动承担这些服务,以实现服务不中断。

Cluster应用可分为三方面:High-Availability(HA)(高可用性集群)、Load Balance(负载均衡集群)、Scientific(科学集群)。在集群的这三种基本类型之间,经常会发生混合与交杂。于是,可以发现高可用性集群也可以在其节点之间均衡用户负载,同时仍试图维持高可用性程度。同样,可以从要编入应用程序的集群中找到一个并行群集,它可以在节点之间执行负载均衡。
Via:详细看在Linux下架构高可用性方案

参考:
牺牲一致性来换取分布式架构的可伸缩性

可伸缩性原则

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|京峰教育,只为有梦想的人 ( 京ICP备15013173号 )

GMT+8, 2020-2-25 13:35 , Processed in 0.028586 second(s), 12 queries , Redis On.

快速回复 返回顶部 返回列表