我读过一篇文档说Hbase在CAP理论上是一致性和分区的。
但是我不明白为什么Hbase不是A?我认为 Hbase 可以始终保持服务可用,那为什么不是 A?
我对 Hbase 的理解 NOT A:当一个新行被插入到 Hbase 中时,因为 Hbase 是立即一致的,它需要等待 HDFS 完成 3 个副本,但是在此副本同步时间内无法看到新行,这就是为什么 Hbase不是 A. 但我不确定这一点。
小智 5
一般来说,CP 系统意味着当“网络分区”发生时,系统将尝试确保一致性(或某些博客中的“线性化”),而不是使系统“可用”。
网络分区本质上是指集群被划分为两个或多个部分,并且由于网络故障而无法相互通信。在此网络问题期间,如果向集群的一侧(区域服务器)发出写入请求,则在问题解决之前,系统不会接受写入。因此,这实质上使系统在发生网络分区时并非真正“可用”。在 HBase 中,网络分区会导致区域过渡,受影响的区域将无法接受读/写。这就是为什么有些帖子可能会将 HBase 视为 CP 系统的原因。对于有利于可用性的系统,当系统处于分区状态时不会阻塞读取。
在现实世界中,CAP 中的可用性具有非常具体的含义。它与我们一般的可用含义略有不同。在网络分区较小的情况下,如果基于仲裁的系统可以快速从系统中删除集群的坏部分,则可以确保一致性,同时只有短暂的停机时间,例如几秒钟(甚至可能更短)。因此,它们仍然可以被认为是通用的,因为它们可以快速从故障中恢复。但严格来说,如果您想在网络分区期间保持一致,则需要等待问题解决,然后才能为其他读取请求提供服务(因此不可用)。