Infinispan

Infinispan can be seen as a cache enriched by processing power which takes advantage of concurrency, non-blocking IO and lock-free primitives to provide high performance. Therefore, it enhances the multiple copies of data tactic (cache) with the massive parallelization of activities that read and write in-memory entries.

Its main quality is performance, due to the introduction of massive concurrency and aggressive scheduling of resources, but it requires a programming model that can take advantage of algorithm parallelization, like MapReduce.

Besides performance, it also provides scalability because it is possible to add more nodes to the cluster with a linear cost. Each new node increases the cluster computational power and rebalances the load distribution. Each entry, a pair key/value, has a predefined number of redundant copies and whenever a node is added or removed from the cluster the copies are redistributed in the cluster preserving the number of copies for each entry. Availability is also the result of the dynamic rebalancing of entries in the cluster, which is an effective tactic for node crashes.

It provides a rich set of configuration primitives that allows to define the number of redundant copies, the invalidation policy, etc. Note that it supports several levels of consistency, where the more strict is transactional but the default is non-transactional because of Infinispan main quality, performance. In the non-transactional mode developers must have to deal with weak consistency. The configuration can be done programatically or declaratively but, in both cases, it follows an object-oriented framework approach where customized is done by extending its extension points.

Since entries can have copies in several nodes, disk persistency may not be a big concern, because entries are lost only in the case of simultaneous failure of several nodes. This mean that, due to performance, writing to disk may occur when it does not penalize performance.

Topologically, Infinispan can be deployed has a cluster that can be used as a service by applications, which allows its scalability by adding more nodes, or as a library that is part of the application application JVM (Java Virtual Machine). The former allows non Java applications to use Infinispan.