HBase和Cassandra的分布式架构深度对比

简介: HBase和Cassandra几乎都是一个时候出现的,都是在2010年成为Apache的顶级项目,不过如果我们细品其内部机制,我们会发现其实两者是完全不同的架构风格。HBASE起源于Google BigTable,几乎遵从了BigTable论文的大多数架构设计。Cassandra则是采纳了BigTable的数据模型,同时吸收了Amazon Dynamo的分布式设计。因此从存储结构模型的微观上看,HBASE和Cassandra在单点存储数据的机理是类似的,但是从分布式架构的宏观上看,两者则大相径庭。

架构对比

HBase和Cassandra几乎都是一个时候出现的,都是在2010年成为Apache的顶级项目,不过如果我们细品其内部机制,我们会发现其实两者是完全不同的架构风格。

HBASE起源于Google BigTable,几乎遵从了BigTable论文的大多数架构设计。Cassandra则是采纳了BigTable的数据模型,同时吸收了Amazon Dynamo的分布式设计。

因此从存储结构模型的微观上看,HBASE和Cassandra在单点存储数据的机理是类似的,但是从分布式架构的宏观上看,两者则大相径庭。

因为两者参考和遵从的分布式架构产品不同,前者BigTable,后者Dynamo,所以前者是中心化架构并满足分布式CAP定理中的CP(分布式一致性),强调数据写入的强一致性;后者去中心化架构并满足分布式CAP定理中的AP(分布式高可用),适应数据在读取过程中完成最终一致性。

我们看到此处就首先会明白这两个伙计从分布式架构上压根走的不是一路,只不过都从单点存储模型上看起来很像,有日志追加(WAL VS CommitLog),有内存写入缓冲区(MemStore VS MemTable),也都刷盘(flush)到LSM-Tree结构的持久化文件(StoreFile VS SSTable File),都用Bloomfilter和Row Index的组合模式进行行键的索引,它们也都是利用BigTable的数据模型结构实现高速的写入和热点数据的查找。

关键特性对比

有两个关键特性区分了它们:

由内看结构: 在查询方面Cassandra还支持二级索引,内置CQL(MySQL的SQL语法接近),SSTable分层结构也侧重定位与查找;但HBase没有二级索引,只强调列簇的行键scan,Region中的Store与HDFS密切配合,StoreFile中KV以顺序排列,存储强调整体的时间写入顺序。因此Cassandra就非常适合通过列字段为条件来查找,而HBase更擅长通过行扫描做列集分析。

本质原因在于Cassandra的数据是基于一致性哈希算法,按照HASH范围划分,实现记录根据哈希值在整个集群节点的随机分布以及复本冗余,那么查找起来更适合在整个集群中对任何记录进行大范围的定位和查询,充分利用集群的整体算力;

但是HBase是顺序的写入同一个Region,在数据量足够大后再分裂,那么HBase就不适合频繁大范围的对数据定位与查找,更适合按行键做顺序扫描的集合分析。查询主要体现在就近和热点数据上的高性能。

由外看分布式: Cassandra的集群去中心化主要利用一致性哈希环机制实现数据的分布和扩容缩容的数据迁移,利用gossip协议在对等节点的网络传播下保存集群状态一致性,利用anti-entropy(反熵)机制实现数据读取过程中节点之间的比对,保证数据一致性,这些都是集群在对等条件下基于机制而达成状态上的共识,那么Cassandra的这些特性,就使得集群不能太大,太大就不好管理,也容易导致网络通讯过于密集。

不过Cassandra这种去中心化架构表现出来的优点就是集群无单点故障隐患,集群健壮性高,可用性极高,运维很省事。

HBASE以及所依赖的Hadoop HDFS都是基于中心化集中式管理,存在HMaster的集群单点故障风险,因此一般HBASE的HMaster可以有一个或多个HA热备,引入HA后的HBASE集群依然很健壮,只是必然引入更高的部署复杂度,底层依赖的HDFS NameNode HA在服务部署复杂性方面则更甚之。

不过无论是HBase的Region Server,还是HDFS DataNode作为被管理的数据节点,要比Cassandra的对等节点承载的功能要简单得多,复杂的协调指挥问题都是由主节点服务来完成,数据节点通讯关系都是朝向主节点的被动处理,节点功能越简单,风险会越小。

而不是Cassandra那样,必须通过gossip协议的全网络病毒式传播状态来保证集群一致性,还要通过anti-entropy(反熵)机制,进行节点副本数据的一致性比对,每个节点承载的内容太多了,自然故障风险也会变得更大。因此,Hadoop HBase更适合去管理大规模的数据节点。

HBASE基于HMaster和ZooKeeper协调,实现表->列簇->Region在单点HRegionserver上做行级事务写入,当Region切分与合并后,才会在多个HRegionserver节点上形成数据分布,因此HBase强调了写入过程的一致性,而且集群中任何状态变更过程,都会以保证一致性为前提,(例如:region切分与合并过程缓慢的话,面向该Region的客户端会感受到短暂的中断);

另外底层HFile文件的存储是建立在Hadoop HDFS之上,文件的高可靠全部由HDFS代管,HBase所谓的Region迁移,并不存在实质上的文件移动,仅仅是HDFS元数据的变化。因此HBASE更适合大规模数据形成的文件在分布式环境中的管理,集群可以做的足够大。

但是Cassandra强调的是高可用,任何时候都要先照顾客户端的感受,例如:hinted handoff机制会让兄弟节点把面向故障节点的写请求先接过来,总之以不能堵塞客户端为优先,但这里存在兄弟节点的单点故障风险。

适应场景对比

通过上面的描述,实际上我们可以分析出来,Cassandra更适合在数据大吞吐的情况下,借助数据分布优势,高速写入,并通过二级索引实现SQL语法丰富的字段级查找,以及支持在线应用实时产生的超大规模数据的存储,可以在大规模数据写入与查询的都比较适合的场景下替代MySQL,在事务和一致性要求不严格的环境下,为每天并发与写入量惊人的在线业务系统,提供数据库支撑。因此其面向服务的领域偏重oltp。

HBASE更适合管理着大规模集群,并在超大规模数据之上进行实时的,结构化的海量数据支撑,而且满足强一致性要求,达到行级事务要求,可以使其对接一些关键性业务在可靠性要求高的环境下支撑在线实时分析,例如电子商务交易,金融交易等等。但并不适合随机性很强的查询,更适合大吞吐的数据写入,热点数据的行级查找以及大规模的扫描分析。并且具有Hadoop生态的数仓工具支撑。因此HBASE更面向olap。

流行度对比

我们说完它们的大体架构对比分析,我们再看看国内外流行度。
640.jpg
我们可以看出在国内HBASE的流行度更高,但是国外则相反。

首先HBASE基于Hadoop,自然名声响,但是其本质特征适合关键性数据的高可靠支撑,大规模集群数据管理,以及Hadoop生态的结合,自然在大规模的结构化数据的实时与离线分析上数一数二的优势,同时HBASE也在进化,对诟病已久的RIT(导致region迁移缓慢问题)进行了根除,精简zookeeper依赖,加强master中心管理,解决了过去很多导致缓慢的根子问题,也更适合面向实时性分析业务。

这些特征就特别适合中国这个特别容易产生超大规模数据的地方,更适合大厂所面对的大规模用户在关键性业务上产生的结构化数据,通过HBASE来支撑大吞吐的写入,实时的在线分析以及数据可靠性方面的需求,并且大厂的工程师团队也具备消化Hadoop平台复杂性的能力。

Cassandra架构是最终一致性,去中心化,节点对等,组件更精简,非常适合一个分布式数据库的小型集群的快速搭建,非常灵活,并不像HBASE搭建那么复杂,但我认为在国内不好找到需求点,为什么呢?

因为Cassandra的定位是在线事务应用的大规模数据支撑,无缝对接SQL语法,满足大范围的海量数据的快速查询,同样也适合实时性的流库连接,但前提是在写入数据方面,应该是弱一致性的业务环境要求(尽管一致性可调配置支持强一致性ALL,但代价太高)。

这就比较尴尬,刚性业务不合适,日志型业务国内Elasticsearch才是热门,MongoDB一样提供了可调的分布式一致性,支持的查询语义更丰富,还支持关键性业务的分布式事务,而且在国内也更流行。

但是我相信随着大数据技术的不断发展,国内工程师的不断普及,Cassandra是有非常多的优点,面向分布式海量数据的查询优化架构,尤其是去中心化带来的集群健壮性,对于一个运维团队会非常省事,尤其是越来越多的物联网项目和海量数据的搜索需求,必将在中小型团队中流行起来。

至于国外为什么Cassandra更流行,没太涉及过国外项目和团队,不能贸然下结论。但我能看到和想到的客观推理包括两方面:
(1)中英文关于Cassandra技术资料的新鲜度差距很大,可研读资料稀缺,我对Cassandra的技术研究也主要是基于英文。
(2)在强调分布式数据库面向结构化海量数据的承载能力之外,HBASE更侧重分析,Cassandra则胜于查询,项目中往往数据查询需求是远高于数据分析需求,因此国外的热度对比很正常,只不过Cassandra在国内工程师的认识上尚未普及而已!


作者:西安守护石信息科技CTO

相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
21天前
|
存储 分布式数据库 数据库
Hbase学习二:Hbase数据特点和架构特点
Hbase学习二:Hbase数据特点和架构特点
33 0
|
5天前
|
存储 NoSQL Java
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
这篇文章是关于Java面试中的分布式架构问题的笔记,包括分布式架构下的Session共享方案、RPC和RMI的理解、分布式ID生成方案、分布式锁解决方案以及分布式事务解决方案。
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
|
11天前
|
Cloud Native 云计算 微服务
云原生时代:企业分布式应用架构的惊人蜕变,从SOA到微服务的大逃亡!
【8月更文挑战第8天】在云计算与容器技术推动下,企业分布式应用架构正经历从SOA到微服务再到云原生的深刻变革。SOA强调服务重用与组合,通过标准化接口实现服务解耦;微服务以细粒度划分服务,增强系统灵活性;云原生架构借助容器化与自动化技术简化部署与管理。每一步演进都为企业带来新的技术挑战与机遇。
38 6
|
13天前
|
Kubernetes 负载均衡 算法
如何在kubernetes中实现分布式可扩展的WebSocket服务架构
如何在kubernetes中实现分布式可扩展的WebSocket服务架构
26 1
|
17天前
|
存储 监控 安全
|
20天前
|
NoSQL 算法 Java
(十三)全面理解并发编程之分布式架构下Redis、ZK分布式锁的前世今生
本文探讨了从单体架构下的锁机制到分布式架构下的线程安全问题,并详细分析了分布式锁的实现原理和过程。
|
18天前
|
前端开发 Java 数据库
|
4天前
|
存储 调度
分布式锁设计问题之分布式锁系统通常设计其架构如何解决
分布式锁设计问题之分布式锁系统通常设计其架构如何解决
|
29天前
|
存储 缓存 NoSQL
高并发架构设计三大利器:缓存、限流和降级问题之Redis用于搭建分布式缓存集群问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之Redis用于搭建分布式缓存集群问题如何解决
|
1月前
|
存储 NoSQL 大数据
大数据存储:HBase与Cassandra的对比
【7月更文挑战第16天】HBase和Cassandra作为两种流行的分布式NoSQL数据库,在数据模型、一致性模型、数据分布、查询语言和性能等方面各有千秋。HBase适用于需要强一致性和与Hadoop生态系统集成的场景,如大规模数据处理和分析。而Cassandra则更适合需要高可用性和灵活查询能力的场景,如分布式计算、云计算和大数据应用等。在实际应用中,选择哪种数据库取决于具体的需求和场景。希望本文的对比分析能够帮助读者更好地理解这两种数据库,并做出明智的选择。

热门文章

最新文章