不明白为什么Hbase不是CAP中的A

问题描述 投票:0回答:3

我看过一篇文档说Hbase是

CAP
理论中的一致性和分区。

但我不明白为什么Hbase不是A?我认为 Hbase 可以一直保持服务可用,为什么 A 不可以呢?

我对Hbase的理解NOT A:当一个新行插入Hbase时,因为Hbase是立即一致的,所以需要等待HDFS完成3个副本,但是在这个副本同步时间内新行看不到,这就是Hbase的原因不是 A。但我对此不确定。

hbase
3个回答
8
投票

一般来说,CP系统意味着当“网络分区”发生时,系统会尽力确保一致性(或某些博客中的“线性化”),而不是使系统“可用”。

网络分区本质上是指集群被划分为两个或多个部分,并且由于网络故障而无法相互通信。在此网络问题期间,如果向集群的一侧(区域服务器)发出写入请求,系统将不会接受写入,直到问题得到解决。因此,这本质上使系统在网络分区发生时并不真正“可用”。在 HBase 中,网络分区可能会导致区域过渡,受影响的区域将无法接受读/写。这就是为什么有些帖子可能将 HBase 视为 CP 系统的原因。对于注重可用性的系统,当系统处于分区状态时,读取不会被阻塞。

在现实世界中,CAP 中的可用性具有非常具体的含义。它与我们一般意义上的“可用”略有不同。在网络分区较小的情况下,如果基于仲裁的系统可以快速从系统中删除集群中的坏部分,则可以确保一致性,同时只需要短暂的停机时间,例如几秒钟(甚至可能更短)。因此,总的来说,它们仍然可以被认为是可用的,因为它们很快就从故障中恢复了。但严格来说,如果您希望在网络分区期间保持一致,则需要等待问题解决后才能服务其他读取请求(因此不可用)。


1
投票

当某些 RegionServer 出现故障时,HBase 不可用。 HMaster需要一些时间:

  1. 将崩溃的区域重新分配给活动的区域服务器。
  2. 重放 WAL 文件以恢复保留在 MemStore 中的数据编辑 (在 RAM 中)失败的 RegionServer。

在此期间,故障RegionServer对应的Region不可用。 另请参阅“HBase 崩溃恢复”此处


0
投票

与 Mongo 一样,Hbase 也遵循领导者和副本的概念,根据 CAP 分区时,Mongo 可以是一致性的,也可以是可用的。如果主节点关闭,那么它将是“一致的”,因为没有更多写入发生,但如果其他节点关闭,那么它的“可用”一致性将消失,因为某些节点与主节点不同步。在这种情况下,Hbase 也应该遵循相同的做法。

© www.soinside.com 2019 - 2024. All rights reserved.