Ignite内存数据网格是一个内存内的键值存储,他能够在分布式集群的内存内缓存数据。 它经过强语义的数据位置和关系数据路由,来下降冗余数据的噪声,使其能够节点数的线性增加,直至几百个节点。 Ignite数据网格速度足够快,通过官方不断的测试,目前,他是分布式集群中支持事务性或原子性数据的最快的实现之一。 特性一览java
Ignite数据网格是一个内存内的键值存储,能够视为分布式的分区后的哈希,集群中每一个节点都持有全部数据的一部分,这意味着集群内节点越多,就能够缓存越多的数据。 和其余键值存储不一样,Ignite经过可插拔的哈选算法来决定数据的位置,每一个客户端均可以经过插入一个自定义的哈希函数来决定一个键属于那个节点,并不须要任何特殊的映射服务或者命名节点。算法
Ignite 100%兼容于JCache(JSR107)规范,JCache为数据缓存提供了很是简单,可是功能又很是强大的API。 JCache的一部分API包括:缓存
根据配置,Ignite能够对内存内的数据进行分区和复制,和REPLICATED模式不一样,数据是在集群内的全部节点中全复制的,在PARTITIONED模式中,数据是在集群内的多个节点中平均拆分的,容许在内存内缓存TB级的数据。 Ignite也能够配置成具备多个副本,来保证故障时的数据弹性。 无论使用那种缓存模式,Ignite都保证任何故障模式下跨全部集群节点的数据一致性。服务器
Ignite集群能够自我修复,故障时客户端会自动重连,慢的客户端会被自动踢出,故障节点的数据也会被自动传播到网格内的其余节点。网络
当数据被远程客户端访问时,Ignite也支持客户端侧的近缓存,在事务模式下,近缓存中的数据仍然是事务性的,要么是自动更新,要么是以一直的方式更新事务提交无效。数据结构
Ignite支持2种模式的缓存操做,事务性和原子性,事务模式下,能够事务性的将多个缓存操做做为一组,而原子模式下支持多个原子操做,一次一个。原子模式更轻量一般比事务模式缓存具备更好的性能。 事务模式下Ignite支持乐观事务和悲观事务,使用了尽量通过一阶段提交优化后的2阶段提交协议。闭包
Ignite提供了很是优雅的查询API,支持:并发
对于SQL和文本查询,Ignite提供了内存内的索引,所以全部的数据查询都是很是快的,若是在堆外内存缓存数据,查询索引也会在堆外内存中。 Ignite也容许用户使用可插拔的IndexingSpi来定制本身的索引。负载均衡
持续查询对于当执行一个查询后又想持续的得到以前的查询结果的数据更新通知时,是很是有用的。框架
Ignite支持2种模式缓存内存内的数据,堆内和堆外,堆外内存容许当堆太大时将数据存储在主Java堆空间以外,来避免JVM垃圾回收时致使的暂停,可是数据仍然在内存中。 只要配置了堆外内存,Ignite同时也会在堆外存储索引,这意味着索引不会占用任何堆内内存空间。
当数据访问率降低时,ignite会有选择的将数据从堆内内存迁移至堆外内存,甚至从堆外内存迁移至交换(磁盘)存储。 当这部分数据又被访问时,他会当即被迁移到顶层,同时将其余的访问率低的数据迁移到更低的下一个内存层。
Ignite同时提供JDBC驱动,容许用户使用标准SQL查询和JDBC API得到缓存内的分布式数据。 Ignite容许用户使用任何标准SQL工具链接至Ignite而后在Ignite缓存的内存数据中开始执行SQL查询。
Ignite数据网格可以缓存任何支持Java Servlet3.0规范的的应用服务器的Web Session,包括Apache Tomcat,Eclipse Jetty,Oracle WebLogic以及其余。 当运行应用服务器集群时缓存Web Session对于提升Servlet容器的性能以及可扩展性是很是有用的。
Ignite能够做为Hibernate的二级缓存,他能够显著的提升应用中持久化层的速度。
Ignite支持基于Spring注解方式的Java方法缓存,这样的话,一个方法的执行结果就能够缓存在Ignite缓存中。之后若是同一个方法经过一样的参数集进行调用,结果会直接从缓存中获取而不是实际执行这个方法。
分布式计算是经过并行处理的方式来得到更高的性能,更低的延迟以及线性可扩展性,Ignite计算网格提供了一组简单的API来容许用户在集群内的多台计算机中执行分布式计算和数据处理。 分布式计算是基于在集群内的节点中进行任何的计算而后将结果返回的能力。 特性一览
Ignite计算网格容许对集群内的任何闭包进行广播和负载平衡,包括Java8 lambda,还包括纯Java Runnables和Callables。
ComputeTask是Ignite对内存内ForkJoin的抽象和范式,也是MapReduce的一个轻量级形式,纯MapReduce并非为了性能而构建,只是适用于进行离线数据的批量处理(好比Hadoop MapReduce)。 然而,对驻留在内存的数据进行计算时,实时性,低延迟和高吞吐量一般具备很高的优先级,同时,简化API也很是重要。基于这些考虑,Ignite提供了ComputeTask API,这个就是Ignite的ForkJoin实现(轻量级MapReduce)。
Ignite提供了一个标准JDK中ExecutorService的集群实现,他会自动地在集群内以负载平衡的模式执行全部的计算。计算也会容错而且只要有一个节点就能保证执行,你能够把他视为集群化的分布式的线程池。
计算和数据的并置可使网络中数据序列化最小化,而且能够显著的提升应用的性能和可扩展性。无论什么时候,都要尽可能作好集群节点中缓存的待处理数据和计算的并置。 Ignite根据须要,能够提供多种方式自动或者手动地进行计算和数据的并置。
Ignite支持自动做业故障切换。若是一个节点崩溃或其余错误,做业会自动转移到其余可用节点从新执行。可插拔的FailoverSpi负责进行执行一个故障任务时新节点的选择。 至少一次保证:Ignite保证只要有一个节点存在,任务就不会丢失。
负载平衡组件负责平衡集群内各节点的分布式任务。Ignite中负载平衡是经过可插拔的LoadBalancingSpi实现的,它控制集群内全部节点的负载而且确保集群内的每一个节点的均衡负载。 对于同质化环境中的同质化任务,负载平衡是经过随机或者循环的策略实现的。然而,在不少其余的场景中,特别是在负荷不均衡时,他提供了不少的更复杂的自适应的负载平衡策略。
检查点是经过可插拔的CheckpointSpi实现的,他提供了一个保存做业中间状态的功能,检查点对于长期执行的任务须要保存一些中间状态以防止节点故障是很是有用的。当一个故障节点重启时,一个做业能够载入一个保存的检查点而后从故障处继续执行。
可插拔的CollisionSpi对于待执行的做业到达某个节点时如何进行调度提供了细粒度的控制。他提供了不少的策略,包括:FIFO,优先级甚至磨洋工。
Ignite流式计算容许以可扩展和容错的方式处理连续的、无止境的数据流。在一个中等规模的集群中,数据注入Ignite的比例会很高,很容易达到每秒百万级的规模。 工做方式:
特性一览
数据流处理器是由IgniteDataStreamer API定义的,他是为了将大量的持续数据流注入Ignite流缓存而构建的。数据流处理器以可扩展和容错的方式,为全部数据流注入ignite提供了至少一次保证。
当你须要执行本身的业务逻辑而不只仅是添加新数据时,就须要利用StreamRecerver API的优点了。 流接收器容许直接在缓存数据的节点上以并行的方式处理数据流,在数据进入缓存以前能够修改数据或者添加任何自定义预处理逻辑.
Ignite流功能容许在数据滑动窗口内进行查询。滑动窗口被配置为Ignite的缓存抽取策略,能够基于时间、基于大小或者基于批量处理,能够配置一个缓存一个数据窗口,若是你须要同一个数据具备不一样的滑动窗口的话,也能够很是容易的为同一个数据定义不止一个缓存。
可使用全部的Ignite数据索引功能,再加上Ignite SQL、TEXT,以及基于谓词的缓存查询,在数据流中进行查询。
持续查询对于当执行一个查询后又想持续的得到以前的查询结果的数据更新通知时,是很是有用的。
Ignite以分布式的形式支持基于java.util.concurrent框架的大部分数据结构。好比,能够在一个节点上使用java.util.concurrent.BlockingQeque加入一些东西,而后再另外一个节点上获取它。或者有一个分布式的ID生成器,他能够保证全部节点上的ID惟一性。 支持的数据结构包括:
特性一览
队列和集合能够以并置或者非并置的方式进行部署。在并置模式中,集合中的全部元素都会驻留在同一个集群节点上。这种模式下,应该使用相对较小的集合。在非并置模式下,集合的元素会均等地分布在集群内,这就容许在内存内保存很大的集合。
有界队列容许用户持有一个有预约义最大容量的队列,这将有助于控制整个缓存的容量。
ID生成器是经过AtomicSequence实现的,当你以原子序列执行incrementAndGet()(或任何其余的原子性操做)时,数据结构会保存将来值的一个范围,这会保证跨集群内该序列实例的惟一性。 直到全部保存的值都被使用,全部的序列增加操做都会发生在客户端本地。
Ignite提供了集群范围内的高性能的消息功能,支持基于发布-订阅以及直接点对点通讯模型的数据交换。消息能够以有序的,也能够以无序的方式进行交换。
特性一览
Ignite支持有序的以及无序的消息,有序消息要稍微慢一点,可是若是你用的话,Ignite保证收到消息的顺序和发送消息的顺序一致。
Ignite消息支持基于主题的订阅,主题消息能够发送给一组节点,也能够发送给某一个节点。
服务网格容许用户在集群中任意部署自定义的服务,好比自定义计数器,ID生成器,分级映射等。 服务网格的主要应用场景是提供了在集群中部署各类单例服务的能力。可是,若是你须要一个服务的多实例,Ignite也能保证全部服务实例的正确部署和容错。 特性一览
用户能够定义本身的服务而且Ignite会自动在集群内进行服务的分布化。好比,你能够建立本身特定的分布式计数器,或者自定义的数据加载服务,或者任何其余逻辑,而后将其部署到集群中。
Ignite容许将任意数量的服务部署到网各节点,然而,最常常被使用的特性是在集群中部署单例服务,不论是拓扑变动仍是节点故障,Ignite都会维护单一性。
Ignite会保证服务的持续有效,以及按照指定的配置进行部署,不论是拓扑变动仍是节点故障。
在全部的状况下,不仅是单例服务部署,Ignite都会自动地确保在集群内的每一个节点上部署大体数量相等的服务。当集群拓扑发生变化时,Ignite会对部署的服务进行从新评估,而后可能对已经部署的服务从新在其余节点上部署以保证更好的负载平衡。
Apache Ignite提供了一个Spark RDD抽象的实现,他容许跨越多个Spark做业时方便地在内存内共享状态,不论是在同一个应用内部仍是在不一样的Spark应用之间。 IgniteRDD做为Ignite分布式缓存的视图,既能够在Spark做业执行进程中部署,也能够在Spark workder中部署,也能够在他本身的集群中部署。 根据事先配置好的部署模型,状态共享既能够只存在于一个Spark应用的生命周期的内部(嵌入式模式),或者也能够存在于Spark应用的外部(独立模式),这种模式下状态能够在多个Spark应用之间共享。
特性一览
IgniteRDD是原生Spark RDD的一个实现,DataFrame API具备全部标准RDD的功能,而且RDD的状态能够在Spark做业、应用以及worker之间共享。
Spark不支持SQL索引,可是Ignite能够,因为先进的内存索引功能,IgniteRDD在执行SQL查询时比Spark原生RDD或者DataFrame有百倍的性能提高。
Ignite一个独有的技术就是分布式内存文件系统(IGFS),IGFS提供了和Hadoop HDFS相似的功能,可是仅仅在内存内部。事实上,除了他本身的API,IGFS实现了Hadoop的文件系统API,而且能够透明地加入Hadoop或者Spark应用。 IGFS将每一个文件中的数据拆分为独立的数据块而后将他们存储在分布式内存缓存中。然而和Hadoop HDFS不一样,IGFS不须要一个name节点,而且用一个哈希函数自动地肯定文件数据位置。 IGFS能够独立部署,也能够部署在HDFS之上,不论是哪一种状况,他对于HDFS中存储的文件都是一个透明的缓存层。
特性一览
IGFS既能够在堆内,也能够在堆外存储文件,对于更大的存储空间关键是利用堆外来避免长时间的JVM垃圾回收致使的暂停。
IGFS实现了Hadoop的FileSystem API,而且能够部署为原生的Hadoop文件系统,就像HDFS同样,这样就能够在Hadoop或者Spark环境中以即插即用的方式原生部署IGFS。
IGFS也能够在另外一个Hadoop文件系统上部署为一个缓存层。这种状况下,IGFS中的一个文件若是发生变化,更新会被自动地写入HDFS。此外,若是读取了一个文件而且当时他不在IGFS中,Ignite会自动地将其从HDFS载入IGFS。
IGFS集成了一个原生的Apache Hadoop,也支持Cloudera CDH以及Hortonworks HDP。
Apache Ignite带来了一个Hadoop MapReduce API的内存实现,他比原生的Hadoop MapReduce实现有了显著的性能提高。Ignite MapReduce比Hadoop性能更好,是由于基于推的资源分配以及数据的进程内协同计算。 另外,由于IGFS不须要一个name节点,当使用IGFS时,Ignite MapReduce做业会在一个链路内直达IGFS数据节点。
特性一览
Ignite MapReduce是Hadoop MapReduce API的一个实现,他能够原生地加入已有的Hadoop环境,而且性能有很大的提高。
Ignite提供了一个Hadoop的加速发行版,包括IGFS以及Ignite MapReduce,这个环境能够很容易地加入已有的Hadoop环境。
对于客户端链接Ignite集群,Ignite提供了若干种协议,包括Ignite原生客户端,REST/HTTP,SSL/TLS,Memcached,Node.js(正在开发中)等等。 特性一览
对于客户端远程链接Ignite,原生客户端提供了完整的功能,他容许使用完整的Ignite API,包括近缓存,事务,计算,流式处理,服务等等。
Ignite兼容于Memcached,他容许用户使用任何Memcached兼容客户端在Ignite缓存中保存以及获取分布式数据,包括Java、PHP、Python、Ruby以及其余的客户端。
Ignite提供了一个HTTP REST客户端,能够以REST的方式经过HTTP或者HTTPS协议进行通讯。REST API能够进行执行不少的操做,好比从缓存中读取,实行任务,获取各类度量等等。
Ignite容许在全部的Ignite客户端和服务端节点之间使用SSL进行Socket通讯。
Ignite将来会提供Node.js客户端,他能进行全部的缓存操做以及在Ignite中存储的JSON数据中执行SQL查询。
Apache Ignite能够独立运行,在集群中运行,在Docker容器中运行,还能够运行在Apache Mesos以及Hadoop Yarn环境。他能够在物理机上运行,也能够在虚拟机上运行。
特性一览
Ignite节点之间会自动感知,这有助于集群的可扩展性,而不须要重启集群,简单地启动新加入的节点而后他们就是自动地加入集群。
Docker能够将Ignite及其全部的依赖打包进一个标准的映像。Docker下载Ignite版本映像以后,就能够将用户的应用部署进Ignite,配置节点,他会自动启动整个配置后的Ignite节点。
对于公共云环境,Ignite原生地集成了Amazon AWS和GCE,对于其余的云环境,Ignite集成了Apache JCloud,他支持大多数已有的云服务商。
Ignite提供了Apache Mesos的原生支持,能够很容易地将Ignite部署进Mesos数据中心,好比Hadoop和Spark环境。
Ignite提供了Hadoop Yarn的原生支持,能够很容易地将Ignite部署进Hadoop和Spark环境。