文档章节

Apache Ignite核心特性介绍(2.1.0版)

李玉珏
 李玉珏
发布于 2017/08/05 15:50
字数 5003
阅读 1239
收藏 10

Apache Ignite核心特性介绍(2.1.0版)

1.摘要

1.Ignite是什么?

1

  • 一个以内存为中心的数据平台
  • 强一致性
  • 高可用
  • 强大的SQL、键-值以及相关处理的API

Ignite是不是分布式数据库?

,在整个集群的多个节点中,Ignite中的数据要么是分区模式的,要么是复制模式的,这给系统带来了伸缩性,增加了弹性。Ignite可以自动化地控制数据如何分区,然而,开发者也可以插入自定义的函数,以及为了提高效率将部分数据并置在一起。

Ignite是不是关系型SQL数据库?

不完整,尽管Ignite的目标是和其他的关系型SQL数据库具有类似的行为,但是在处理约束和索引方面还是有不同的。Ignite支持一级和二级索引,但是只有一级索引支持唯一性,Ignite还不支持外键约束。 从根本上来说,Ignite作为约束不支持任何会导致集群广播消息的更新以及显著降低系统性能和可伸缩性的操作。

Ignite是不是内存数据库?

,虽然Ignite的固化内存在内存和磁盘中都工作得很好,但是磁盘持久化是可以禁用的,使Ignite作为一个纯粹的内存数据库。

Ignite是不是事务型数据库?

不完整,ACID事务是支持的,但是仅仅在键-值API级别,Ignite还支持跨分区的事务,这意味着事务可以跨越不同服务器不同分区中的键。 在SQL层,Ignite支持原子性,还不是事务型一致性,社区计划在2.2版本中实现SQL事务。

Ignite是不是键-值存储?

,Ignite提供了键-值API,兼容于JCache (JSR-107),并且支持Java,C++和.NET。

Ignite是不是内存数据网格(IMDG)?

,Ignite是一个全功能的数据网格,它既可以用于纯内存模式,也可以带有Ignite的原生持久化,它也可以与任何第三方数据库集成,包括RDBMS和NoSQL。

固化内存是什么?

Ignite的固化内存架构使得Ignite可以将内存计算延伸至磁盘,它基于一个页面化的堆外内存分配器,它通过写前日志(WAL)的持久化来对数据进行固化,当持久化禁用之后,固化内存就会变成一个纯粹的内存存储。

并置处理是什么?

Ignite是一个分布式系统,因此,有能力将数据和数据以及数据和计算进行并置就变得非常重要,这会避免分布式数据噪声。当执行分布式SQL关联时数据的并置就变得非常的重要。Ignite还支持将用户的逻辑(函数,lambda等)直接发到数据所在的节点然后在本地进行数据的运算。

2.关键特性

2.1.固化内存

2

Ignite作为以内存为中心的平台,是基于固化内存架构的,当Ignite持久化存储特性开启时,它可以在内存和磁盘中存储和处理数据和索引。

该内存架构在可以将集群中的所有可用资源持久化到磁盘的前提下,还可以获得内存级的高性能。 Ignite固化内存的构建和操作方式,类似于比如Linux这样的操作系统的虚拟内存。但是两者的显著区别是,如果开启持久化存储的话,固化内存会一直将整个数据和索引保持在磁盘上,而虚拟内存使用磁盘只是用于交换用途。

当固化内存和Ignite持久化存储同时开启时,下面Ignite作为一个平台的优势和特点:

内存

  • 堆外内存
  • 避免明显的GC暂停
  • 自动碎片整理
  • 可预测的内存消耗
  • 高SQL性能

磁盘

  • 可选的持久化
  • 支持闪存、SSD以及Intel的3D Xpoint
  • 存储数据的超集
  • 全事务化(前写日志WAL)
  • 集群瞬时启动

2.2.Ignite持久化

3

Ignite持久化存储是一个分布式的、支持ACID、兼容SQL的磁盘存储,它作为一个可选的磁盘层,可以将数据和索引存储在SSD、闪存、3D XPoint以及其他的非易失性存储器中,并且可以透明地与Ignite固化内存进行集成。

开启持久化存储后,就不再需要将所有的数据和索引保持在内存中,也不再需要在节点或者集群重启后对数据进行预热,因为Ignite的固化内存和持久化存储是紧密耦合的,并且视其为二级存储。这意味着如果数据或者索引的子集在内存中遗失,固化内存会从磁盘中获取。

Ignite的持久化存储相比于第三方存储有很多的优势(RDBMS、NoSQL、Hadoop),它可以作为Ignite集群的一个可替代的持久化层。

  • 可以在数据中执行SQL查询,不管数据在内存中还是在磁盘中,这意味着Ignite可以作为一个经过内存优化的分布式SQL数据库;
  • 不再需要将所有的数据和索引保持在内存中,持久化存储可以在磁盘上存储数据的超集,然后只在内存中保存频繁访问的数据的子集;
  • 集群的瞬时重启,如果整个集群停机,不再需要通过预加载数据而对内存进行预热,只要所有集群节点都连接在一起了,整个集群就可以正常运转了;
  • 数据和索引在内存和磁盘中是以相似的格式进行存储的,这有助于避免昂贵的格式转换,数据集只是在内存和磁盘之间进行移动;
  • 通过插入第三方解决方案,可以创建完整的增量集群快照。

2.3.分布式SQL数据库

4

在Ignite中,作为平台的一部分,提供了分布式SQL数据库的功能,这个数据库可以水平扩展、容错并且兼容ANSI-99标准,它支持所有的SQL以及DML命令,包括SELECT、UPDATE、INSERT、MERGE以及DELETE,它还提供了对和分布式数据库相关的DDL命令的一个子集的支持。

有赖于固化内存架构,数据集和索引可以同时在内存和磁盘中存储,这样可以跨越不同的存储层执行分布式SQL操作,来获得可以固化到磁盘的内存级性能。

可以在Java、C++、.NET中通过原生的API使用SQL语言来与Ignite进行交互,也可以通过Ignite的JDBC或者ODBC驱动,这从语言层面来说,比如PHP、Ruby以及其他的,具有了真正的跨平台连接性。

2.4.内存数据网格

5

Ignite内存数据网格是一个内存中的分布式键-值存储,它可以在分布式集群的内存中缓存数据,Ignite数据网格可以视为一个分布式分区化的哈希,其中每个节点都持有整个数据集的一部分,这样的话,随着不断地增加新节点,就可以缓存更多的数据。

Ignite数据网格甚至可以线性地增长到几百个节点,它通过强语义的数据位置和关系数据路由,来降低冗余数据噪声。

Ignite数据网格速度足够快,经过官方不断的测试,目前,他是分布式集群中支持事务性或原子性数据的最快的实现之一。

2.5.内存计算网格

6

分布式计算是通过并行处理的方式来获得更高的性能,更低的延迟以及线性可扩展性,Ignite计算网格提供了一组简单的API来允许用户在集群内的多台计算机中执行分布式计算和数据处理。

分布式并行计算是基于在集群内的节点中进行任何的计算然后将结果返回的能力。

2.6.机器学习(测试)

7

Ignite从2.0版本开始,引入了一个叫做机器学习网格的分布式机器学习库的第一版。

构建机器学习网格的理由很简单,很多用户将Ignite作为各种数据集的高性能存储和处理核心系统,如果用户想在这些数据集上执行机器学习或者深度学习(即训练集或者模型推理),就需要首先进行ETL,将数据转换到其他的系统中,比如Apache Mahout或者Apache Spark。

机器学习网格的路线图是从基于分布式协同处理的核心代数实现开始的。初始版本在Ignite的2.0版本中发布。未来的版本会为Python、R以及Scala引入自定义DSL,不断优化机器学习算法集比如线性和逻辑回归、决策树/随机森林、SVM、朴素贝叶斯以及支持经过Ignite优化的神经网络,还有就是集成TensorFlow。

当前测试版的Ignite机器学习网格,在高度优化和可扩展的Ignite平台基础上支持一个分布式的机器学习库,实现了一个本地化以及分布式的矢量和矩阵运算,还有已经广泛使用的算法的分布式版本。

3.扩展特性

3.1.服务网格

8

服务网格可以在集群中任意部署自定义的服务,可以实现和部署任意服务,比如自定义计数器,ID生成器,分级映射等。

服务网格的主要应用场景是提供了在集群中部署各种单例服务的能力。但是,如果需要一个服务的多实例,Ignite也能保证所有服务实例的正确部署和容错。

3.2.数据注入和流计算

9

Ignite流式计算允许以可扩展和容错的方式处理连续不中断的数据流。在一个中等规模的集群中,数据注入Ignite的比例会很高,很容易达到每秒百万级的规模。

工作方式:

  1. 客户端将流式数据注入Ignite;
  2. 数据在Ignite数据节点中自动分区;
  3. 数据在滑动窗口中并发处理;
  4. 客户端在流式数据中执行并发SQL查询
  5. 客户端订阅数据变化的持续查询

3.3.RDBMS集成

10

Ignite支持与各种持久化存储进行集成,它可以接入数据库、导入模式、配置索引类型、以及自动化地生成所有必要的XML OR映射配置和Java领域模型POJO,他们可以很容易地导入自己的开发工程。

Ignite可以与任何支持JDBC驱动的关系型数据库(RDBMS)进行集成,包括Oracle, PostgreSQL, Microsoft SQL Server, 和MySQL。

RDBMS集成向导

通过Web控制台,Ignite支持自动化的RDBMS集成,它是一个交互式的配置向导、管理和监控工具,功能包括:

  • 创建和下载各种集群的配置文件;
  • 从任何RDBMS模式中自动化地构建Ignite的SQL元数据;
  • 在内存缓存中执行SQL查询;
  • 查看查询的执行计划、内存模式和流化图表。

这个Web控制台是一个创新的工具,它提供了丰富的功能来管理集群,并不限于上述提到的这些功能。

3.4.分布式数据结构

Ignite以分布式的形式支持基于java.util.concurrent框架的大部分数据结构。比如,可以在一个节点上使用java.util.concurrent.BlockingQeque加入一些东西,然后再另一个节点上获取它。或者有一个分布式的ID生成器,他可以保证所有节点上的ID唯一性。

支持的数据结构包括:

  • Concurrent Map (Cache)
  • 分布式队列和集合
  • AtomicLong
  • AtomicReference
  • AtomicSequence (ID生成器)
  • CountDownLatch
  • ExecutorService

3.5.消息和事件

Ignite提供了集群范围的高性能的消息功能,支持基于发布-订阅以及直接点对点通信模型的数据交换。消息可以以有序的,也可以以无序的方式进行交换。有序消息会稍微有点慢,但是如果使用的话,Ignite会保证收到消息的顺序和发送消息的顺序一致。

当在分布式网格环境中发生各种事件时,Ignite的分布式事件功能可以使应用收到通知。可以自动地收到集群内的本地和远程节点上发生的任务执行、读写和查询操作的通知,事件通知也可以分组在一起然后分批或者定期地发送。

4.随处运行

4.1.Java

Ignite主要是用Java进行开发的,并且也提供了其他语言的原生支持。它在设计上是为内存计算的各种使用场景提供高性能的解决方案 - 从高性能计算,到工业级的先进数据网格,CEP以及数据流化处理。

Ignite本质上是一个内存键-值存储,它可以在分布式集群的内存中存储数据,然后在这个基础上支持ACID事务、SQL查询、分布式SQL关联、消息和事件、数据流化处理以及其他的功能。

通过在缓存中以通用的二进制格式写入对象,Ignite还支持跨平台的互操作性,这样使得应用可以在Java、.NET和C++之间无缝地进行操作。

4.2.Ignite.NET

Ignite.NET从设计上来说是在.NET平台上为内存计算的各种使用场景提供高性能的解决方案 - 从高性能计算,到工业级的先进数据网格,CEP以及数据流化处理。这些都是原生的,经过了.NET API的优化。 Ignite.NET是在Ignite之上构建的,这样就可以执行几乎所有的内存数据网格操作,包括ACID事务、SQL查询、分布式SQL关联、消息和事件、数据流化处理以及其他的。

通过在缓存中以通用的二进制格式写入对象,Ignite还支持跨平台的互操作性,这样使得应用可以在Java、.NET和C++之间无缝地进行操作。另外,Ignite.NET和Ignite C++都提供了原生的API,而它们的实现通过使用JNI委托了大部分的Java调用,这里,值得一提的是,JNI的消耗是最小的,不会造成性能的下降,特别是在分布式环境下,网络是最主要的开销,还有,Ignite提供了二进制编组器的纯.NET实现来保证性能。

4.3.Ignite C++

Ignite C++从设计上来说是在C++平台上为内存计算的各种使用场景提供高性能的解决方案 - 从高性能计算,到工业级的先进数据网格,CEP以及数据流化处理。这些都是原生的,经过了C++ API的优化。

Ignite C++是在Ignite之上构建的,这样就可以执行几乎所有的内存数据网格操作,包括ACID事务、SQL查询、分布式SQL关联、消息和事件、数据流化处理以及其他的。

通过在缓存中以通用的二进制格式写入对象,Ignite还支持跨平台的互操作性,这样使得应用可以在Java、.NET和C++之间无缝地进行操作。另外,Ignite.NET和Ignite C++都提供了原生的API,而它们的实现通过使用JNI委托了大部分的Java调用,这里,值得一提的是,JNI的消耗是最小的,不会造成性能的下降,特别是在分布式环境下,网络是最主要的开销,还有,Ignite提供了二进制编组器的纯C++实现来保证性能。

4.4.客户端协议

对于客户端连接Ignite集群,Ignite提供了若干种协议,包括Ignite原生客户端,REST/HTTP,SSL/TLS,Memcached,Node.js(正在开发中)等等。

4.5.部署选项

11

Apache Ignite可以独立运行,在集群中运行,在Kubernetes或者Docker容器中运行,还可以运行在Apache Mesos以及Hadoop Yarn环境。他可以在物理机上运行,也可以在虚拟机上运行。

公有云

对于公有云环境,Ignite原生地继承了Amazon AWSGoogle Compute Engine,对于其他的云环境,Ignite集成了Apache JCloud,他支持大多数的云供应商

容器

Ignite可以容易地运行于容器环境,Ignite集成了Docker,在服务器启动之前可以自动地构建并且将用户代码部署进Ignite。 Ignite也可以部署进Kubernetes环境,它可以自动化地部署和管理容器化的应用。

资源管理

Ignite原生地集成了Hadoop YarnApache Mesos,可以将Ignite轻易地无缝部署进Hadoop和Spark环境。

5.Hadoop & Spark

5.1.Spark共享RDD

12

Apache Ignite提供了一个Spark RDD抽象的实现,他允许跨越多个Spark作业时方便地在内存内共享状态,不管是在同一个应用内部还是在不同的Spark应用之间。

IgniteRDD作为Ignite分布式缓存的视图,既可以在Spark作业执行进程中部署,也可以在Spark workder中部署,也可以在他自己的集群中部署。

根据预配置的部署模型,状态共享既可以只存在于一个Spark应用的生命周期的内部(嵌入式模式),或者也可以存在于Spark应用的外部(独立模式),这种模式下状态可以在多个Spark应用之间共享。

5.2.内存文件系统

13

Ignite一个独有的技术就是叫做Ignite文件系统(IGFS)的分布式内存文件系统,IGFS提供了和Hadoop HDFS类似的功能,但是仅仅在内存内部。事实上,除了他自己的API,IGFS实现了Hadoop的文件系统API,并且可以透明地加入Hadoop或者Spark应用。

IGFS将每个文件中的数据拆分为独立的数据块然后将他们存储在分布式内存缓存中。然而和Hadoop HDFS不同,IGFS不需要一个name节点,并且用一个哈希函数自动地确定文件数据位置。

IGFS可以独立部署,也可以部署在HDFS之上,不管是哪种情况,他对于HDFS中存储的文件都是一个透明的缓存层。 IGFS可以与原生的Apache Hadoop发行版集成,也可以与Cloudera CDH、Hortonworks HDP集成。

Tachyon替代

在Spark环境中IGFS可以透明地替代Spark环境中的Tachyon文件系统,鉴于IGFS是基于久经考验的Ignite数据网格技术,他会比Tachyon有更好的读和写性能,并且更稳定。

Hadoop文件系统

如果打算使用IGFS作为Hadoop文件系统,可以参考Hadoop集成文档,这时IGFS和HDFS并没有什么不同。

5.3.内存MapReduce

14

Apache Ignite带来了一个Hadoop MapReduce API的内存实现,他比原生的Hadoop MapReduce实现有了显著的性能提升。Ignite MapReduce比Hadoop性能更好,是因为基于推的资源分配以及进程内的计算和数据的并置。

另外,因为IGFS不需要一个name节点,当使用IGFS时,Ignite MapReduce作业会在一个链路内直达IGFS数据节点。

© 著作权归作者所有

共有 人打赏支持
李玉珏

李玉珏

粉丝 307
博文 66
码字总数 110992
作品 0
沈阳
技术主管
私信 提问
加载中

评论(18)

lee_osg
lee_osg
IgniteCheckedException: Failed to activate cluster 报这种错误,无法激活集群
Matrix42
Matrix42

引用来自“李玉珏”的评论

引用来自“Raycee”的评论

请问可以使用HDFS做持久化吗?我看文档中并没有说明。我看文中说:"Ignite的持久化存储相比于第三方存储有很多的优势(RDBMS、NoSQL、Hadoop),它可以作为Ignite集群的一个可替代的持久化层。",如果可以的话可以告诉我怎么做吗?谢谢!

现有的实现是不能的,需要的话得自己开发了。
好的,谢谢!
李玉珏
李玉珏

引用来自“Raycee”的评论

请问可以使用HDFS做持久化吗?我看文档中并没有说明。我看文中说:"Ignite的持久化存储相比于第三方存储有很多的优势(RDBMS、NoSQL、Hadoop),它可以作为Ignite集群的一个可替代的持久化层。",如果可以的话可以告诉我怎么做吗?谢谢!

现有的实现是不能的,需要的话得自己开发了。
Matrix42
Matrix42
请问可以使用HDFS做持久化吗?我看文档中并没有说明。我看文中说:"Ignite的持久化存储相比于第三方存储有很多的优势(RDBMS、NoSQL、Hadoop),它可以作为Ignite集群的一个可替代的持久化层。",如果可以的话可以告诉我怎么做吗?谢谢!
lini123
lini123
您好,关于ignite自带的持久化,如果配置了
<property name="persistentStoreConfiguration">
<bean class="org.apache.ignite.configuration.PersistentStoreConfiguration"/>
</property>

的确可以在本地的work路径下面找到数据。但是如何实现ignite节点的恢复呢?比如当前节点crash了,重新打开之后,本地持久化的数据并不会自动恢复到原来的cache中。
ignite说支持从disc读取数据,是如何体现的呢?因为当我crash掉当前节点再重新打开后,并不能通过sql读取到dics里面的数据哦
d
dyyx007
java.sql.SQLException: Failed to connect to Ignite node [host=127.0.0.1, port=10800]
这个问题如何解决的?2.1版本
captainSean
captainSean
大神 web-console 这块本地部署能多指点一点么,本地化搭建的时候, 是怎么和mongo建立通信的,怎么设置用户和数据库地址,这块文档说明的比较少,个人搭建的时候一直有问题,求指导
lini123
lini123

引用来自“李玉珏”的评论

引用来自“lini123”的评论

您好,如果不进行配置的话,ignite 会自动持久化到磁盘吗?因为我现在测试一直在存数据到ignite,但是显示堆的占用量先升后降,并不稳定。没有随着数据量的增多而增加。

不会。
2.0之后的版本默认数据是保存在堆外的。
2.0之后的版本默认数据是保存在堆外?
但是用visitor控制台用cache命令看,显示所有的数据都是Heap上的,off-heap没有数据。数据的确已经存进去了,可以查询的刀。但是从visitor控制台的参数显示来看,我没有增加或者删除数据,内存占用也会发生比较明显的变化。请问什么方式可以看到我存入的数据共占用多少内存?包括堆上和堆外。
李玉珏
李玉珏

引用来自“lini123”的评论

您好,如果不进行配置的话,ignite 会自动持久化到磁盘吗?因为我现在测试一直在存数据到ignite,但是显示堆的占用量先升后降,并不稳定。没有随着数据量的增多而增加。

不会。
2.0之后的版本默认数据是保存在堆外的。
lini123
lini123
您好,如果不进行配置的话,ignite 会自动持久化到磁盘吗?因为我现在测试一直在存数据到ignite,但是显示堆的占用量先升后降,并不稳定。没有随着数据量的增多而增加。
Apache Ignite 2.1.0 版本发布,全新的持久化存储

社区宣布,Apache Ignite 2.1.0版本正式发布。 这个版本包括了一个捐赠来的全新特性-Ignite持久化存储,他具有完全的内存持久化架构,使得应用同时具有基于内存的高性能以及基于磁盘的持久化...

李玉珏
2017/07/28
1K
6
MyBatis Ignite 1.0.6 发布,MyBatis 缓存插件

MyBatis Ignite 1.0.6 发布了,MyBatis Ignite 是 MyBatis 的缓存插件。 本版本主要是将 Apache Ignite 更新至 2.1.0 和 MyBatis 更新至 3.4.5. 完整内容请查看发布说明和发行首页 下载地址:...

两味真火
2017/08/23
1K
4
Apache Ignite 2.6.0 版本发布,紧急问题修复

Apache IGNITE 2.6 已发布,更新如下 特性和改进 Apache Ignite Linux packages 2.6 update [#IGNITE-8807] Windows WSL configuration has to be added to Ignite configs [#IGNITE-8804] ......

李玉珏
07/19
950
0
Apache Ignite 2.5.0 版本发布,紧急问题修复

特性和改进 Apache Ignite Linux packages 2.6 update [#IGNITE-8807] Windows WSL configuration has to be added to Ignite configs [#IGNITE-8804] Support reuse of already initialized......

李玉珏
07/19
0
0
敢说 Apache Ignite 比 Tachyon 好?删帖!

编者说:本文的原作者在网上发表了 Apache Ignite 与 Tachyon 优劣的言论后,竟然发现帖子被无情的删除了,于是他贴出了与 Google 团队成员交流的邮件,顺便写下了下面的文章以表达愤懑之情。...

oschina
2015/05/01
7K
16

没有更多内容

加载失败,请刷新页面

加载更多

deepin中配置robot framework环境

本文永久更新地址:https://my.oschina.net/bysu/blog/2989005 【若要到岸,请摇船:开源中国 不最醉不龟归】 1.在终端中输入pip,回车,如果提示没有该命令,则先安转pip sudo apt-get inst...

不最醉不龟归
45分钟前
3
0
OSChina 周日乱弹 —— 钱不还,我就当你人不在了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享Bigleaf的单曲《小鹿》 《小鹿》- Bigleaf 手机党少年们想听歌,请使劲儿戳(这里) 周日在家做什么? 做手工呀, @poorfis...

小小编辑
今天
136
5
EOS docker开发环境

使用eos docker镜像是部署本地EOS开发环境的最轻松愉快的方法。使用官方提供的eos docker镜像,你可以快速建立一个eos开发环境,可以迅速启动开发节点和钱包服务器、创建账户、编写智能合约....

汇智网教程
今天
21
0
《唐史原来超有趣》的读后感优秀范文3700字

《唐史原来超有趣》的读后感优秀范文3700字: 作者:花若离。我今天分享的内容《唐史原来超有趣》这本书的读后感,我将这本书看了一遍之后就束之高阁了,不过里面的内容一直在在脑海中回放,...

原创小博客
今天
30
0
IC-CAD Methodology知识图谱

CAD (Computer Aided Design),计算机辅助设计,指利用计算机及其图形设备帮助设计人员进行设计工作,这个定义同样可以用来近似描述IC公司CAD工程师这个岗位的工作。 早期IC公司的CAD岗位最初...

李艳青1987
今天
40
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部