Apache Ignite(八):核心特性一览

1.事务和分析

1.1.数据网格

Ignite内存数据网格是一个内存内的键值存储,他能够在分布式集群的内存内缓存数据。 它经过强语义的数据位置和关系数据路由,来下降冗余数据的噪声,使其能够节点数的线性增加,直至几百个节点。 Ignite数据网格速度足够快,通过官方不断的测试,目前,他是分布式集群中支持事务性或原子性数据的最快的实现之一。java

特性一览算法

1.1.1.键值存储

Ignite数据网格是一个内存内的键值存储,能够视为分布式的分区化的哈希,集群中每一个节点都持有全部数据的一部分,这意味着集群内节点越多,就能够缓存越多的数据。 和其余键值存储不一样,Ignite经过可插拔的哈选算法来决定数据的位置,每一个客户端均可以经过插入一个自定义的哈希函数来决定一个键属于那个节点,并不须要任何特殊的映射服务或者命名节点。数据库

1.1.2.JCache(JSR107)

Ignite 100%兼容于JCache(JSR107)规范,JCache为数据缓存提供了很是简单,可是功能又很是强大的API。 JCache的一部分API包括:apache

  • 基本缓存操做
  • ConcurrentMap APIs
  • 并置处理(EntryProcessor)
  • 事件和度量
  • 可插拔的持久化Ï

1.1.3.分区和复制

根据配置,Ignite能够对内存内的数据进行分区或者复制,和REPLICATED模式不一样,数据是在集群内的全部节点中全复制的,在PARTITIONED模式中,数据是在集群内的多个节点中平均拆分的,容许在内存内缓存TB级的数据。 Ignite也能够配置成具备多个副本,来保证故障时的数据弹性。缓存

1.1.4.并置处理

Ignite能够在接近数据的服务端,以并置的方式执行执行任何原生的Java、C++和.Net/C#代码。服务器

1.1.5.自修复集群

Ignite集群能够自我修复,故障时客户端会自动重连,慢客户端会被自动踢出,故障节点的数据也会被自动传播到网格内的其余节点。网络

1.1.6.客户端近缓存

近缓存是本地客户端侧的缓存,他会存储最近和最频繁访问的数据。数据结构

1.1.7.堆内和堆外内存

Ignite在内存中支持2种模式的数据缓存,堆内堆外。当缓存数据占用很大的堆,超过了Java主堆空间时,堆外存储能够克服JVM垃圾回收(gc)致使的长时间暂停,但数据仍然在内存内。闭包

1.1.8.堆外索引

当配置为堆外存储时,Ignite同时也会在堆外存储查询索引,这意味着索引不会占用任何堆内内存的空间。并发

1.1.9.分层存储

若是数据变冷(不被访问),Ignite会有选择地将其从堆内移动到堆外,而后再从堆外移动到交换存储(磁盘)。 当某些数据又被访问时,他会当即被传播到顶层,而且将其余的冷数据降到低一级的存储层。

1.1.10.二进制协议

从1.5版本开始,Ignite引入了一个新的存储缓存数据的概念,叫作二进制对象,他能够:

  • 读取一个序列化的对象的属性而不须要将整个对象反序列化;
  • 动态改变一个对象的结构;
  • 动态建立一个对象的结构。

1.1.11.ACID事务

Ignite提供了一个彻底符合ACID的分布式事务来保证一致性。 Ignite支持乐观悲观的并发模型以及读提交可复制读序列化的隔离级别。 Ignite的事务使用了二阶段提交协议,适当地也进行了不少一阶段提交的优化。

1.1.12.无死锁事务

Ignite支持无死锁的乐观事务,他不得到任何锁,用户也不用担忧锁的顺序,这样的事务也提供了更好的性能。

1.1.13.事务化EntryProcessor

Ignite的事务化EntryProcessor能够在服务端以一个事务来执行并置化的逻辑。

1.1.14.跨分区事务

Ignite能够在整个集群中,在一个缓存的全部分区中执行事务。

1.1.15.锁

Ignite容许开发人员定义明确的锁来强制缓存对象的互斥。

1.1.16.SQL查询

Ignite支持使用标准的SQL语法(ANSI 99)来查询缓存,可使用任何的SQL函数,包括聚合和分组。

1.1.17.分布式关联

Ignite支持分布式的SQL关联跨缓存的关联

1.1.18.持续查询

持续查询对于当执行一个查询后又想持续的得到以前的查询结果的数据更新通知时,是很是有用的。

1.1.19.查询索引

对于SQL查询,Ignite支持内存内的索引,所以全部的数据检索都是很是快的。

1.1.20.查询一致性

Ignite支持完整的查询一致性,查询开始执行后的更新不会影响查询的结果。

1.1.21.查询容错

Ignite的查询是容错的,即查询结果老是一致的而且不会受到集群拓扑改变的影响。

1.1.22.JDBC驱动

Ignite提供JDBC驱动,可使用标准SQL查询和JDBC API得到缓存内的分布式数据。

1.1.23.ODBC驱动

Ignite的ODBC驱动可使用标准的SQL查询和ODBC API来从缓存中得到数据。

1.1.24.通写

通写模式容许更新数据库中的数据。

1.1.25.通读

通读模式容许从数据库中读取数据。

1.1.26.后写缓存

Ignite提供了一个选项,经过后写缓存来异步地执行数据库更新。

1.1.27.自动持久化

自动化地链接底层数据库而且生成XML的对象关系映射配置和Java领域模型POJO。

1.1.28.数据库集成

Ignite能够自动地与外部数据库集成,包括RDBMS、NoSQL和HDFS。

1.1.29.Web Session集群化

Ignite数据网格可以缓存任何支持Java Servlet3.0规范的的应用服务器的Web Session,包括Apache Tomcat,Eclipse Jetty,Oracle WebLogic以及其余。 当运行应用服务器集群时缓存Web Session对于提升Servlet容器的性能以及可扩展性是很是有用的。

1.1.30.Hibernate二级缓存

Ignite能够做为Hibernate的二级缓存(或者L2Cache),他能够显著的提升应用中持久化层的速度。

1.1.31.Spring缓存

Ignite支持基于Spring注解方式的Java方法缓存以使一个方法的执行结果能够缓存在Ignite缓存中。之后若是同一个方法经过一样的参数集进行调用,结果会直接从缓存中获取而不是实际执行这个方法。

1.1.32.C#/.NET

Ignite.NET构建于Ignite之上,他能够执行几乎全部的内存数据网格操做,包括ACID事务、SQL查询、分布式关联、消息和事件等。

1.1.33.C++

Ignite.C++构建于Ignite之上,他能够执行几乎全部的内存数据网格操做,包括SQL查询、分布式关联等。

1.1.34.XA/JTA

Ignite能够配置为一个Java事务API(JTA)事务管理器搜索类。

1.1.35.OSGi支持

Ignite提供了对OSGi的支持。

1.2.计算网格

分布式计算是经过并行处理的方式来得到更高的性能,更低的延迟以及线性可扩展性,Ignite计算网格提供了一组简单的API来容许用户在集群内的多台计算机中执行分布式计算和数据处理。 分布式并行计算是基于在集群内的节点中进行任何的计算而后将结果返回的能力。

特性一览

1.2.1.分布式闭包执行

Ignite计算网格能够对集群内的任何闭包进行广播和负载平衡,包括Java8 lambda,还包括纯Java Runnables和Callables。

1.2.2.ForkJoin处理

ComputeTask是Ignite对内存内ForkJoin范式的抽象,也是MapReduce的一个轻量级形式。纯MapReduce并非为了性能而构建,只是适用于进行离线数据的批量处理(好比Hadoop MapReduce)。 然而,对驻留在内存的数据进行计算时,实时性,低延迟和高吞吐量一般具备很高的优先级,同时,简化API也很是重要。基于这些考虑,Ignite提供了ComputeTask API,这个就是Ignite的ForkJoin实现(轻量级MapReduce)。

1.2.3.集群化 ExecutorService

Ignite提供了一个标准JDK中ExecutorService的集群实现,他会自动地在集群内以负载平衡的模式执行全部的计算。计算也会容错而且只要有一个节点就能保证执行,你能够把他视为集群化的分布式的线程池。

1.2.4.计算和数据的并置

计算和数据的并置可使网络中数据序列化最小化,而且能够显著的提升应用的性能和可扩展性。无论什么时候,都要尽可能作好集群节点中缓存的待处理数据和计算的并置。 Ignite根据须要,能够提供多种方式自动或者手动地进行计算和数据的并置。

1.2.5.容错

Ignite支持自动做业故障切换。若是一个节点崩溃或其余错误,做业会自动转移到其余可用节点从新执行。可插拔的FailoverSpi负责进行执行一个故障任务时新节点的选择。 至少一次保证:Ignite保证只要有一个节点存在,任务就不会丢失。

1.2.6.负载均衡

负载平衡组件负责平衡集群内各节点的分布式任务。Ignite中负载平衡是经过可插拔的LoadBalancingSpi实现的,它控制集群内全部节点的负载而且确保集群内的每一个节点的均衡负载。 对于同质化环境中的同质化任务,负载平衡是经过随机或者循环的策略实现的。然而,在不少其余的场景中,特别是在负荷不均衡时,他提供了不少的更复杂的自适应的负载平衡策略。

1.2.7.做业检查点

检查点是经过可插拔的CheckpointSpi实现的,他提供了一个保存做业中间状态的功能,检查点对于长期执行的任务须要保存一些中间状态以防止节点故障是很是有用的。当一个故障节点重启时,一个做业能够载入一个保存的检查点而后从故障处继续执行。

1.2.8.做业调度

可插拔的CollisionSpi对于待执行的做业到达某个节点时如何进行调度提供了细粒度的控制。他提供了不少的策略,包括:FIFO,优先级甚至磨洋工。

1.3.流式计算和CEP

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

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

特性一览

1.3.1.数据流处理器

数据流处理器是由IgniteDataStreamer API定义的,他是为了将大量的持续数据流注入Ignite流缓存而构建的。数据流处理器以可扩展和容错的方式,为全部数据流注入ignite提供了至少一次保证

1.3.2.并置处理

当须要执行自定义的业务逻辑而不只仅是添加新数据时,就须要利用StreamRecerver API的优点了。 流接收器容许直接在缓存数据的节点上以并置的方式处理数据流,在数据进入缓存以前能够修改数据或者添加任何自定义预处理逻辑.

1.3.3.滑动窗口

Ignite流功能也容许在数据滑动窗口内进行查询。滑动窗口被配置为Ignite的缓存退出策略,能够基于时间基于大小或者基于批量处理,能够配置一个缓存一个数据窗口,然而,若是须要同一个数据具备不一样的滑动窗口,也能够很是容易的为同一个数据定义不止一个缓存。

1.3.4.滑动窗口查询

可使用全部的Ignite数据索引功能,再加上Ignite SQL、TEXT,以及基于谓词的缓存查询,在数据流中进行查询。

1.3.5.持续查询

持续查询对于当执行一个查询后又想持续的得到以前的查询结果的数据更新通知时,是很是有用的。

1.3.6.JMS数据流处理器

Ignite的JMS数据流处理器能够从JMS代理中消费消息而后将他们插入Ignite缓存。

1.3.7.Apache Flume Sink

IgniteSink是一个Flume池,他会从一个相关的Flume通道中提取事件而后将其注入Ignite缓存。

1.3.8.MQTT流处理器

Ignite的MQTT流处理器从一个MQTT主题中消费消息,而后向Ignite缓存提供一个转换后的键值对。

1.3.9.Twitter流处理器

Ignite的Twitter流处理器从一个Twitter流API中消费消息,而后将他们注入Ignite缓存。

1.3.10.Apache Kafka流处理器

Ignite的Kafka数据流处理器从一个Kafka代理中的给定Kafka主题中消费消息,而后将他们插入Ignite缓存。

1.3.11.Apache Camel流处理器

Ignite的Camel流处理器从一个Apache Camel消费者端点消费消息,而后将他们注入Ignite缓存。

1.3.12.Apache Storm流处理器

Ignite的Storm流处理器从一个Apache Storm消费者端点消费消息,而后将他们注入Ignite缓存。

1.4.分布式数据结构

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

支持的数据结构包括:

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

特性一览

1.4.1.队列和集合

Ignite提供了一个快速的分布式阻塞队列分布式集合的实现。

1.4.2.并置和非并置

队列和集合能够以并置或者非并置的方式进行部署。在并置模式中,集合中的全部元素都会驻留在同一个集群节点上。这种模式下,应该使用相对较小的集合。在非并置模式下,集合的元素会均等地分布在集群内,这就容许在内存内保存很大的集合。

1.4.3.有界队列

有界队列容许用户持有一个有预约义最大容量的队列,这将有助于控制整个缓存的容量。

1.4.4.原子化类型

Ignite支持分布式的AtomicLongAtomicReference

1.4.5.CountDownLatch

Ignite的CountDownLatch能够在全部的Ignite节点上同步做业。

1.4.6.基于预留的ID生成器

ID生成器是经过AtomicSequence实现的,当以原子序列执行incrementAndGet()(或任何其余的原子性操做)时,数据结构会保存将来值的一个范围,这会保证跨集群内该序列实例的惟一性。

1.4.7.Semaphore

Ignite的分布式semaphore的实现和行为相似于** java.util.concurrent.Semaphore**。

1.5.分布式消息和事件

Ignite提供了集群范围的高性能的消息功能,支持基于发布-订阅以及直接点对点通讯模型的数据交换。消息能够以有序的,也能够以无序的方式进行交换。有序消息会稍微有点慢,可是若是使用的话,Ignite会保证收到消息的顺序和发送消息的顺序一致。 当在分布式网格环境中发生各类事件时,Ignite的分布式事件功能可使应用收到通知。能够自动地收到集群内的本地和远程节点上发生的任务执行、读写和查询操做的通知,事件通知也能够分组在一块儿而后分批或者按期地发送。

特性一览

1.5.1.基于主题的消息

Ignite的分布式消息可使全部的节点基于主题进行集群范围的通讯。

1.5.2.对对点的消息

Ignite的消息能够发给一组节点或者一个单独的节点。

1.5.3.有序和无序

Ignite支持有序的以及无序的消息,有序消息要稍微慢一点,可是若是你用的话,Ignite保证收到消息的顺序和发送消息的顺序一致。

1.5.4.事件通知

当集群内发生各类事件时,Ignite的分布式事件功能可使应用收到通知。

1.5.5.本地和远程事件

应用能够收到集群内的本地和远程节点上有关任务执行、读写和查询操做的通知。

1.5.6.自动化批处理

事件通知能够分组在一块儿而后分批或者按期地进行发送。

1.6.服务网格

服务网格能够在集群中任意部署自定义的服务,能够实现和部署任意服务,好比自定义计数器,ID生成器,分级映射等。 服务网格的主要应用场景是提供了在集群中部署各类单例服务的能力。可是,若是须要一个服务的多实例,Ignite也能保证全部服务实例的正确部署和容错。

特性一览

1.6.1.用户定义服务

用户能够定义本身的服务而且Ignite会自动在集群内进行服务的分布化。好比,你能够建立本身特定的分布式计数器,或者自定义的数据加载服务,或者任何其余逻辑,而后将其部署到集群中。

1.6.2.集群单例

Ignite容许将任意数量的服务部署到任意的网格节点,然而,最经常使用的特性是在集群中部署单例服务,无论是拓扑变动仍是节点故障,Ignite都会维护单一性。

1.6.3.容错

Ignite会保证服务的持续有效,以及按照指定的配置进行部署,无论是拓扑变动仍是节点故障。

1.6.4.负载平衡

在全部的状况下,不仅是单例服务部署,Ignite都会自动地确保在集群内的每一个节点上部署大体数量相等的服务。当集群拓扑发生变化时,Ignite会对部署的服务进行从新评估,而后可能对已经部署的服务从新在其余节点上部署以保证更好的负载平衡。

1.7.自动化RDMS集成

Ignite支持与各类持久化存储的集成,它能够链接数据库,导入模式,配置索引类型,以及自动生成全部必要的XML OR映射配置和Java领域模型POJO,这些均可以轻易地下载和复制进本身的工程。 Ignite能够与任何支持JDBC驱动的关系数据库集成,包括Oracle、PostgreSQL、MS SQL Server和MySQL。

1.7.1.RDBMS集成向导

经过IgniteWeb控制台,能够自动化的进行RDBMS集成,这是一个交互式的配置向导、管理和监控工具,它能够:

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

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

2.Hadoop和Spark

2.1.Spark共享RDD

Apache Ignite提供了一个Spark RDD抽象的实现,他容许跨越多个Spark做业时方便地在内存内共享状态,无论是在同一个应用内部仍是在不一样的Spark应用之间。 IgniteRDD做为Ignite分布式缓存的视图,既能够在Spark做业执行进程中部署,也能够在Spark workder中部署,也能够在他本身的集群中部署。 根据预配置的部署模型,状态共享既能够只存在于一个Spark应用的生命周期的内部(嵌入式模式),或者也能够存在于Spark应用的外部(独立模式),这种模式下状态能够在多个Spark应用之间共享。

特性一览

2.1.1.共享Spark RDD

IgniteRDD是原生Spark RDD和DataFrame API的一个实现,除了全部的标准的RDD功能,还会跨越其余的Spark做业、应用和worker共享RDD的状态。

2.1.2.更快的SQL

Spark不支持SQL索引,可是Ignite能够,因为先进的内存索引功能,IgniteRDD在执行SQL查询时比Spark原生RDD或者DataFrame有百倍的性能提高。

2.2.内存文件系统

Ignite一个独有的技术就是叫作Ignite文件系统(IGFS)的分布式内存文件系统,IGFS提供了和Hadoop HDFS相似的功能,可是仅仅在内存内部。事实上,除了他本身的API,IGFS实现了Hadoop的文件系统API,而且能够透明地加入Hadoop或者Spark应用。 IGFS将每一个文件中的数据拆分为独立的数据块而后将他们存储在分布式内存缓存中。然而和Hadoop HDFS不一样,IGFS不须要一个name节点,而且用一个哈希函数自动地肯定文件数据位置。 IGFS能够独立部署,也能够部署在HDFS之上,无论是哪一种状况,他对于HDFS中存储的文件都是一个透明的缓存层。 Tachyon替代 在Spark环境中IGFS能够透明地替代Tachyon文件系统,鉴于IGFS是基于久经考验的Ignite数据网格技术,他会比Tachyon有更好的读和写性能,而且更稳定。 Hadoop文件系统 若是打算使用IGFS做为Hadoop文件系统,能够参考Hadoop集成文档,这时IGFS和HDFS并无什么不一样。

特性一览

2.2.1.堆内和堆外

IGFS既能够在堆内,也能够在堆外存储文件,对于更大的存储空间占用关键是利用堆外来避免长时间的JVM垃圾回收致使的暂停。

2.2.2.IGFS做为Hadoop文件系统

IGFS实现了Hadoop的FileSystem API,而且能够部署为原生的Hadoop文件系统,就像HDFS同样,这样就能够在Hadoop或者Spark环境中以即插即用的方式原生部署IGFS。

2.2.3.Hadoop文件系统缓存

IGFS也能够在另外一个Hadoop文件系统上部署为一个缓存层。这时IGFS中的一个文件若是发生变化,更新会被自动地写入HDFS。此外,若是读取了一个文件而且当时他不在IGFS中,Ignite会自动地将其从HDFS载入IGFS。

2.2.4.任意Hadoop发行版

IGFS集成了一个原生的Apache Hadoop发行版,也支持Cloudera CDH以及Hortonworks HDP。

2.3.内存MapReduce

Apache Ignite带来了一个Hadoop MapReduce API的内存实现,他比原生的Hadoop MapReduce实现有了显著的性能提高。Ignite MapReduce比Hadoop性能更好,是由于基于推的资源分配以及进程内的计算和数据的并置。 另外,由于IGFS不须要一个name节点,当使用IGFS时,Ignite MapReduce做业会在一个链路内直达IGFS数据节点。

特性一览

2.3.1.原生Hadoop MapReduce

Ignite MapReduce是Hadoop MapReduce API的一个实现,他能够原生地加入已有的Hadoop环境,而且性能有很大的提高。

2.3.2.Hadoop加速器

Ignite提供了一个Hadoop加速器发行版,包括IGFS以及Ignite MapReduce,这个环境能够很容易地加入已有的Hadoop环境。

3.无处不在地运行

3.1.客户端协议

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

3.1.1.Ignite原生客户端

对于客户端远程链接Ignite,原生客户端提供了完整的功能,他容许使用完整的Ignite API,包括近缓存,事务,计算,流式处理,服务等等。

3.1.2.Memcached

Ignite兼容于Memcached,他容许用户使用任何Memcached兼容客户端在Ignite缓存中保存以及获取分布式数据,包括Java、PHP、Python、Ruby以及其余的Memcached客户端。

3.1.3.REST/HTTP

Ignite提供了一个HTTP REST客户端,能够以REST的方式经过HTTP或者HTTPS协议进行通讯。REST API能够进行执行不一样的操做,好比从/往缓存中读/写、执行任务、获取各类指标等等。

3.1.4.SSL/TLS

Ignite容许在全部的Ignite客户端和服务端节点之间使用SSL进行Socket通讯。

3.1.5.Node.js(开发中)

Ignite将来会提供Node.js客户端,他能进行全部的缓存操做以及在Ignite中存储的JSON数据中执行SQL查询。

3.2.部署选项

Apache Ignite能够独立运行,在集群中运行,在Docker容器中运行,还能够运行在Apache Mesos以及Hadoop Yarn环境。他能够在物理机上运行,也能够在虚拟机上运行。 公有云 对于公有云环境,Ignite原生地继承了Amazon AWSGoogle Compute Engine,对于其余的云环境,Ignite集成了Apache JCloud,他支持大多数的云供应商容器 Ignite能够容易地运行于容器环境,Ignite集成了Docker,在服务器启动以前能够自动地构建而且将用户代码部署进Ignite。 资源管理 Ignite原生地集成了Hadoop YarnApache Mesos,能够将Ignite轻易地无缝部署进Hadoop和Spark环境。

特性一览

3.2.1.零部署

Ignite节点会自动地感知自定义类,而不须要显式地部署他们。

3.2.2.动态模式改变

Ignite以二进制的方式存储对象,而不须要在服务端节点上部署类。

3.2.3.独立集群

Ignite节点之间会自动感知,这有助于必要时扩展集群,而不须要重启整个集群,简单地启动新加入的节点而后他们就是自动地加入集群。

3.2.4.Docker容器

Docker能够将Ignite及其全部的依赖打包进一个标准的映像。Docker自动下载Ignite版本映像以后,就能够将用户的应用部署进Ignite,配置节点,他会自动启动整个配置好的Ignite节点。

3.2.5.公共云

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

3.2.6.Apache Mesos

Ignite提供了Apache Mesos的原生支持,能够很容易地将Ignite部署进Mesos数据中心,好比Hadoop和Spark环境。

3.2.7.Hadoop Yarn

Ignite提供了Hadoop Yarn的原生支持,能够很容易地将Ignite部署进Hadoop和Spark环境。

相关文章
相关标签/搜索