分布式系统架构作业
请简述 CAP 原理
定义:在任意的分布式系统中,一致性(Consistency),可用性(Availability)和分区容错性(Partition-tolerance)这三种属性最多只能同时存在两个属性。
C 属性:一致性一致性在这里指的是线性一致性(Linearizability Consistency)。在线性一致性的保证下,所有分布式环境下的操作都像是在单机上完成的一样,也就是说系统中所有节点的状态一直是一致的。
A 属性:可用性可用性的概念比较简单,在这里指的是在分布式系统中,任意非故障的服务器都必须对客户的请求产生响应。
P 属性:分区容错性在了解了可用性之后,你还需要了解分区容错性。它分为两个部分,“分区”和“容错”。在一个分布式系统里,如果出现一些故障,可能会使得部分节点之间无法连通。由于这些故障节点无法联通,造成整个网络就会被分成几块区域,从而使数据分散在这些无法连通的区域中的情况,你可以认为这就是发生了分区错误。分区容错性,在这里指的是我们的系统允许网络丢失从一个节点发送到另一个节点的任意多条消息。
在现代网络通信中,节点出现故障或者网络出现丢包这样的情况是时常会发生的。如果没有了分区容错性,也就是说系统不允许这些节点间的通讯出现任何错误的话,那我们日常所用到的很多系统就不能再继续工作了。所以在大部分情况下,系统设计都会保留 P 属性,而在 C 和 A 中二选一。
CP 系统:Google BigTable, Hbase, MongoDB, Redis, MemCacheDB,这些存储架构都是放弃了高可用性(High Availablity)而选择 CP 属性的。
AP 系统:Amazon Dynamo 系统以及它的衍生存储系统 Apache Cassandra 和 Voldemort 都是属于 AP 系统
CA 系统:Apache Kafka 是一个比较典型的 CA 系统。
Doris 系统节点临时失效处理时序图
3 个问题:
在客户端发送写请求失败向管理中心仲裁的过程中客户端的本次请求如何处理?是需要一直等待管理中心确认节点失效并返回临时节点吗?
客户端向临时的日志节点中写失败之后如何处理?
Doris 系统是如何定义写入成功的?前面两个问题的场景都是正常的节点已经写入成功了,那算是本次请求成功了吗?但是其他的节点是无法同步到这次写入的数据的。如果不算是写入成功,那正常节点上的数据还能回滚吗?
版权声明: 本文为 InfoQ 作者【qihuajun】的原创文章。
原文链接:【http://xie.infoq.cn/article/cc441ade18208a01c825609cb】。文章转载请联系作者。
评论