Apache Ignite

网络对Ignite集群性能的负面影响

我的未来我决定 提交于 2020-02-26 23:08:19
内存访问比磁盘I/O快得多,以至于许多人希望仅通过从部署的分布式内存集群中读取数据就可以获得惊人的性能提升。但是不要忽略应用是通过网络与集群节点互联的事实,并且如果大量数据通过网络连续传输,会迅速抵消内存访问性能高的优势。 换句话说,使用Ignite提供的合适数据访问模式,可以消除网络延迟的影响。本文中将通过Ignite的API,查看减轻网络的压力后应用性能的变化趋势。最终目标是能够部署可水平扩展的Ignite集群,其可以充分利用分布在所有主机上的RAM和CPU资源,并且尽可能小地受到网络的影响。 做一个简单的测试 为了简单起见,假设Ignite集群中存储了大量的记录,而应用需要计算整个数据集的最高温度和最长距离。下面将比较3个API,以显示最大限度地降低了网络利用率后的性能变化趋势,包括单独的键-值操作、批量键-值读取和并置计算。 这个测试笔记本电脑就可以做。因此下面的测试环境为2.7GHz的双核Intel Core i5 CPU和8GB 1867MHz的DDR3内存,该主机上部署了2个节点的Ignite集群,内存中数据量为20万条。这两个节点和应用之间通过本地网络端口进行通信,并争夺RAM和CPU资源。如果在真正的分布式环境中运行相同的测试,则比较的API之间的差异将更加值得注意。 通过大量的键-值调用来消耗网络资源 第一个测试从键-值API调用开始

堆内内存与堆外内存

こ雲淡風輕ζ 提交于 2019-12-29 17:26:14
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 堆外内存一直是Java业务开发人员难以企及的隐藏领域,究竟他是干什么的,以及如何更好的使用呢?那就请跟着我进入这个世界吧。 一、什么是堆外内存 1、堆内内存(on-heap memory)回顾 堆外内存和堆内内存是相对的二个概念,其中堆内内存是我们平常工作中接触比较多的,我们在jvm参数中只要使用-Xms,-Xmx等参数就可以设置堆的大小和最大值,理解jvm的堆还需要知道下面这个公式: 堆内内存 = 新生代+老年代+持久代 如下面的图所示: Paste_Image.png 在使用堆内内存(on-heap memory)的时候,完全遵守JVM虚拟机的内存管理机制,采用垃圾回收器(GC)统一进行内存管理,GC会在某些特定的时间点进行一次彻底回收,也就是Full GC,GC会对所有分配的堆内内存进行扫描,在这个过程中会对JAVA应用程序的性能造成一定影响,还可能会产生Stop The World。 常见的垃圾回收算法主要有: 引用计数器法(Reference Counting) 标记清除法(Mark-Sweep) 复制算法(Coping) 标记压缩法(Mark-Compact) 分代算法(Generational Collecting) 分区算法(Region) 注:在这里我们不对各个算法进行深入介绍

在LINQPad中使用Ignite.NET

倾然丶 夕夏残阳落幕 提交于 2019-12-07 14:05:09
LINQPad 是进行.NET开发的一款优秀工具,非常有利于Ignite.NET API的快速入门。 入门 下载LINQPad: linqpad.net/Download.aspx ,注意要选择64位操作系统的 AnyCPU 版本; 安装Ignite.NET的NuGet软件包: 按F4(或点击 Query -> References 和 Properties 菜单项); 点击 Add NuGet… ,可能会出现警告: As you don't have LINQPad Premium/Developer Edition, you can only search for NuGet packages that include LINQPad samples. ,这是正常的,因为Ignite软件包确实包含LINQPad示例; 通过单击 Add To Query 按钮来安装软件包; 点击 Add namespaces 按钮,并(至少)添加第一个: Apache.Ignite.Core ; 关闭NuGet窗口,在 Query Properties 窗口上单击 OK ; 确认 Language 下拉框设置为 C# Expression (默认设置); 输入 Ignition.Start() ,然后按下F5。 Ignite节点启动后,就可以在输出面板中看到通常的控制台输出。 在左侧的

Ignite集成Spark之IgniteRDD

两盒软妹~` 提交于 2019-12-02 21:34:42
本系列共两篇文章,会探讨如何将Ignite和Spark进行集成。 Ignite是一个分布式的内存数据库、缓存和处理平台,为事务型、分析型和流式负载而设计,在保证扩展性的前提下提供了内存级的性能。 Spark是一个流式数据和计算引擎,通常从HDFS或者其他存储中获取数据,一直以来,他都倾向于OLAP型业务,并且聚焦于MapReduce类型负载。 因此,这两种技术是可以互补的。 将Ignite与Spark整合 整合这两种技术会为Spark用户带来若干明显的好处: 通过避免大量的数据移动,获得真正可扩展的内存级性能; 提高RDD、DataFrame和SQL的性能; 在Spark作业之间更方便地共享状态和数据。 下图中显示了如何整合这两种技术,并且标注了显著的优势: 在本系列的第一篇文章中会聚焦于Ignite RDD,在第二篇文章中会聚焦于Ignite DataFrame。 Ignite RDD Ignite提供了一个SparkRDD的实现,叫做IgniteRDD,这个实现可以在内存中跨Spark作业共享任何数据和状态,IgniteRDD为Ignite中相同的内存数据提供了一个共享的、可变的视图,它可以跨多个不同的Spark作业、工作节点或者应用,相反,原生的SparkRDD无法在Spark作业或者应用之间进行共享。 IgniteRDD作为Ignite分布式缓存的视图

Ignite 与 Spark 都很强,那如果把它们整合起来会怎样?

血红的双手。 提交于 2019-12-02 21:34:29
在 前面的文章 中,我们分别介绍了 Ignite 和 Spark 这两种技术,从功能上对两者进行了全面深入的对比。经过分析,可以得出这样一个结论:两者都很强大,但是差别很大,定位不同,因此会有不同的适用领域。 但是,这两种技术也是可以互补的,那么它们互补适用于场景是什么呢?主要是这么几个方面:如果觉得 Spark 中的 SQL 等运行速度较慢,那么 Ignite 通过自己的方式提供了对 Spark 应用进行进一步加速的解决方案,这方面可选的解决方案并不多,推荐开发者考虑,另外就是数据和状态的共享,当然这方面的解决方案也有很多,并不是一定要用 Ignite 实现。 Ignite 原生提供了对 Spark 的支持,本文主要探讨 为何 与 如何 将 Ignite 和 Spark 进行集成。 1.将 Ignite 与 Spark 整合 整合这两种技术会为 Spark 应用带来若干明显的好处: 通过避免大量的数据移动,获得真正可扩展的内存级性能; 提高 RDD、DataFrame 和 SQL 的性能; 在 Spark 作业之间更方便地共享状态和数据。 下图显示了如何整合这两种技术,并且标注了显著的优势: 通过该图,可以从整体架构的角度看到 Ignite 在整个 Spark 应用中的位置和作用。 Ignite 对 Spark 的支持主要体现为两个方面,一个是 Ignite RDD,一个是

全面对比,深度解析 Ignite 与 Spark

这一生的挚爱 提交于 2019-12-01 13:30:43
经常有人拿 Ignite 和 Spark 进行比较,然后搞不清两者的区别和联系。Ignite 和 Spark,如果笼统归类,都可以归于内存计算平台,然而两者功能上虽然有交集,并且 Ignite 也会对 Spark 进行支持,但是不管是从定位上,还是从功能上来说,它们差别巨大,适用领域有显著的区别。本文从各个方面对此进行对比分析,供各位技术选型参考。 一、综述 Ignite 和 Spark 都为 Apache 的顶级开源项目,遵循 Apache 2.0 开源协议,经过多年的发展,二者都已经脱离了单一的技术组件或者框架的范畴,向着多元化的生态圈发展,并且发展速度都很快。 Ignite Ignite 技术来源于 GridGain 公司的商业产品,于 2014 年将绝大部分功能捐赠给 Apache 社区,并于 2015 年 8 月毕业成为 Apache 的顶级项目。Ignite 目前一直保持着高强度的快速迭代式开发,基本一个季度发布一个大版本,从提交数量、版本发布数量等若干指标来评估,一直保持在 Apache 社区 300 多个开源项目的前五位。目前已经聚拢了来自多家组织或公司的众多开发者,处于非常活跃的状态,开发者社区和产品生态正在形成中。 Spark 作为 Hadoop 生态圈重要成员的 Spark 于 2009 年由 Matei Zaharia 在加州大学伯克利分校 AMPLab

Ignite内存计算平台与Oracle TimesTen Scaleout对比

守給你的承諾、 提交于 2019-11-30 08:30:44
1.产品介绍 Ignite Ignite内存计算平台是一个高性能、集成化、混合式的企业级分布式架构解决方案,功能强大,有先进的集群管理功能,对于分布式内存数据库、流处理技术、分布式计算、分布式服务、分布式数据结构、持久化、Hadoop和Spark加速等功能,提供了广泛的支持,用于大规模的数据处理,比传统的基于磁盘或闪存的技术在性能上有指数级的提升。最新的版本在基于ZooKeeper的发现机制基础上,支持扩展至上千个节点。该软件由美国GridGain公司开发,于2014年将绝大部分功能捐赠给Apache基金会,命名为Ignite,目前为Apache基金会的顶级项目,GridGain公司还提供Ignite的企业版,具体可以根据需要进行选择。 Oracle TimesTen Scaleout TimesTen Scaleout是Oracle TimesTen 18.1版本的一个新的产品分支,是Oracle第一个商用关系型内存分布式数据库,支持分布式,横向扩展。这种新的体系结构使TimesTen内存数据库能够扩展至几十台主机,达到数百TB的容量,并且每秒支持数百万次事务,而无需手动数据库分片或应用程序分区,特别适合有着高并发、高吞吐量事务处理需求的业务场景。 2.产品对比 基本属性 序号 对比项目 Ignite TimesTen Scaleout 1 是否支持开源

在Ignite中自定义身份认证安全插件

╄→尐↘猪︶ㄣ 提交于 2019-11-30 00:14:54
Ignite集群搭建完成之后,应用就可以接入集群进行各种操作了,但是默认的集群,没有安全保护机制,任何应用、支持JDBC的客户端,只要知道集群节点的IP地址,都可以接入集群,这造成了一定的安全风险,这对于持有敏感数据的用户,显然是无法接受的。 Ignite本身有一个简单的安全模块,提供了一个基于用户名/密码的认证机制,但是在实际业务场景中,需求往往更复杂,本文以白名单认证方式为例,讲述如何通过自定义安全插件的方式,满足自己的业务需求。 插件 Ignite有一个设计良好的模块化架构和插件机制,可以配置不同的模块,也可以自定义自己的插件。本文会介绍如何替换掉默认的安全实现。 第一步是在 IgniteConfiguration 中注入一个插件,本示例采用基于XML的配置,配置如下: <bean id="ignite" class="org.apache.ignite.configuration.IgniteConfiguration" p:gridName="mygrid"> <property name="pluginConfigurations"> <bean class="ignite.WhiteListPluginConfiguration"/> </property> </bean> 这个配置类的实现没什么特别的,只是创建一个插件提供者: public class