一、Ignite简介

Apache Ignite 内存数组组织框架是一个高性能、集成和分布式的内存计算和事务平台,用于大规模的数据集处理,比传统的基于磁盘或闪存的技术具有更高的性能,同时他还为应用和不同的数据源之间提供高性能、分布式内存中数据组织管理的功能。

二、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版,应该说发展、迭代速度非常之快。该技术相关资料较少,但确是一个很有潜力的技术,解决了大规模、大数据量、高并发企业级或者互联网应用面临的若干痛点。

三、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,更适合新写的分析应用。

四、和类似技术的比较

在Ignite以前,大规模、大数据量、高并发企业级或者互联网应用为了解决数据缓存、降低数据库负载、提高查询性能等突出问题,很多采用了Hazelcast或者Oracle Coherence或者GemFire(比如12306网站)或者目前应用越来越广泛的Redis等缓存技术,本文对这些相关的技术做了简单的比较,基本内容来源于其官方网站,进行了翻译整理,方便更多的人了解他。

1.Ignite和Hazelcast

Apache Ignite和Hazelcast都提供了富数据网格的特性,解决了可扩展的分布式集群环境下在内存中对数据进行缓存和分区的问题。

Ignite和Hazelcast在缓存的方式上是有很多不同的,同时支持事务和数据的查询,下面的表格列出了一些主要的不同点,这些都是我们在选择内存数据网格产品时需要特别关注的。

序号 对比项目 Apache Ignite Hazelcast
1 聚焦于开源 Ignite是一个Apache的开源项目,还在不断的增加新特性,对C++、.NET/C#和Node.js的支持也会很快到来。 Hazelcast正在持续的减少开源版本的功能,更多的功能加入了企业版中,比如堆外内存,持续查询,Web-Session集群,SSL加密支持等。
2 JCache(JSR107) Ignite完全兼容JCache (JSR 107)缓存规范 Hazelcast完全兼容JCache (JSR 107)缓存规范
3 堆外存储 Ignite根据用户配置支持将数据存储在堆内或者堆外 Hazelcast仅在商业版中提供堆外存储的功能
4 堆外索引 只要配置了堆外存储,Ignite就会在堆外存储索引(为了不影响使用堆内内存的用户应用。) 不支持
5 持续查询 Ignite支持持续查询,比如允许客户端和服务器端订阅数据变化的持续通知 Hazelcast仅在商业版中提供持续查询的功能。
6 SQL查询 Ignite支持完整的SQL(ANSI-99)语法以查询内存中的数据 Hazelcast仅对SQL提供有限的支持(只有几个关键字)
7 关联查询 Ignite支持完整的SQL关联,包括跨多个缓存的关联,比如:select * from A a, B b where a.b_id = b.id Hazelcast不支持任何的关联查询,不管用不用SQL,如果需要,开发者需要手工处理多个查询的结果。
8 查询一致性 Ignite提供完整的查询一致性,即查询是在一个特定的快照中执行的,查询开始之后的数据更新不影响查询的结果。 Hazelcast查询是不一致的,这是可能的,查询结果的一部分将看到一定的更新,而另一部分则不会。
9 查询容错 Ignite查询是容错的,即查询结果始终是一致的不会受到集群拓扑发生变化的影响,比如节点的加入,退出或崩溃。 Hazelcast查询是不容错的,即查询结果在集群拓扑发生变化时不一致,而数据正在后台重新平衡。
10 数据一致性 Ignite支持内存中数据的原子性和事务一致性,不管数据存储在分区或者复制缓存中。 Hazelcast仅在分区缓存中支持原子性和事务一致性,而存储在复制缓存中的数据没有任何事务一致性的保证。
11 SSL加密 Ignite为所有的网络传输提供SSL加密,包括客户端和服务器端以及服务器之间。 Hazelcast仅在商业版中提供SSL加密功能。
12 Web-Session集群 Ignite为所有已知的应用服务器提供Web-Session的缓存和集群化支持。 Hazelcast仅在商业版中提供Web-Session集群化支持。
13 计算网格 Ignite提供集群上的M/R,Fork/Join和基本的分布式lambda处理,包括任务负载平衡,容错,检查点,计划任务等。 Hazelcast仅支持M/R和集群内的分布式随机任务。
14 流式网格 Ignite支持内存流,包括对数据流浮动窗口的查询和维护支持 不支持
15 服务网格 Ignite可以使用户方便地将其服务集群化,包括支持各种单例集群。 Hazelcast管理的服务不提供单例集群的功能。
16 .Net/C#,C++支持 Ignite将在1.5.0版中提供完整的内存组织API Hazelcast仅在商业版中提供有限的客户端API支持。
17 Node.js支持 Ignite将在1.5.0版中提供Node.js的客户端API。 不支持

2.Ignite和Coherence

Apache Ignite和Oracle Coherence都提供了富数据网格的特性,解决了可扩展的分布式集群环境下在内存中对数据进行缓存和分区的问题。
Ignite和Coherence在缓存的方式上是有很多不同的,同时支持事务和数据的查询,下面的表格列出了一些主要的不同点,这些都是我们在选择数据网格产品时需要特别关注的。

序号 对比项目 Apache Ignite Oracle Coherence
1 开源和闭源 Ignite是一个Apache的开源项目,并且还在不断的增加新特性,对C++、.NET/C#和Node.js的支持也会很快到来。 Coherence是一个Oracle的专有软件,并不提供开源和免费的版本。
2 JCache (JSR 107) Ignite完全兼容JCache (JSR 107)缓存规范 Coherence完全兼容JCache (JSR 107)缓存规范
3 堆外存储 Ignite根据用户配置支持将数据存储在堆内或者堆外 Coherence对开发者提供了有限的选项支持将数据存储在堆外
4 堆外索引 只要配置了堆外存储,Ignite就会在堆外存储索引(为了不影响使用堆内内存的用户应用。) 不支持
5 SQL查询 Ignite支持完整的SQL(ANSI-99)语法以查询查询内存中的数据 不支持
6 关联查询 Ignite支持完整的SQL关联,包括跨多个缓存的关联,比如:select * from A a, B b where a.b_id = b.id Coherence不支持任何的关联查询,不管用不用SQL,如果需要,开发者需要手工处理多个查询的结果。
7 ACID事务 Ignite提供了每台服务器每秒成千上万事务的优异性能。 Coherence因为性能原因不建议使用事务。
8 分层存储 Ignite支持分层存储模型,数据可以在堆内、堆外以及交换空间内存储和移动,上层将提供更多的存储能力,当然延迟也会增加。 不支持
9 数据流 Ignite提供内存流的支持,包括支持流数据的维护、查询和浮动窗口 不支持
10 配置 Ignite支持通过Java Bean以及原生的Spring XML集成对系统进行配置,同时也支持通过代码对系统进行方便配置的能力。

3.Ignite和Gemfire

Apache Ignite和Pivotal Gemfire都提供了富数据网格的特性,解决了可扩展的分布式集群环境下在内存中对数据进行缓存和分区的问题。

Ignite和Gemfire在缓存的方式上是有很多不同的,同时支持事务和数据的查询,下面的表格列出了一些主要的不同点,这些都是我们在选择数据网格产品时需要特别关注的。

序号 对比项目 Apache Ignite Pivotal Gemfire
1 开源和闭源 Ignite是一个Apache的开源项目,并且还在不断的增加新特性,对C++和.NET/C#和Node.js的支持也会很快到来。 Gemfire是Pivotal的专有软件。
2 JCache (JSR107) Ignite数据网格是JCache(JSR107)规范的一个实现,该API为数据访问提供了简单易用、但是功能强大的API。 Gemfire没有实现JCache,使用专有的API。
3 堆外存储 Ignite根据用户配置支持将数据存储在堆内和堆外 Gemfire不支持将数据存储在堆外
4 SQL查询 Ignite支持完整的SQL(ANSI-99) 查询语法以查询内存中的数据。 Gemfire不支持标准的SQL语法,但是他提供了他自己的叫做OQL的对象查询语言。
5 关联查询 Ignite支持完整的SQL关联,包括跨多个缓存的关联,比如:select * from A a, B b where a.b_id = b.id Gemfire不支持任何的跨区或者跨缓存的关联查询,如果需要,开发者需要手工处理多个查询的结果。
6 跨分区事务 Ignite支持跨分区事务,事务可以在整个集群中缓存的所有分区中执行。 Gemfire不支持跨越多个缓存分区或者节点的事务。
7 分层存储 Ignite支持分层存储模型,数据可以在堆内、堆外以及交换空间内存储和移动,上层将提供更多的存储能力,当然延迟也会增加。 不支持
8 数据流 Ignite提供内存流的支持,包括支持流数据的维护、查询和浮动窗口 不支持
9 配置 Ignite支持通过Java Bean以及原生的Spring XML集成对系统进行配置,同时也支持通过代码对系统进行方便配置的能力。 Gemfire通过专有的XML格式文件进行配置,不支持通过代码进行配置。
10 部署 Ignite节点是对等的,并且在启动时自动加入集群(不需要任何locator服务器)。 Gemfire需要启动和维护一个locator服务器,以便控制节点的加入和退出。

4.Ignite和Redis

Apache Ignite和Redis都提供了分布式缓存的功能,但是每个产品提供的功能特性是非常不同的。Redis主要是一个数据结构存储,但是Ignite提供了很多内存内的分布式组件,包括数据网格、计算网格、流,当然也包括数据结构。

Ignite是一个内存数据组织,并且提供了更多的功能,无法进行一个一个对应功能特性的比较,但是我们仍然能对一些数据网格功能进行比较。

序号 对比项目 Apache Ignite Redis
1 JCache (JSR 107) Ignite完全兼容JCache(JSR107)缓存规范 不支持
2 ACID事务 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提供客户端缓存最近访问数据的直接支持。 Redis不支持客户端缓存。
7 服务器端并行处理 Ignite支持在服务器端,靠近数据并行地直接执行任何Java, C++和.NET/C#代码。 Redis通常没有任何并行数据处理的能力,服务器端基本只支持LUA脚本语言,服务器端不直接支持Java, .NET,或者C++代码执行。
8 SQL查询 Ignite支持完整SQL(ANSI-99)语法以查询内存中的数据。 Redis不支持任何查询语言,只支持客户端缓存API。
9 持续查询 Ignite提供对客户端和服务器端持续查询的支持,用户可以设置服务器端的过滤器来减少和降低传输到客户端的数据量。 Redis提供客户端基于键值的事件通知的支持,然而,他不提供服务器端的过滤器,因此造成了在客户端和服务器端中更新通知网络流量的显著增加。
10 数据库集成 Ignite可以自动集成外部的数据库-RDBMS, NoSQL,和HDFS 不支持

按照官方的说法,Ignite是很强大的整体解决方案和开发平台,功能很多而且复杂,没有提到缺点或者说坑,这个只能使用过程中逐步发现和解决,虽然Ignite本身历史尚短,但是既然来源于历史不算短的商业软件,还是经过实际生产环境验证的,基本功能的可用性肯定是有的。

Apache Ignite(一):简介以及和Coherence、Gemfire、Redis等的比较相关推荐

  1. Ignite简介以及和Coherence、Gemfire、Redis等的比较

    1.Ignite简介 Apache Ignite 内存数据组织框架是一个高性能.集成化和分布式的内存计算和事务平台,用于大规模的数据集处理,比传统的基于磁盘或闪存的技术具有更高的性能,同时他还为应用和 ...

  2. Apache Ignite,Hazelcast,Cassandra和Tarantool之间的主要区别

    Apache Ignite在世界范围内得到广泛使用,并且一直在增长. 诸如Barclays,Misys,Sberbank(欧洲第三大银行),ING,JacTravel之类的公司都使用Ignite来增强 ...

  3. Apache Ignite详解

    文章目录 一.Ignite简介和用途 简介 (1)In-Memory Database (2)Key-Value In-Memory Data Grid (3)Database Caching (4) ...

  4. 用Apache Ignite实现可扩展的数据网格

    在本文中,我们将先介绍数据网格(Data Grid)的基本概念.属性.以及能够提供的服务,然后讨论如何设计可扩展的数据网格,以满足实际场景的业务需求. 什么是数据网格? 数据网格是一组能够提供共享数据 ...

  5. Apache Ignite剖析

    1.概述 Apache Ignite和Apache Arrow很类似,属于大数据范畴中的内存分布式管理系统.在<Apache Arrow 内存数据>中介绍了Arrow的相关内容,它统一了大 ...

  6. Apache Ignite——集合分布式缓存、计算、存储的分布式框架

    Apache Ignite内存数据组织平台是一个高性能.集成化.混合式的企业级分布式架构解决方案,核心价值在于可以帮助我们实现分布式架构透明化,开发人员根本不知道分布式技术的存在,可以使分布式缓存.计 ...

  7. Apache Ignite(五):Ignite的集群部署

    Ignite具有非常先进的集群能力,本文针对和集群有关的技术点做一个简短的介绍,然后针对实际应用的可能部署形式做了说明和对比,从中我们可以发现,Ignite平台在部署的灵活性上,具有很大的优势.\ 1 ...

  8. Apache Ignite与Apache Hive的个人理解与总结

    首先,贴一下官网链接辟邪:官网链接 下面,就看我强行总结吧,如果理解有误,请大佬及时指正,感激不尽! Apache Ignite是啥玩意,在上一篇已经讲过了,可能还比较易于理解:理解Ignite传送门 ...

  9. BigData之Storm:Apache Storm的简介、深入理解、下载、案例应用之详细攻略

    BigData之Storm:Apache Storm的简介.深入理解.下载.案例应用之详细攻略 目录 Apache Storm的简介 Apache Storm的深入理解 1.Storm与hadoop ...

  10. 基准测试:Apache Ignite仍然领先于Hazelcast

    为什么80%的码农都做不了架构师?>>>    当在谷歌中搜索Apache Ignite时,发生了一个奇怪的事:Hazelcast的广告跑到了列表的顶部,建议说Hazelcast比I ...

最新文章

  1. 目前流行的源程序版本管理软件和项目管理软件都有哪些?各有什么优缺点?...
  2. 解决SpringMvc后台接收json数据中文乱码问题
  3. jdbc封装工具类代码_JDBC的使用-JDBC(3)
  4. php抑制错误,PHP 行内错误抑制
  5. 【转】CSS样式覆盖规则
  6. NOI大纲 CSP初赛篇·知识大纲 CSP-入门级-NOI大纲
  7. 【XSY2519】神经元 prufer序列 DP
  8. aix查看文件夹大小命令_轻松掌握 Linux 命令(1):ls 命令
  9. java常用数据结构有哪些
  10. auto_ptr http://www.cnblogs.com/jtf-china/archive/2011/06/09/2076792.html
  11. 人工智能来了 微智全景首款刷脸支付终端亮相
  12. 什么是CDN加速服务器?
  13. Vue3——Suspense组件
  14. delphi控制excel ,在指定单元格后插入行
  15. STM32-外部中断详解
  16. 图像自动去暗角算法(vegnetting
  17. 计算机报名照片没有重命名,照片重命名怎么弄
  18. 1月书讯:Hello 2021! (上)
  19. JavaScript两大支柱-PART2:函数式编程
  20. PythonStock(31)股票系统:本来想迁移到tushare pro 版本的,但是发现还是需要积分的,研究新的股票数据库 easyquotation

热门文章

  1. python豆瓣历史评分_python快速查豆瓣评分
  2. android 代码设置 键盘适应_MTK6577+Android之按键(key)修改
  3. php iis7.5_浅析iis7.5安装配置php环境
  4. 洛谷每日三题之第四天
  5. 自定义类型:枚举,结构体,联合体
  6. 部分无法打开的pdf文件处理方法
  7. CPU指令集存储位置在哪里?
  8. 6sigma 基本概念
  9. 读书感受 之 《如何说客户才会听,怎么听客户才肯说》
  10. OSChina 周日乱弹 ——领导问:功能几天能开发完?怎么回