一、集群和部署html
-
Ignite集群基于无共享架构,全部的集群节点都是平等的,独立的,整个集群不存在单点故障。数据库
-
经过灵活的Discovery SPI组件,Ignite节点能够自动地发现对方,所以只要须要,能够轻易地对集群进行缩放。(与哪套集群相似呢? ES)缓存
-
Ignite能够独立运行,能够组成集群,能够运行于Kubernetes和Docker容器中,也能够运行在Apache Mesos以及Hadoop Yarn上,能够运行于虚拟机和云环境,也能够运行于物理机,从技术上来讲,集群部署在哪里,是没有限制的。服务器
- Apache Ignite具备一个可选的服务概念,并提供了两种类型的节点:客户端和服务器节点:
- Server 包含数据、缓存、计算和流,而且能够是内存中的Map-Reduce任务的一部分。
- Client 提供远程链接服务器以将元素放入/获取到缓存的能力。它还能够存储部分数据(近缓存),这是一个较小的本地缓存,存储最近和最频繁访问的数据。
- 除了客户端节点,还能够经过Ignite的二进制客户端协议、JDBC/ODBC驱动、REST API接入集群。
容器:网络
-
Ignite彻底支持容器环境,Ignite与Docker的集成能够在服务启动以前,自动地将业务代码构建而且部署进Ignite。架构
-
Ignite也能够部署在Kubernetes中,能够自动地部署和管理容器化的应用。分布式
资源管理器:函数
- Ignite提供了对Hadoop Yarn,Kubernetes和Apache Mesos的原生支持,能够很容易地部署到这些环境。
二、基于内存的存储工具
Ignite基于分布式的内存架构,它将内存计算的性能和扩展性,与磁盘持久化和强一致性整合到一个系统中。oop
- 基于内存的方式和传统的基于磁盘的方式的主要不一样是,Ignite将内存视为全功能的存储,而不是像传统大多数数据库那样仅仅是一个缓存层。好比,Ignite能够运行于纯内存模式,这时它就是一个内存数据库(IMDB)和内存数据网格(IMDG)。
- 另外一方面,若是打开了持久化,Ignite就变成了一个处理是在内存中进行的基于内存的系统,可是数据和索引又持久化到磁盘上。这里与传统的基于磁盘的RDBMS或NoSQL系统的主要区别是,Ignite支持强一致、水平扩展、而且同时支持SQL和键-值处理API。
并置和C/S处理
- 基于磁盘的系统,好比RDBMS或者NoSQL,一般采用传统的C/S模式,数据须要从服务端传输到要处理的客户端,一般最终又被废弃,这种方法不可扩展,由于在分布式系统中,经过网络移动大量数据是很是昂贵的开销。
- 一个更有扩展性的方式是,经过将计算放在数据实际存储的服务端上,反过来实现并置处理,这个方法能够直接在数据实际存放的地方直接执行业务逻辑或者分布式SQL关联,避免了昂贵的序列化和网络开销。
分区和复制
- 根据配置,Ignite在内存存储中,能够是分区模式,也能够是复制模式,
- 复制模式中,数据在集群中的每一个节点都有一份副本,
- 而分区模式,Ignite会在多个集群节点上对数据进行平均拆分,所以能够在内存及磁盘上存储TB级的数据。
冗余
- Ignite能够配置多个副本,来保证故障时的数据弹性。
一致性
- 无论使用哪一种复制方案,Ignite都会保证整个集群的数据一致性。
Ignite做为内存存储
- 持久化对Ignite来讲是可选的,这时整个集群就会工做于纯内存模式,全部的数据和索引都会只存储于内存中,这样会获得最高的性能,由于数据不须要写入磁盘。为了不可能的节点故障致使数据丢失,建议适当地配置一些备份(或者叫复制因子)。
Ignite持久化
- 能够有两种方式开启持久化,第一个方式是,使用它本身的分布式、ACID以及兼容SQL的持久化,这能够透明地与全部的内存架构透明且高效地集成。
- 若是开启了原生持久化,Ignite会在磁盘上存储数据的超集,而后在内存中存储尽量多的数据。好比,一共有100条数据,内存有能力存储20条,那么磁盘会存储全部的100条,而为了高性能,内存能够只缓存20条。
Ignite与第三方数据库
- 第二个开启持久化的方式,是将Ignite部署在已有的第三方数据库之上,好比RDBMS、Apache Cassandra或者MongoDB。这种方式经过将部分数据的副本放在内存中,用于对底层数据库进行加速。Ignite支持通读和通写模式,确保数据一致性以及二者之间的同步。
三、固化内存
Ignite基于固化内存架构,若是开启了原生持久化,能够同时处理存储于内存和磁盘上的数据和索引。
- 固化内存架构,它将内存计算的性能和扩展性,与磁盘持久化和强一致性整合到一个系统中。
- Ignite固化内存的操做方式,相似于好比Linux这样的操做系统的虚拟内存。可是二者的显著区别是,若是开启了持久化存储,除了将整个或者部分数据保存在内存中,还会将整个数据集加上索引放在磁盘上,而虚拟内存只是在内存用尽时才使用磁盘,磁盘只是用于交换用途。
Ignite原生持久化
Ignite原生持久化是数据持久化的一个很是灵活、可扩展以及方便的方式,它普遍应用于应用须要一个分布式内存数据库的场景中。
Ignite的原生持久化是一个分布式的、ACID、兼容SQL的磁盘存储,它能够与Ignite的固化内存无缝地集成,Ignite原生持久化是可选的,能够打开和关闭,若是关闭,Ignite就是一个纯内存存储。
Ignite做为一个平台,若是固化内存和原生持久化同时使用的优点和特色:
固化内存
- 堆外内存
- 避免明显的GC暂停
- 自动碎片整理
- 可预测的内存消耗
- 高SQL性能
磁盘
- 可选的持久化
- 支持闪存、SSD以及Intel的3D Xpoint
- 存储数据的超集
- 全事务化(预写日志WAL)
- 集群瞬时启动
第三方持久化
- Ignite能够用于已有第三方数据库的缓存层,包括RDBMS、NoSQL或者HDFS。
- 该方式用于对保存数据的底层数据库进行加速,Ignite将数据保存在内存中,在多个节点中进行分布,提供了更快的数据访问,它减小了应用和数据库之间由于数据移动致使的网络负载。
- 可是与原生持久化相比,是有不少限制的,好比,SQL查询只能在内存中保存的数据上执行,所以,首先须要将数据预先从磁盘加载到内存中。
交换空间
- 若是不但愿使用原生持久化或者第三方持久化,还能够开启交换,这时,若是内存过载,内存中的数据会被移动到磁盘上的交换空间中,
- 若是开启了交换空间,Ignite将数据存储于内存映射文件(MMF)中,根据当前的内存使用过量,操做系统会将MMF的内容交换到磁盘。交换空间一般用于避免因为内存过载致使的内存溢出错误(OOME),以及须要更多时间来对集群进行缩放,从而对数据集进行更平均的分布的场景。
四、数据可视化
Ignite能够与不少数据可视化工具集成,经过图表或者丰富的图形,协助对存储在分布式缓存中的数据进行分析和解释,甚至提供可操做的建议。
IgniteWeb控制台:Ignite的Web控制台是一个基于Web的交互式管理工具, 功能包括:
- 建立、下载Ignite的各类配置;
-
从RDBMS中自动加载SQL元数据;
-
接入Ignite集群而后执行SQL;
-
管理和监控Ignite节点和缓存;
-
查看堆、CPU以及其它有用的节点和缓存的指标;
Tableau:Tableau是一个聚焦于商业智能的交互式数据可视化工具,经过Ignite的ODBC驱动,Tableau就能够接入Ignite集群,功能包括:
-
查询集群中存储的分布式数据;
-
缓存数据的表格或者图形展现;
-
使用Tableau支持的各类方式对数据进行分析;
Zeppelin:Apache Zeppelin是一个基于Web的记事本,能够交互式地对数据进行分析,经过Ignite的JDBC驱动,Zeppelin就能够接入集群,功能包括:
- 经过Ignite的SQL解释器获取分布式数据;
- 缓存数据的表格或者图形展现;
- 经过Scala执行分布式的计算。
五、Hadoop & Spark
5.1 Spark共享内存层
Apache Ignite提供了一个Spark RDD抽象的实现,他容许跨越多个Spark做业时方便地在内存内共享状态,在不一样的Spark做业、worker或者应用之间,IgniteRDD为内存中的相同数据提供了一个共享、可变的视图,原生的SparkRDD没法在多个Spark做业或者应用之间进行共享。
-
IgniteRDD做为Ignite分布式缓存的视图,既能够在Spark做业执行进程中部署,也能够在Spark worker中部署,也能够在它本身的集群中部署。
-
根据预配置的部署模型,状态共享既能够只存在于一个Spark应用的生命周期的内部(嵌入式模式),或者也能够存在于Spark应用的外部(独立模式)。
-
虽然SparkSQL支持丰富的SQL语法,可是它没有实现索引。这样即便在一个不太大的数据集上执行查询,也可能花费比较长的时间,由于须要对数据进行所有扫描。若是使用Ignite,开发者能够配置一级和二级索引,带来上千倍的性能提高。
Ignite DataFrames:
Spark的DataFrame API引入了模式的概念来描述数据,这样Spark就能够以表格的形式管理模式和组织数据。简而言之,DataFrame就是组织成命名列的分布式数据集合。它从概念上来讲,等价于关系数据库的表,会促使Spark执行查询优化器,产生比RDD更高效的执行计划,而RDD仅仅是集群中的一个分区化的元素集合。Ignite扩展了DataFrame,若是将Ignite做为Spark的内存层,会简化开发以及提升性能,好处包括:
- 经过向Ignite读写DataFrames,能够在Spark做业之间共享数据和状态;
-
经过高级的索引以及避免数据在网络中的移动,优化Spark的查询执行计划,使Spark查询速度更快;
5.2 内存文件系统
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
Apache Ignite带来了一个Hadoop MapReduce API的内存实现,他比原生的Hadoop MapReduce实现有了显著的性能提高。Ignite MapReduce比Hadoop性能更好,是由于基于推的资源分配以及进程内的计算和数据的并置。
- 由于IGFS不须要一个name节点,当使用IGFS时,Ignite MapReduce做业会在一个链路内直达IGFS数据节点。
六、Ignite的应用场景
-
在线场景:包括在线的RDBMS数据缓存和在线分布式计算
-
离线场景:可用于一些在线的实时/准实时数据分析业务,另外可用于数据库存储过程替代
-
大数据平台:Ignite可用于搭建独立的大数据平台,用于大规模数据的注入、清洗、存储、查询、统计分析、出报表等全流程业务处理
-
传统大规模业务系统的分布式架构迁移:Ignite能够传统应用紧密整合,在不颠覆已有架构的前提下,帮助用户进行 传统应用的分布式架构转型。为运行多年的复杂、运行缓慢、技术架构落后的业务系统,提供加速能力的同时,引入众多的先进功能,大幅提高原有系统的能力