共计 6508 个字符,预计需要花费 17 分钟才能阅读完成。
本篇内容介绍了“Ignite 和 Hazelcast 有哪些区别”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
1.Ignite 简介
Apache Ignite 内存数据组织框架是一个高性能、集成化和分布式的内存计算和事务平台,用于大规模的数据集处理,比传统的基于磁盘或闪存的技术具有更高的性能,同时他还为应用和不同的数据源之间提供高性能、分布式内存中数据组织管理的功能。
2.Ignite 历史
Ignite 来源于尼基塔·伊万诺夫于 2007 年创建的 GridGain 系统公司开发的 GridGain 软件,尼基塔领导公司开发了领先的分布式内存片内数据处理技术 - 领先的 Java 内存片内计算平台,今天在全世界每 10 秒它就会启动运行一次。他有超过 20 年的软件应用开发经验,创建了 HPC 和中间件平台,并在一些创业公司和知名企业都做出过贡献,包括 Adaptec, Visa 和 BEA Systems。尼基塔也是使用 Java 技术作为服务器端开发应用的先驱者,1996 年他在为欧洲大型系统做集成工作时他就进行了相关实践。
2014 年 3 月,GridGain 公司将该软件 90% 以上的功能和代码开源,仅在商业版中保留了高端企业级功能,如安全性,数据中心复制,先进的管理和监控等。2015 年 1 月,GridGain 通过 Apache 2.0 许可进入 Apache 的孵化器进行孵化,很快就于 8 月 25 日毕业并且成为 Apache 的顶级项目,9 月 28 日即发布了 1.4.0 版,2016 年 1 月初发布了 1.5.0 版,应该说发展、迭代速度非常快。该技术相关资料较少,但确是一个很有潜力的技术,解决了大规模、大数据量、高并发企业级或者互联网应用面临的若干痛点。
3.Ignite 和 Hadoop 以及 Spark 的关系
Ignite 和 Hadoop 解决的是不同的问题,即使在一定程度上可能应用了类似的底层基础技术。Ignite 是一种多用途,和 OLAP/ OLTP 内存中数据结构相关的,而 Hadoop 仅仅是 Ignite 原生支持(和加速)的诸多数据来源之一。
Spark 是一个和 Ignite 类似的项目。但是 Spark 聚焦于 OLAP,而 Ignite 凭借强大的事务处理能力在混合型的 OLTP/ OLAP 场景中表现更好。特别是针对 Hadoop,Ignite 将为现有的 Map/Reduce,Pig 或 Hive 作业提供即插即用式的加速,避免了推倒重来的做法,而 Spark 需要先做数据 ETL,更适合新写的分析应用。
4. 和类似技术的比较
在 Ignite 以前,大规模、大数据量、高并发企业级或者互联网应用为了解决数据缓存、降低数据库负载、提高查询性能等突出问题,很多采用了 Hazelcast 或者 Oracle Coherence 或者 GemFire(比如 12306 网站)或者目前应用越来越广泛的 Redis 等缓存技术,本文对这些相关的技术做了简单的比较,基本内容来源于其官方网站,进行了翻译整理,方便更多的人了解他。
4.1.Ignite 和 Hazelcast
Apache Ignite 和 Hazelcast 都提供了富数据网格的特性,解决了可扩展的分布式集群环境下在内存中对数据进行缓存和分区的问题。
Ignite 和 Hazelcast 在缓存的方式上是有很多不同的,同时支持事务和数据的查询,下面的表格列出了一些主要的不同点,这些都是我们在选择内存数据网格产品时需要特别关注的。
序号对比项目 Apache igniteHazelcast1 聚焦于开源 Ignite 还在不断增加和增强开源版本的功能集,最新的主版本还增加了对 C ++ 以及.Net/C# 的支持,和 Node.js 的集成也会很快到来,而且还增加了更快的无死锁事务。Hazelcast 的开发聚焦于收费的企业版中,比如堆外存储以及持续查询等的特性只在收费版中才提供,SSL 加密的功能已经从开源版中删除,只在收费版中提供。2JCache(JSR107)Ignite 完全兼容 JCache (JSR 107)缓存规范 Hazelcast 完全兼容 JCache (JSR 107)缓存规范 3 堆外存储 Ignite 根据用户配置支持将数据存储在堆内或者堆外 Hazelcast 仅在商业版中提供堆外存储的功能 4 堆外索引只要配置了堆外存储,Ignite 就会在堆外存储索引 (为了不影响使用堆内内存的用户应用。) 不支持 5 持续查询 Ignite 支持容错的持续查询,即允许客户端和服务器端订阅数据变化的持续通知 Hazelcast 仅在商业(收费)版中提供持续查询的功能。6SSL 加密 Ignite 支持 SSL/TLS 加密,即允许所有的客户端和服务端通过加密的 SSL 或者 TLS 协议进行通信。Hazelcast 将 SSL 加密支持从开源版中删除,目前仅在商业(收费)版中支持该功能。7SQL 查询 Ignite 支持完整的 SQL(ANSI-99)语法以查询内存中的数据 Hazelcast 仅对 SQL 提供有限的支持(只有几个关键字)8 关联查询 Ignite 支持完整的 SQL 关联,包括跨多个缓存的关联,比如:select * from A a, B b where a.b_id = b.idHazelcast 不支持任何的关联查询,不管用不用 SQL,如果需要,开发者需要手工处理多个查询的结果。9 查询一致性 Ignite 提供完整的查询一致性,即查询是在一个特定的快照中执行的,查询开始之后的数据更新不影响查询的结果。Hazelcast 查询是不一致的,可能查询结果的一部分将看到某些更新,而另一部分则不会。10 查询容错 Ignite 查询是容错的,即查询结果始终是一致的不会受到集群拓扑发生变化的影响,比如节点的加入,退出或崩溃。Hazelcast 查询是不容错的,即查询结果在集群拓扑发生变化时不一致,而数据正在后台重新平衡。11 数据一致性 Ignite 支持内存中数据的原子的和事务的一致性,不管数据存储在分区或者复制缓存中。Hazelcast 仅在分区缓存中支持原子的和事务的一致性,而存储在复制缓存中的数据没有任何事务一致性的保证。12 无死锁事务 Ignite 支持无死锁乐观事务,他不会获得任何锁,用户也不用再担心锁顺序,这样的事务同时还提供了更好的性能。Hazelcast 中必须注意按顺序地更新数据以避免死锁,这往往是不可能的,尤其是在大项目中。13 事务化 EntryProcessorIgnite 支持事务化 EntryProcessor,他可以在服务端在一个事务中执行并置的业务代码。在 Hazelcast 中无法使用 EntryProcessor 或者在一个事务中执行业务代码。14Web 会话集群化 Ignite 为所有已知的应用服务器提供 Web 会话的缓存和集群化支持。Hazelcast 仅在商业(收费)版中提供 Web 会话集群化支持。15 计算网格 Ignite 提供集群内的 MapReduce、ForkJoin 和基本的分布式 lambda 处理,包括作业的负载平衡,容错,检查点,计划任务等。Hazelcast 仅支持 MapReduce 和集群内的分布式随机作业。16 流式数据 Ignite 支持内存内的流处理,包括对流式数据的滑动窗口的查询和维护支持。Hazelcast 不对流处理提供任何的支持。17 服务网格 Ignite 可以使用户方便地将其服务集群化,包括支持各种集群单例。Hazelcast 管理的服务不提供单例集群的功能。18.Net/C#支持 Ignite 为.NET/C#用户提供了完整的内存组织 API,包括执行 C#闭包,C# 缓存,事务以及查询 API,原生 C# CacheStore API 等功能。Hazelcast 只为.NET/C# 提供了有限的客户端 API。19C++ 支持 Ignite 为 C ++ 用户提供了完整的内存组织 API。Hazelcast 只为 C ++ 提供了有限的客户端 API。20Node.js 支持 Ignite 将为 Node.js 用户提供客户端 API 支持。Hazelcast 不支持 Node.js。4.2.Ignite 和 Coherence
Apache Ignite 和 Oracle Coherence 都提供了富数据网格的特性,解决了可扩展的分布式集群环境下在内存中对数据进行缓存和分区的问题。
Ignite 和 Coherence 在缓存和事务的方式上是有很多不同的,同时支持数据的查询,下面的表格列出了一些主要的不同点,这些都是我们在选择数据网格产品时需要特别关注的。
序号对比项目 Apache IgniteOracle Coherence1 开源和闭源 Ignite 是一个 Apache 项目,并且还在不断的增加和增强开源版的功能集,最新的主版本提供了对 C ++、.NET/C# 的支持,对 Node.js 的支持也会很快到来。Coherence 是一个 Oracle 的专有软件,并不提供开源和免费的版本。2JCache (JSR 107)Ignite 完全兼容 JCache (JSR 107)缓存规范 Coherence 完全兼容 JCache (JSR 107)缓存规范 3 堆外存储 Ignite 根据用户配置支持将数据存储在堆内或者堆外 Oracle Coherence 对将数据存储在堆外向开发者提供了有限的选项。4 堆外索引只要配置了堆外存储,Ignite 就会在堆外存储索引 (为了不影响使用堆内内存的用户应用。) 不支持 5SQL 查询 Ignite 支持完整的 SQL(ANSI-99)语法以查询查询内存中的数据不支持 6 关联查询 Ignite 支持完整的 SQL 关联,包括跨多个缓存的关联,比如:select * from A a, B b where a.b_id = b.idCoherence 不支持任何的关联查询,不管用不用 SQL,如果需要,开发者需要手工处理多个查询的结果。7ACID 事务 Ignite 提供了每台服务器每秒成千上万事务的优异性能。Coherence 因为性能低不建议使用事务。8 分层存储 Ignite 支持分层存储模型,数据可以在堆内、堆外以及交换空间内存储和移动,上层将提供更多的存储能力,当然延迟也会增加。不支持 9 流式数据 Ignite 提供内存内流计算,包括支持流式数据的滑动窗口的维护和查询不支持 10 配置 Ignite 支持通过 Java Bean 以及原生的 Spring XML 集成对系统进行配置,同时也支持通过代码对系统进行方便配置的能力。Coherence 通过专有的 XML 格式文件进行配置,不支持通过代码进行配置。4.3.Ignite 和 Gemfire
Apache Ignite 和 Pivotal Gemfire 都提供了富数据网格的特性,解决了可扩展的分布式集群环境下在内存中对数据进行缓存和分区的问题。
Ignite 和 Gemfire 在缓存和事务的方式上是有很多不同的,同时支持数据的查询,下面的表格列出了一些主要的不同点,这些都是我们在选择数据网格产品时需要特别关注的。
序号对比项目 Apache IgnitePivotal Gemfire1 开源和闭源 Ignite 是一个 Apache 项目,并且还在不断的增加和增强开源版的功能集,最新的主版本提供了对 C ++、.NET/C# 的支持,对 Node.js 的支持也会很快到来。Gemfire 是 Pivotal 的专有软件。2JCache (JSR107)Ignite 数据网格是 JCache(JSR107)规范的一个实现,该 API 为数据访问提供了简单易用、但是功能强大的 API。Gemfire 没有实现 JCache,使用专有的 API。3 堆内和堆外 Ignite 根据用户配置支持将数据存储在堆内和堆外。Gemfire 不支持将数据存储在堆外 4SQL 查询 Ignite 支持完整的 SQL(ANSI-99) 查询语法以查询内存中的数据。Gemfire 不支持标准的 SQL 语法,但是他提供了自己的叫做 OQL 的对象查询语言。5 关联查询 Ignite 支持完整的 SQL 关联,包括跨多个缓存的关联,比如:select * from A a, B b where a.b_id = b.idGemfire 不支持任何的跨区或者跨缓存的关联查询,如果需要,开发者需要手工处理多个查询的结果。6 跨分区事务 Ignite 支持跨分区事务,事务可以在整个集群中缓存的所有分区中执行。Gemfire 不支持跨越多个缓存分区或者节点的事务。7 分层存储 Ignite 支持分层存储模型,数据可以在堆内、堆外以及交换空间内存储和移动,上层将提供更多的存储能力,当然延迟也会增加。不支持 8 流式数据 Ignite 提供内存内流计算,包括支持流式数据的滑动窗口的维护和查询不支持 9 配置 Ignite 支持通过 Java Bean 以及原生的 Spring XML 集成对系统进行配置,同时也支持通过代码对系统进行方便配置的能力。Gemfire 通过专有的 XML 格式文件进行配置,不支持通过代码进行配置。10 部署 Ignite 节点是对等的,并且在启动时自动加入集群(不需要任何 locator 服务器)。Gemfire 需要启动和维护一个 locator 服务器,以便控制节点的加入和退出。4.4.Ignite 和 Redis
Apache Ignite 和 Redis 都提供了分布式缓存的功能,但是每个产品提供的功能特性是非常不同的。Redis 主要是一个数据结构存储,但是 Ignite 提供了很多内存内的分布式组件,包括数据网格、计算网格、流计算,当然也包括数据结构。
Ignite 是一个内存数据组织,并且提供了更多的功能,无法进行一个一个对应功能特性的比较,但是我们仍然能对一些数据网格功能进行对比。
序号对比项目 Apache IgniteRedis1JCache (JSR 107)Ignite 完全兼容 JCache(JSR107)缓存规范不支持 2ACID 事务 Ignite 完全支持 ACID 事务,包括乐观和悲观并发模型以及 READ_COMMITTED, REPEATABLE_READ 和 SERIALIZABLE 隔离级别。Redis 提供了客户端乐观事务的有限支持,在并发更新情况下,客户端需要手工重试事务。3 数据分区 Ignite 支持分区缓存,类似于一个分布式哈希,集群中的每个节点都存储数据的一部分,在拓扑发生变化的情况下,Ignite 会自动进行数据的再平衡。Redis 没有提供分区,但是提供了副本的分片,使用分片非常死板,并且不管是客户端还是服务端,每当拓扑发生变化时都需要一系列相当复杂的手工步骤。4 全复制 Ignite 支持缓存的复制,集群中的每个节点的每个键值对都支持。Redis 不提供对全复制的直接支持。5 原生对象 Ignite 允许用户使用自己的领域对象模型并且提供对任何 Java/Scala, C++ 和.NET/C# 数据类型 (对象) 的原生支持,用户可以在 Ignite 缓存中轻易的存储任何程序和领域对象。Redis 不允许用户使用自定义数据类型,仅支持预定义的基本数据结构集合,比如 Set、List、Array 以及一些其他的。6 客户端侧(近)缓存 Ignite 提供对于最近访问数据的客户端侧缓存的直接支持。不支持 7(服务端侧)并置处理 Ignite 支持在服务器端靠近数据以并置的方式直接执行任何 Java, C++ 和.NET/C# 代码。Redis 通常没有任何并置处理的能力,服务器端基本只支持 LUA 脚本语言,服务器端不直接支持 Java, .NET, 或者 C ++ 代码执行。8SQL 查询 Ignite 支持完整 SQL(ANSI-99)语法以查询内存中的数据。Redis 不支持任何查询语言,只支持客户端缓存 API。9 持续查询 Ignite 提供对客户端和服务器端持续查询的支持,用户可以设置服务器端的过滤器来减少和降低传输到客户端的事件数量。Redis 提供客户端基于键的事件通知的支持,但是他不提供服务器端的过滤器,因此造成了在客户端和服务器端中更新通知网络流量的显著增加。10 数据库集成 Ignite 可以自动集成外部的数据库 -RDBMS, NoSQL, 和 HDFS。Redis 无法与外部数据库集成。
“Ignite 和 Hazelcast 有哪些区别”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!