Infinispan's GridFileSystem--基于内存的网格文件系统

简介

Infinispan是JBoss Cache缓存框架的后续项目,它是一个开源的数据网格平台,用于访问分布式状态 的群集节点。GridFileSystem(网格文件系统)是一个全新的实验性的API,这些API使Infinispan后端的网 格数据像“文件系统”一样展示出来。这一系列API继承了JDK的File,InputStream和OutputStream类, 创建了相应的:GridFile,GridInputStream和GridOutputStream类。还有一个帮助类GridFilesystem, 也被包含在这个框架里面。这些API在Infinispan 4.1.0版本中就可以使用了(从4.1.0.ALPHA2 版起)。

GridFilesystem包含两个Infinispan缓存器:一个用于元数据缓存(通常是完全复制),另外一个是用 于实际数据的缓存(通常是分布式)。前一个复制缓存器使每个节点在本地都有元数据信息,像列出文件列 表之类的任务就不必使用RPC远程过程调用了。后一个是分布式缓存器,当存储空间的容量用光的时候, 就需要一种可扩展的机制来存储这些数据。所有的文件都被分块,每个块都存储为一个缓存项。

在这篇文章里面我们关注的特性是Infinispan的分布式模式。该模式增加了“分布式”特性,这是一 种基于哈希一致性的技术。JBossCache框架只支持“复制”模式(就是在群集里面的每一个节点都向其它 节点复制所有的数据)。

完全复制技术可以很好的用于小型群集,或者是在每个节点的存储数据量都相对较小的情况。在群集 中,当每个节点都向其它节点复制数据的时候,每个节点的平均数据存储容量都与这个群集的大小以及数 据的容量有关。这种复制的优点在于它通常只在本地节点读取数据,因为每个节点都拥有这些数据;另外 ,当群集中有新节点加入或者需要移除现存节点的时候,它也不需要重新进行负载均衡。

另一方面,当你需要快速访问大型数据集合,并且又无法忍受从磁盘(譬如:数据库)中检索数据时 , 内存网格文件系统将是一种更好的解决方案。

在之前的文章中,我们讨论了ReplCache,它使用了基于哈希一致性的分布式技术实现了一个网格数据 容器。从某种程度上说,ReplCache就是Infinispan分布模式的原型。

在Infinispan中,不管有没有冗余备份,数据都可以存储在网格中。举个例子,只有将Infinispan的 配置项设置为distributed cache mode(分布缓存模式),numOwners(所有者数量)设置为1,数据D才 会被存储到网格中。在这种情况下,基于哈希一致性算法,Infinispan只会选择一台服务器节点来存储数 据D。如果我们设置numOwners为2,那么Infinispan就会选择两台服务器来存储数据D,以此类推。

Infinispan的优势在于它提供了聚合的网格内存。例如,假设我们有5台主机,每台主机都有1GB的内 存,然后我们将参数numOwners 设置为1,那么我们就总共有5GB内存容量-这显然降低了开支费用。即便 使用冗余备份-比如,设置numOwners为2-我们的配置也有2.5GB的内存容量。

然而有一个问题:如果我们有很多1K大小的数据项,却只有少量的200MB大小的数据项,这将造成了数 据分布不均衡。一些服务器因为存储那些200MB的数据项,差不多把内存堆消耗殆尽,而另外的服务器的 内存有可能还没有使用。

还有一个问题是,如果当前数据项的大小超过了所给的单个服务器的可用内存堆:譬如,当我们试图 存储2GB的数据项时,操作就会失败,因为数据项大于服务器节点的1GB内存堆,调用Infinispan的方法 Cache.put(K,V),就会引起OutOfMemoryException(内存溢出)错误。

要解决这些问题,我们要将一个数据项分成chunks(区块)并将它们分散存储到群集的节点中。我们 将一个区块的大小设置为8K:如果我们把2GB 的数据项分为8K大小的区块,最终将在网格中得到250,000 个8K的区块。在网格中存储250,000个相等的区块,当然比存储少量的200MB的数据项要更加均衡。

时间: 2024-07-31 08:03:34

Infinispan's GridFileSystem--基于内存的网格文件系统的相关文章

Infinispan's GridFileSystem--基于内存的网格文件系统,互联网营销

Infinispan是JBoss Cache缓存框架的后续项目,它是一个开源的数据网格平台,用于访问分布式状态的群集节点.GridFileSystem(网格文件系统)是一个全新的实验性的API,这些API使Infinispan后端的网格数据像文件系统一样展示出来.这一系列API继承了JDK的File,InputStream和OutputStream类,创建了相应的:GridFile,GridInputStream和GridOutputStream类.还有一个帮助类GridFilesystem,也

RDD:基于内存的集群计算容错抽象

摘要 本文提出了分布式内存抽象的概念--弹性分布式数据集(RDD,Resilient Distributed Datasets),它具备像MapReduce等数据流模型的容错特性,并且允许开发人员在大型集群上执行基于内存的计算.现有的数据流系统对两种应用的处理并不高效:一是迭代式算法,这在图应用和机器学习领域很常见:二是交互式数据挖掘工具.这两种情况下,将数据保存在内存中能够极大地提高性能.为了有效地实现容错,RDD提供了一种高度受限的共享内存,即RDD是只读的,并且只能通过其他RDD上的批量操

甲骨文推出最新版分布式内存数据网格产品Oracle Coherence 3.7.1

甲骨文公司日前在旧金山举行的2011甲骨文全球大会上宣布,推出业界领先的最新版分布式内存数据网格产品Oracle Coherence 3.7.1. 在数据网格客户端语言方面,Oracle Coherence 3.7.1为客户提供了更大的灵活性,同时部署在Oracle Exalogic中间件http://www.aliyun.com/zixun/aggregation/13792.html">云服务器上时,Oracle Coherence 3.7.1还能降低网络通信延迟,并提高网络通信吞吐量

MSSQL-应用案例-SQL Server 2016基于内存优化表的列存储索引分析Web Access Log

问题引入 在日常的网站运维工作中,我们需要对网站客户端访问情况做统计.汇总.分析和报表展示,以数据来全面掌控网站运营和访问情况.当不可预知的意外情况发生时,我们可以快速发现问题以及采取相应的措施.比如:当网站受到黑客攻击时的流量陡增,又或者是网站某个资源发生意外抛异常等情况. 在提供Web服务的服务器上,比如IIS.Apache都存在访问日志记录,这篇是文章是以SQL Server 2016基于内存优化表的列存储索引来分析Apache Web Access Log为例,讲解分析网站访问情况,因此

mahout 是否有基于内存模式的贝叶斯算法实现

问题描述 mahout 是否有基于内存模式的贝叶斯算法实现 数据量比较小,是否可以直接连数据库查询获取原始数据, mahout是否有这种实现 还是只能和hadoop连用

内存数据网格hazelcast的一些机制原理

hazelcast作为一个内存数据网格工具,还算比较优秀,听说有Apache顶级项目使用它,值得研究下,使用文档可以直接看官方文档,但机制原理相关的资料基本没有,本人硬撸源码写的一些东西,跟大家分享一下. ==========广告时间========== 鄙人的新书<Tomcat内核设计剖析>已经在京东预售了,有需要的朋友可以到 https://item.jd.com/12185360.html 进行预定.感谢各位朋友. ========================= 欢迎关注: 

FFMPEG基于内存的转码实例——输入输出视频均在内存

我在6月份写了篇文章<FFMPEG基于内存的转码实例>,讲如何把视频转码后放到内存,然后通过网络发送出去.但该文章只完成了一半,即输入的数据依然是从磁盘文件中读取.在实际应用中,有很多数据是放到内存的,比如播放从服务器接收到的视频,就是在内存中的.时隔2个月,项目终于完成了,虽然在收尾阶段会花费大量时间,但也算空闲了点.于是就继续完善. 本文中,假定的使用场合是,有一个已经放到内存的视频,需要将它转码成另一种封装格式,还是放到内存中.由于是测试,首先将视频从文件中读取到内存,最后会将转换好的视

浅析Linux的共享内存与tmpfs文件系统

前言 共享内存主要用于进程间通信,Linux有两种共享内存(Shared Memory)机制: (1) ** System V shared memory(shmget/shmat/shmdt) ** Original shared memory mechanism, still widely used Sharing between unrelated processes. (2) ** POSIX shared memory(shm_open/shm_unlink) ** Sharing b

强者联盟——Python语言结合Spark框架

引言:Spark由AMPLab实验室开发,其本质是基于内存的快速迭代框架,"迭代"是机器学习最大的特点,因此非常适合做机器学习.得益于在数据科学中强大的表现,Python语言的粉丝遍布天下,如今又遇上强大的分布式内存计算框架Spark,两个领域的强者走到一起,自然能碰出更加强大的火花(Spark可以翻译为火花),因此本文主要讲述了PySpark. 本文选自<全栈数据之门>. 全栈框架 Spark由AMPLab实验室开发,其本质是基于内存的快速迭代框架,"迭代&qu