2 ignite关键特性
数据注入和流计算:
-
Ignite流式计算允许以可扩展和容错的方式处理连续不中断的数据流。在一个中等规模的集群中,数据注入Ignite的比例会很高,很容易达到每秒百万级的规模。
- Ignite可以与主要的流处理技术和框架进行集成,比如Kafka、Camel、Storm或者JMS,他们可以为基于Ignite的架构带来非常强大的功能。
工作方式:
- 客户端将流式数据注入Ignite;
- 数据在Ignite数据节点中自动分区;
- 数据在
滑动窗口
中并发处理;(滑动窗口协议允许发送方在停止并等待确认前发送多个数据分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输,提高网络吞吐量。) - 客户端在流式数据中执行并发
SQL查询
; - 客户端订阅数据变化的
持续查询
。
RDBMS集成:
Ignite支持与各种持久化存储进行集成,它可以接入数据库、导入模式、配置索引类型、以及自动化地生成所有必要的XML OR映射配置和Java领域模型POJO,他们可以很容易地导入自己的开发工程。
Ignite可以与任何支持JDBC驱动的关系型数据库(RDBMS)进行集成,包括Oracle, PostgreSQL, Microsoft SQL Server, 和MySQL。
分布式数据结构:
Ignite以分布式的形式支持基于java.util.concurrent
框架的大部分数据结构。比如,可以在一个节点上使用java.util.concurrent.BlockingQeque
加入一些东西,然后再另一个节点上获取它。或者有一个分布式的ID生成器,他可以保证所有节点上的ID唯一性。
支持的数据结构包括:
- Concurrent Map (Cache)
- 分布式队列和集合
- AtomicLong
- AtomicReference
- AtomicSequence (ID生成器)
- CountDownLatch
- ExecutorService
消息和事件:
Ignite提供了集群范围的高性能的消息功能,支持基于发布-订阅以及直接点对点通信模型的数据交换。消息可以以有序的,也可以以无序的方式进行交换。有序消息会稍微有点慢,但是如果使用的话,Ignite会保证收到消息的顺序和发送消息的顺序一致。
当在分布式网格环境中发生各种事件时,Ignite的分布式事件功能可以使应用收到通知。可以自动地收到集群内的本地和远程节点上发生的任务执行、读写和查询操作的通知,事件通知也可以分组在一起然后分批或者定期地发送。
架构:
Ignite集群基于无共享架构,所有的集群节点都是平等的,独立的,整个集群不存在单点故障。 通过灵活的Discovery SPI组件,Ignite节点可以自动地发现对方,因此只要需要,可以轻易地对集群进行缩放。
Ignite可以独立运行,可以组成集群,可以运行于Kubernetes和Docker容器中,也可以运行在Apache Mesos以及Hadoop Yarn上,可以运行于虚拟机和云环境,也可以运行于物理机,从技术上来说,集群部署在哪里,是没有限制的。
- 服务端、客户端和协议
Ignite中定义有两种类型的节点,客户端和服务端节点,分别有不同的用途。
服务端节点作为数据和计算的容器,一旦接入,Ignite就会作为分布式数据库(或者叫数据网格)存储数据,然后参与查询的处理、计算的执行、数据流处理等等。
而对于客户端节点,提供了远程接入分布式数据库(一组服务端节点)的功能,Ignite的原生客户端可以使用完整的Ignite API,包括SQL、事务、计算、数据流、服务等等。
除了客户端节点,还可以通过Ignite的二进制客户端协议、JDBC/ODBC驱动、REST API接入集群。
存储:
根据配置,Ignite在内存存储中,可以是分区模式,也可以是复制模式,复制模式中,数据在集群中的每个节点都有一份副本,而分区模式,Ignite会在多个集群节点上对数据进行平均拆分,因此可以在内存及磁盘上存储TB级的数据。
冗余
Ignite可以配置多个副本,来保证故障时的数据弹性。
一致性
不管使用哪种复制方案,Ignite都会保证整个集群的数据一致性。
Ignite作为内存存储
持久化对Ignite来说是可选的,这时整个集群就会工作于纯内存模式,所有的数据和索引都会只存储于内存中,这样会得到最高的性能,因为数据不需要写入磁盘。为了避免可能的节点故障导致数据丢失,建议适当地配置一些备份(或者叫复制因子)。
Ignite持久化
可以有两种方式开启持久化,第一个方式是,使用它自己的分布式、ACID以及兼容SQL的持久化,这可以透明地与所有的内存架构透明且高效地集成。
如果开启了原生持久化,Ignite会在磁盘上存储数据的超集,然后在内存中存储尽可能多的数据。比如,一共有100条数据,内存有能力存储20条,那么磁盘会存储所有的100条,而为了高性能,内存可以只缓存20条。
Ignite与第三方数据库
第二个开启持久化的方式,是将Ignite部署在已有的第三方数据库之上,比如RDBMS、Apache Cassandra或者MongoDB。这种方式通过将部分数据的副本放在内存中,用于对底层数据库进行加速。Ignite支持通读和通写模式,确保数据一致性以及两者之间的同步。
交换空间
如果不希望使用原生持久化或者第三方持久化,还可以开启交换,这时,如果内存过载,内存中的数据会被移动到磁盘上的交换空间中,如果开启了交换空间,Ignite将数据存储于内存映射文件(MMF)中,根据当前的内存使用量,操作系统会将MMF的内容交换到磁盘。交换空间通常用于避免由于内存过载导致的内存溢出错误(OOME),以及需要更多时间来对集群进行缩放,从而对数据集进行更平均的分布的场景。
数据可视化:
Ignite可以与很多数据可视化工具集成,通过图表或者丰富的图形,协助对存储在分布式缓存中的数据进行分析和解释,甚至提供可操作的建议。
Ignite的Web控制台是一个基于Web的交互式管理工具, 功能包括:
- 创建、下载Ignite的各种配置;
- 从RDBMS中自动加载SQL元数据;
- 接入Ignite集群然后执行SQL;
- 管理和监控Ignite节点和缓存;
- 查看堆、CPU以及其它有用的节点和缓存的指标;