1) CAP 理论给出了3个基本要素:
一致性 ( Consistency) :任何一个读操作总是能读取到之前完成的写操作结果; 可用性 ( Availability) :每一个操作总是能够在确定的时间内返回; 分区可容忍性 (Tolerance of network Partition) :在出现网络分区的情况下,仍然能够满足一致性和可用性;CAP 理论指出,三者不能同时满足。对这个理论有不少异议,但是它的参考价值依然巨大。
这个理论并不能为不满足这3个基本要求的设计提供借口,只是说明理论上3者不可绝对的满足,而且工程上从来不要求绝对的一致性或者可用性,但是必须寻求一种平衡和最优。
对于分布式数据系统,分区容忍性是基本要求。因此设计分布式数据系统,很多时候是在一致性和可用性(可靠性)之间寻求一个平衡。更多的系统性能和架构的讨论也是围绕一致性和可用性展开。
2) OpenStack、Swift与CAP的工程实践
对照CAP理论,OpenStack的分布式对象存储系统Swift满足了可用性和分区容忍性,没有保证一致性(可选的),只是实现了最终一致性。Swift如果GET操作没有在请求头中包含’X-Newest’头,那么这次读取有可能读到的不是最新的object,在一致性窗口时间内object没有被更新,那么后续GET操作读取的object将是最新的,保证了最终一致性;反之包含了’X-Newest’头,GET操作始终能读取到最新的obejct,就是一致的。
在OpenStack架构中,对于高可用性需要进行很多工作来保证。因此,下面将对OpenStack结构中的可用性进行讨论:构建OpenStack的高可用性(HA,High Availability) (大家可以在这里讨论)
要弄清楚怎么实现高可靠性,就需要知道哪些服务容易出现不可靠。首先了解一些OpenStack的大致结构。
OpenStack由5大组件组成(计算nova,身份管理keystone,镜像管理glance,前端管理dashboard和对象存储swift)。
nova是计算、控制的核心组件,它又包括nova-compute、nova-scheduler、nova-volume、nova-network和nova-api等服务。借用的以下这幅图了解OpenStack的5大组件和功能:
下面这幅图描述了各个组件的功能和服务结构: