返回顶部
首页 > 资讯 > 数据库 >HBase 与 Cassandra 架构对比分析的经验分享
  • 477
分享到

HBase 与 Cassandra 架构对比分析的经验分享

HBaseCassandra架构对比分析的经验分享 2021-10-09 03:10:23 477人浏览 才女
摘要

架构对比 HBase和Cassandra几乎是一个年份发起,又都是在2010年成为Apache的顶级项目,不过如果我们去细品其内部机制,我们会发现其实两者是完全不同的架构风格。 HBASE起源于Google BigTable,几乎遵从了B

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(Mysqlsql语法接近),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机制会让兄弟节点把面向故障节点的写请求先接过来,总之以不能堵塞客户端为优先,但这里存在兄弟节点的单点故障风险。

另外,去中心化架构几乎默认都是利用HASH算法实现数据分布的共识机制,但麻烦的问题在于数据管理,例如:迁移过程,必须诚实地进行物理层面的数据移动,这点是无法匹敌HBASE与HDFS的中心化架构组合,其底层机制是通过元数据对集群数据文件的逻辑操作,带来数据管理的灵活性优势。这也是中心化集中管理架构相对于去中心化共识架构最大的优势所在。

适应场景对比

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

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

流行度分析

我们说完它们的大体架构对比分析,我们再回到问题上来,首先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 老方发表,转载请注明来源和作者。

公众号 "读字节" 大数据,分布式,容器技术,linux的深度,专业解读
您可能感兴趣的文档:

--结束END--

本文标题: HBase 与 Cassandra 架构对比分析的经验分享

本文链接: https://lsjlt.com/news/8813.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • HBase 与 Cassandra 架构对比分析的经验分享
    架构对比 HBase和Cassandra几乎是一个年份发起,又都是在2010年成为Apache的顶级项目,不过如果我们去细品其内部机制,我们会发现其实两者是完全不同的架构风格。 HBASE起源于Google BigTable,几乎遵从了B...
    99+
    2021-10-09
    HBase Cassandra 架构对比分析的经验分享
  • PHP MVC架构与其他架构的对比分析
    PHP MVC架构是一种将应用程序划分为三个部分的软件架构模式:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高应用程序的可维护性和可重用性。 模型(Model)负责处理应用程序的数据。它包含应用...
    99+
    2024-02-05
    PHP MVC架构 软件架构模式 模型 视图 控制器 可维护性 可重用性
  • JavaScript MVC 架构的最佳实践:经验分享
    分离关注点 MVC 架构的基本原则之一是分离关注点。这意味着将应用程序的各个组件(模型、视图和控制器)分解为独立的模块。这使得应用程序更容易维护,因为它允许您独立于其他部件更改每个模块。 示例代码: // Model class Todo...
    99+
    2024-03-02
    JavaScript MVC 架构、最佳实践、可维护性、可扩展性
  • C#开发经验分享:大规模系统架构与设计
    C#开发经验分享:大规模系统架构与设计作为一名C#开发工程师,我有幸参与了多个大规模系统的开发与架构设计工作,积累了一些宝贵的经验与教训。在这篇文章里,我将分享我在大规模系统架构与设计方面的一些心得体会,希望能对正在从事或者有兴趣从事C#开...
    99+
    2023-11-22
    设计 系统架构 C#开发
  • PHP 企业级应用架构与设计实战经验分享
    在企业级 php 应用程序中,领域驱动设计 (ddd)、服务层架构、微服务架构和事件驱动架构是常见的架构方法。ddd 强调对业务领域的建模,服务层架构分离业务逻辑和表示层/数据访问层,微...
    99+
    2024-05-08
    php 企业级应用架构 数据访问
  • PHP MVC架构在大型项目中的应用经验分享
    PHP MVC架构是一种广泛应用于大型项目的软件开发架构,它将应用程序分为模型 (Model)、视图 (View) 和控制器 (Controller) 三个独立的组件,实现了松耦合和高可复用性。MVC架构在大型项目中具有诸多优势,包括:...
    99+
    2024-02-05
    PHP MVC 架构 大型项目 经验分享
  • uni-app开发小程序:项目架构以及经验分享
    uni-app开发小程序:项目架构以及经验分享 2022年的时候,公司为了快速完成产品并上线,所以选用微信小程序为载体;由于后期还是打算开发App;虽然公司有ios和Android,但是如果能一套代码打包多端,一定程度上可以解决成本;前...
    99+
    2023-09-12
    uni-app 小程序 架构
  • mysql结构对比的示例分析
    小编给大家分享一下mysql结构对比的示例分析,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!小工具原由日常开发经常遇到数据库结构变更,但是不能实时记录下来,上线以后会造成测试和线上的数据库机构...
    99+
    2024-04-02
  • Aspectj与Spring AOP的对比分析
    1、简介 今天有多个可用的 AOP 库, 它们需要能够回答许多问题: 1、是否与用户现有的或新的应用程序兼容? 2、在哪里可以实现 AOP? 3、与自己的应用程序集成多快? 4、性能...
    99+
    2024-04-02
  • PHP开发经验分享:构建高效功能的技巧与建议
    PHP是一种广泛使用的服务器端脚本语言,用于开发动态网页和Web应用程序。许多网站和应用程序都使用PHP作为其后端开发语言,因此,掌握PHP开发技巧和经验对于构建高效功能至关重要。在本文中,我将分享一些我在PHP开发中学到的经验和技巧,旨在...
    99+
    2023-11-22
    性能优化 PHP语法 功能实现
  • C语言与Python的对比与分析
    C语言与Python的对比与分析 C语言和Python是两种不同的编程语言,各有优点和适用场景。C语言作为一种底层语言,被广泛应用于系统编程、嵌入式开发等领域,具有高效性和灵活性的特点...
    99+
    2024-04-02
  • PSR2与PSR4规范的项目实践经验分享
    前言在现代软件开发中,遵循统一的编码规范是非常重要的,它可以提高代码的可读性和可维护性,减少团队合作中的摩擦。PHP-FIG(PHP Framework Interop Group)制定了一系列的PSR规范,其中最为广为人知的就是PSR2和...
    99+
    2023-10-21
    PSR规范 项目实践经验分享
  • Django vs. Flask:Python Web框架的对比分析
    Django和Flask都是Python Web框架中的佼佼者,它们都有着自己的优点和适用场景。本文将对这两个框架进行对比分析,并提供具体的代码示例。 开发简介 Django是一个全功能的Web框架,它的主要目的是为了快速开发复...
    99+
    2024-01-19
    Python Flask django
  • C#开发经验分享:面向对象编程与设计原则
    C#(C Sharp)是一门强大而受欢迎的面向对象编程语言,广泛应用于软件开发领域。在C#开发过程中,了解面向对象编程(OOP)的基本概念和设计原则是非常重要的。面向对象编程是一种编程范式,它将现实世界中的事物抽象为对象,并通过对象之间的交...
    99+
    2023-11-22
    面向对象 设计原则 C#开发
  • Pytorch中Softmax与LogSigmoid的对比分析
    Pytorch中Softmax与LogSigmoid的对比 torch.nn.Softmax 作用: 1、将Softmax函数应用于输入的n维Tensor,重新改变它们的规格,使n维...
    99+
    2024-04-02
  • MySQL中InnoDB与MyISAM的对比分析
    小编给大家分享一下MySQL中InnoDB与MyISAM的对比分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!对比InnoDB与MyISAM1、 存储结构MyI...
    99+
    2023-06-27
  • hive与rdbms对比的分析说明
    这篇文章给大家分享的是有关hive与rdbms对比的分析说明的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Hive并非为联机事务处理而设计,Hive并不提供实时的查询和基于行级的数据更新操作。Hive是建立在Ha...
    99+
    2023-06-03
  • Golang开发经验分享:如何进行高效的性能分析
    随着计算机技术的不断发展,性能已成为了软件开发中重要的指标之一。而在Golang开发过程中,性能也是一个非常重要的方面。为了保证程序的高效率运行,必须进行性能分析和优化。下面就为大家分享一下如何进行高效的性能分析。1.基本概念在进行性能分析...
    99+
    2023-11-23
    Golang 性能分析 开发经验
  • 基于MongoDB的实时数据湖构建与分析经验总结
    近年来,随着大数据技术的迅速发展,各种数据处理与分析的需求日益增长。在这个背景下,数据湖作为一种新型的数据存储和处理架构,逐渐受到了广泛关注。而MongoDB作为一种流行的非关系型数据库,具备高性能、扩展性强等优点,成为构建实时数据湖的理想...
    99+
    2023-11-03
    MongoDB 实时数据湖 构建与分析
  • JavaScript MVC架构与其他前端框架的比较:优缺点分析
    一、JavaScript MVC架构简介 JavaScript MVC架构(Model-View-Controller)是一种流行的前端框架,它将应用程序分解为三个主要组件:模型(Model)、视图(View)和控制器(Controlle...
    99+
    2024-02-12
    JavaScript MVC架构 前端框架 比较 优缺点
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作