HBase2.0特性

HBase在2.0.0版本之后在可用性上进行了发展,具体原理如下图所示:



由上图可知,region将不再只保存在某一单独的regionserver上,而是选择其他的两个regionserver分别存储该region 的两个备份,这样,某台regionserver挂掉时,客户端仍然可以从其它regionserver上备份的region中读到数据,如此保证了hbase的读高可用,可用性达到了99.99%

上面设计的特点在于:
1、有一个主region,多个从region;
2、只有主region接收写请求,并把数据持久化到HDFS上;
3、从region从HDFS中读取数据并服务读请求;
4、从region可能会读到脏数据(主region memstore内未flush的数据);
5、读操作可以只读主,或者既可以读主又可以读从(可配置);

regionA在整个hbase集群中有三个备份,我们分别记为regionA0、regionA1和regionA2,其中客户端直接写入regionA0,regionA0中的数据会异步写到regionA1和regionA2中,客户端可以在数据写入时指定一致性级别,若客户指定为最终一致性,则直到数据写入三个regionserver才会返回写入成功到客户端,如此带来了写时延的增高,此外,如果某台regionserver在写的时候挂掉会阻塞住客户端的写。如果放开一致性,则主节点A0写入成功后即可返回,如此降低了写延时,但是数据一致性上没有保证。这里有点像mysql中的三种一致性级别(最大可用、最大性能、最大保护)。

这里插嘴说一下nosql数据库的历史,nosql的流行源自于web2.0时代大数据的应用在多数公司,尤其是互联网公司的应用。当数据量大到一定程度,传统关系型数据库受限于scalability而不再适用于这种场景。相反nosql数据库因为其灵活的的数据表示和在scalability和availablity上的优化而逐渐受到大家的重视。

说到数据一致不得不提一下计算机理论中CAP理论,CAP指出了在分布式计算系统中,Avaliablity&Consistency&Partition tolerance三者只能容其二。nosql数据库大都牺牲了Consistency换来了高可用和高容错。当然对于Consistency的理解,不同系统也有不同,mysql等关系型数据的ACID模型是一个强一致的模型,而分布式系统中实现的一致性模型可以理解为一个弱一致模型,这个模型常常被称作BASE。

另外一种优先级级别是最终一致性,最终一致性的概念来自于亚马逊的Dynoma,Cassandra在实现中采纳了最终一致性,所谓最终一致性是指数据在较长时间轴下是一致性,在数据达到最终一致前,客户端有可能会读不到最新写入的数据(当然客户端可以选择读多台regionserver然后返回多数regionserver的结果,然而这会带来读延时的增高)。

猜你喜欢

转载自blog.csdn.net/liu1390910/article/details/79325437