Infinispan 是一个新的可扩展性极高且开源的data grids平台,主要特点:
·大量的堆体
·极高的可扩展性
·快速轻量级核心
·不仅仅支持Java(PHP,Python,">Ruby,C…)
·支持Compute Grids
·管理是关键:当你在grid上运行几百个服务时,实现管理是必须的
Infnispan 是个开源的数据网格平台。它公开了一个简单的数据结构(一个Cache)来存储对象。虽然可以在本地模式下运行Infnspan,但其真正的价值在于分布 式,在这种模式下,Infnispan可以将集群缓存起来并公开大容量的堆内存。这可比简单的复制强大的多,因为它会为每个结点分配固定数量的副本——服 务器故障的一种恢复手段——同时还提升了可伸缩性,这是由于存储每个结点所需的工作量是与集群大小息息相关的。
Infinispan is an extremely scalable, highly available data grid platform - 100% open source, and written in Java. The purpose of Infinispan is to expose a data structure that is highly concurrent, designed ground-up to make the most of modern multi-processor/multi-core architectures while at the same time providing distributed cache capabilities. At its core Infinispan exposes a JSR-107 (JCACHE) compatible Cache interface (which in turn extends java.util.Map). It is also optionally is backed by a peer-to-peer network architecture to distribute state efficiently around a data grid.
Apart from including fixes in 4.2.1.CR2, it allows users to prefetch data in advance in parallel thanks to the new getAsync() method. Why is this useful? Imagine the following scenario: A cache is configured with distribution and an app that requires values associated with k1, k2, and k3 in order to do its job. In the worst case scenario assume that all these keys located in remote nodes. Previously, before 5.0.0.ALPHA3, you'd have written something like this:
Value v1 = cache.get("k1"); Value v2 = cache.get("k1"); Value v3 = cache.get("k1");
The problem with this code is that each get() is sequential, so the second get() call must wait for first get() to retrieve data from the remote node before it can execute. This is clearly not very optimal. From 5.0.0.ALPHA3 onwards, you can do this instead:
Notif
yingFuture<Value> f1 = cache.getAsync("k1"); NotifyingFuture<Value> f2 = cache.getAsync("k2"); NotifyingFuture<Value> f3 = cache.getAsync("k3"); Value v1 = f1.get(); // blocks until value has been returned Value v2 = f2.get(); Value v3 = f3.get();
The clear advantage here is that the get requests, via getAsync(), can be fired in parallel and they don't need to wait for each other. Afterwards, when the value is needed, simply call get() on the future received.
Offering high availability via making replicas of state across a network as well as optionally persisting state to configurable cache stores, Infinispan offers enterprise features such as efficient eviction algorithms to control memory usage as well as JTA compatibility.
In addition to the peer-to-peer architecture of Infinispan, on the roadmap is the ability to run farms of Infinispan instances as servers and connecting to them using a plethora of clients - both written in Java as well as other popular platforms.
下载地址:http://www.jboss.org/infinispan/downloads