Apache Ignite 简介
概念:Apache Ignite内存数组组织框架是一个高性能、集成和分布式的内存计算和事务平台,用于大规模的数据集处理,比传统的基于磁盘或闪存的技术具有更高的性能,同时他还为应用和不同的数据源之间提供高性能、分布式内存中数据组织管理的功能。
如何理解:ignite是分布式内存网格的一种实现,其基于java平台,具有可持久化,分布式事务,分布式计算等特点,此外还支持丰富的键值存储以及SQL语法(基于h2引擎),可以看成是一个分布式内存数据库。与ignite类似的产品有gemfire(12306目前正在使用),其开源版为geode。与gemfire相比,ignite对sql的支持比较完善,提供了数据并置来提升性能,还有对分布式事物的支持以及对spring的集成都比较友好,很方便进行嵌入式集成进应用服务。
特性:
- 开源
- 纯Java编写
- 基于Spring框架
- 支持.Net、C++和PHP语言
Apache Ignite 历史及由来
由来:在Ignite以前,大规模、大数据量、高并发企业级或者互联网应用为了解决数据缓存、降低数据库负载、提高查询性能等突出问题,很多采用了 Hazelcast或者Oracle Coherence或者GemFire(比如12306网站)或者目前应用越来越广泛的Redis等缓存技术
历史:
- Ignite来源于尼基塔·伊万诺夫于2007年创建的GridGain系统公司开发的GridGain软件,尼基塔领导公司开发了领先的分布式内存片内数据处理技术-领先的Java内存片内计算平台,今天在全世界每10秒它就会启动运行一次。他有超过20年的软件应用开发经验,创建了HPC和中间件平台,并在一些创业公司和知名企业都做出过贡献,包括Adaptec, Visa和BEA Systems。尼基塔也是使用Java技术作为服务器端开发应用的先驱者,1996年他在为欧洲大型系统做集成工作时他就进行了相关实践。
- 2014 年3月,GridGain公司将该软件90%以上的功能和代码开源,仅在商业版中保留了高端企业级功能,如安全性,数据中心复制,先进的管理和监控等。 2015年1月,GridGain通过Apache 2.0许可进入Apache的孵化器进行孵化,很快就于8月25日毕业并且成为Apache的顶级项目,9月28日即发布了1.4.0版,应该说发展、迭代速度非常之快。该技术相关资料较少,但确是一个很有潜力的技术,解决了大规模、大数据量、高并发企业级或者互联网应用面临的若干痛点。
Apache Ignite 版本更新说明
Apache Ignite 2.8.0版本发布2个月后,研发团队发布了2.8.1版本,解决了大版本发布后社区反馈的以及遗留的一系列问题。
Apache Ignite 2.8.1
安全:
- 解决了使用H2管理权限进行SQL连接时的安全漏洞;
Ignite Core:
- 新增了获取集群完整再平衡状态的指标;
- 新增了COMPUTE_JOB系统视图;
- 在DistributedMetaStorage中新增了对long型主键的支持;
- 新增了事务操作相关的指标;
- 解决了瘦客户端的ClassCastException异常;
- 解决了LogExporterSpi激活时的IllegalArgumentException异常;
- 解决了2.8.0版本中JDBC瘦客户端执行SELECT查询时可能的崩溃问题;
- 解决了Java瘦客户端中系统类型生成typeId错误的问题;
- 解决了Ignite节点中MERGE INTO失败的问题;
- 解决了MetricRegistryMBean 和 OpenCensusExporterSpi 内存泄露的问题;
- 解决了直方图名字中包含下划线时MetricRegistryMBean中显示直方图值错误的问题;
- 解决了MetricRegistryMBean线程安全的问题;
- 解决了初始化Cassandra Store时的空指针问题;
- 解决了缓存创建时ExchangeLatchManager可能的空指针异常问题;
- 解决了H2Connection执行INSERT时可能的内存泄漏问题;
- 解决了KILL QUERY命令在用户持有或者泄露时查询游标时失败的问题;
- 解决了MapResult关闭时的潜在竞争问题;
- 解决了查询汇总阶段重试时可能的空指针问题;
- 解决了必须关闭或完全读取本地查询游标才能解锁GridH2TableGridH2Table的问题;
- 解决了TcpCommunicationSpi指标实现上的一些问题;
- 解决了瘦客户端线程未终止的问题;
- 解决了所有二进制类型注册两次的问题;
- 解决了WAL段较小时可能的集群故障问题;
- 解决了再平衡过程中停止缓存可能的空指针和故障问题;
- 解决了BinaryObject字段无法配置序列化枚举的问题;
- 解决了通过唯一性ID查找节点时可能的集群故障问题;
- 解决了集群重启可能导致集群激活失败问题;
- 解决了故障处理过程中持续生成线程堆栈可能会拖慢整个集群的问题;
- 解决了销毁缓存组中的大型缓存可能导致的内存溢出问题;
- 解决了缓存清空后动态索引重建导致AssertionError 或者 JVM 崩溃的问题;
- 解决了在ConcurrentHashMap.size()上的争用问题;
- 解决了原子类型缓存和事务-原子混合的缓存组之间的一致性问题;
- 解决了删除非索引列后h2Tree进入非法状态的问题;
- 解决了基线节点离开集群然后重新加入后,从清空的分区开始的历史 (WAL) 再平衡问题;
- 解决了IgniteQueue.removeAll方法抛出空指针的问题;
- 解决了ignitevisorcmd可能无法接入集群的问题;
- 解决了缓存操作中断后可能导致的缓存数据和索引不一致的问题;
- 解决了在迭代期间WAL记录类型重写不正确的问题;
- 解决了节点关闭后间歇性出现[Failed to notify direct custom event listener] 异常的问题;
- 解决了Spring Data中的缓存动态配置问题;
- 解决了IgniteSecurityProcessor#withContext(java.util.UUID)方法的日志处理异常问题;
- 解决了冻结处理过程的长时间交换问题;
- 解决了不稳定的拓扑上可能的内存泄露问题;
- 解决了指标导出器实现上在通信时可能的空指针问题;
- 解决了缓存并发过期时get操作可能导致节点故障的问题;
- 解决了事务性缓存上写入不正确的键类型后可能导致节点故障的问题;
- 解决了在开启安全认证后处理IO消息时节点故障导致的空指针问题;
- 解决了检索的行中索引类型和值类型不匹配导致的节点故障问题;
- 解决了退出策略中不可比较的主键导致的失败处理和节点故障问题;
- 解决了持久化中可能的页面泄露问题;
- 解决了节流和检查点线程并发执行时可能导致的额外页面释放问题;
- 解决了节点加入时的计数器不同导致其他节点持有的分区进入MOVING状态的问题;
- 解决了如果语句的关键字小写导致的Spring Data查询注解不可用的问题;
- 解决了远程瘦客户端无法正确认证的问题;
- 解决了扫描查询有时可能导致节点故障的问题;
- 解决了扫描查询/迭代器在复制缓存结果不正确的问题;
- 解决了在WAL中检索检查点记录无法处理压缩的段的问题;
- 解决了cache#putAllAsync方法无法收集指标的问题;
- 解决了瘦模式JDBC流处理中使用函数时可能抛出BatchUpdateException异常的问题;
- 解决了在出现了打开过多文件的NIO异常后的事务异常问题;
- 解决了交换期间再平衡完成时更新分区状态卡住的问题;
- 解决了由于缺失依赖导致的ZooKeeper发现无法工作的问题;
Ignite .Net:
- 解决了使用DateTime or Guid类型参数时服务调用方法失败的问题;
- 解决了以不同顺序序列化同一类型字段时出现的NullReferenceException异常。