Thursday, 11 October 2018

Infinispan Spring Boot 2.0.0.Final is out!

Dear Infinispan and Spring Boot users,

We have just released Infinispan Spring Boot 2.0.0.Final.
If you are wondering why it is worth to use this starter, read Sebastian's article here!

Highlights of this release include:
  • Uses the latest Infinispan 9.4.0.Final
  • Automatic translation of Hot Rod client properties into Spring YAML (ISPN-9437)
  • Bug fixes

You can find the release in the maven central repository.

Please report any issues in our issue tracker and join the conversation in our Zulip Chat to shape up our next release.

Enjoy,

The Infinispan Team

Monday, 8 October 2018

Infinispan 9.4.0.Final

Infinispan 9.4.0.Final “Infinity Minus ONE +2”

 

10 years of Infinispan

Infinispan is 10 years old this month, and what better way to celebrate than with a brand new Final release !!!

What's new

Infinispan 9.4 comes with the following new features / improvements:
  • Segments everywhere
    9.3 brought the segmented on-heap memory container. 9.4 extends this to provide the benefits of segmentation to off-heap as well as all of the core cache stores. Watch as your bulk operations (size, iteration, streams) get a big performance boost !
  • Transcoding everywhere
    To paraphrase the Grand Moff Tarkin, “The last remnants of Compatibility Mode have been swept away”. Transcoding, i.e. the ability to transparently convert between a number of formats across different endpoints, is now “fully operational”.
  • Transactions everywhere
    Hot Rod transactions now support recovery.
  • Hot Rod client improvements
    The Hot Rod client has received many improvements:
    • Client-side statistics, complete with JMX support
    • Improvements to the scalability and the behaviour of near-caches
    • All of the configuration can now be supplied via the properties, which also means easier integration with other frameworks, such as Spring Boot.
  • Query improvements
    Many cleanups and improvements
  • Bugfixes, stability, reliability
    Although not as exciting as new features, we continued our work to improve the stability, reliability and performance of all aspects of Infinispan.
  • Upgrades:
    • As usual the latest and greatest JGroups 4.0.15
    • The server is now based on WildFly 14

Get it, Use it, Ask us!

Please download, report bugs, chat with us, ask questions on the forum or on StackOverflow.

Tuesday, 2 October 2018

Segmented Data Containers: Distributed Stream Performance Boost

Welcome to the first of several blog posts that describe the segmentation of containers that Infinispan uses to store data. Some of you may have noticed in the previous 9.3.0.Final notes that we announced a new feature named “Segmented On-Heap Data Container”. We also mentioned that “It improves performance of stream operations”, but what does that really mean?

What is a segmented data container and why does it matter? 


Imagine a cluster of 4 nodes in distributed mode (numOwners = 2) with entries for k0 - k13. It might look like this:




The data is distributed between the nodes with only two copies of each entry available. However, the data itself is stored internally in the same Map instance. As a result, when performing operations on all entries in the cache, Infinispan must iterate over the same data multiple times. This degrades performance.

As of Infinispan 9.3, a segmented data container is available to separate data by segments. Although only on-heap bounded and unbounded implementations are currently available.

With a segmented data container, that same data set might look like this:




Because Infinispan internally reasons on data in terms of segments, a segmented data container lets Infinispan process data only in specific segments. This allows for operations performed upon all entries to require iteration over the data only once.

Actual Performance Difference


So with the above example you might be thinking that the performance increase maximum is two times throughput, since numOwners is two. This is close, but not quite correct. While iterating on the data we also have to determine what segment an entry belongs to. With a segmented container we know this already, so there is no need to calculate that. This provides additional performance, as you will see.

The following graphs were generated using the benchmark at https://github.com/infinispan/infinispan-benchmarks/tree/master/iteration. The following command was run: java -jar target/benchmarks.jar -pvalueObjectSize=1000 -pentryAmount=50000 -pbatchSize=4096



The preceding graph is the result of the iteration methods. As you can notice the performance increase isn’t that much… why not?!?

Unfortunately, remote iteration requires a lot of network overhead, so we don’t get to see the full benefits of segmentation. But at least it is about 5-12% faster, not too shabby.

Now to show the real improvement, here is the chart showing the performance increase for the Cache#size operation:



If you notice there is huge increase in performance: almost a three fold increase over the non-segmented container, even though numOwners is only two. The old segment calculation adds a bit of overhead compared to just incrementing a number.

So keep in mind this change will show a larger gain in performance if the result returned is smaller, especially if it is a fixed size, such as a single int for Cache#size.

What about gets and puts?


Having the container segmented should also affect get and put performance as well, right? In testing the difference for get and puts are less than one percent, in favor of segmentation due to some optimizations we were able to add.

How do I enable this?


So the performance gains are noticeable, especially when the remote operation returns a small data set. But how can a user configure this? This is the nice part, due to no performance loss with other operations the container will always be segmented as long as the cache mode supports segmentation. That is if it is a Distributed, Replicated or Scattered cache.

A real-life example and closing


Since this feature has been around a while already, we actually have users gaining benefits from this feature. An example can be found at https://developer.jboss.org/message/983837#983837. In this case the user only upgraded to Infinispan 9.3 and received over a three-fold increase in performance when using distributed streams. It actually starts to bring distributed streams performance within range of indexed query for some use cases.

So, by upgrading your application to Infinispan 9.3 or newer, you will benefit from these improvements. There will be future posts regarding segmentation, including support for stores. Either way please feel free to download Infinispan, report bugs, chat with us, ask questions on the forum or on StackOverflow.

Monday, 17 September 2018

Infinispan 9.4.0.CR3, 9.3.3 and codename vote

Hi Infinispan Community,

our original plan was to release 9.4 Final today, but we have decided to delay the release by an extra sprint (3 weeks).
So today we are announcing 9.4.0.CR3 instead, which comes with the following fixes:

  • Segmented off-heap data container
  • Performance improvements for Near Caches
  • Hot Rod client-side statistics
  • Removal of the old compatibility mode in favor of the new transcoding capabilities is now complete
  • Server rebased on top of WildFly 14
  • Lots of code cleanups, especially around query
  • Bug fixes
For those of you on our stable branch, we also released a 9.3.3 with some bug fixes.
Please download, report bugs, chat with us, ask questions on the forum or on StackOverflow.

As this release is yet unnamed, please make sure you vote for the name:

Tuesday, 4 September 2018

Infinispan Spring Boot Beta2 is out!

Dear Infinispan and Spring Boot users,

We have just released Infinispan Spring Boot 2.0.0.Beta2.

Highlights of this release include:
  • Upgrade to Spring Boot 2.0.3.RELEASE
  • RemoteCache can be injected now. Example here 

You can find the release in the maven central repository.

Please report any issues in our issue tracker and join the conversation in our Zulip Chat to shape up our next release.

Enjoy,

The Infinispan Team

Thursday, 30 August 2018

Infinispan 9.3.2.Final and 9.4.0.CR2 are out!

Dear Infinispan users,

We have just released 9.3.2.Final and 9.4.0.CR2.

9.3.2.Final includes bug fixes and improvements.

Highlights of this release include:
  • Upgrade to protostream 4.2.1.Final (ISPN-9399
  • Ship basic analyzers by default (ISPN-9429
  • Avoid unneeded parentheses in Ickle query string generated by QueryBuilder (ISPN-9378
The full list of 9.3.2.Final fixes are here.

9.4.0.CR2 has been released due to an internal issue we experienced releasing CR1.

You can find both releases on our download page. Please report any issues in our issue tracker and join the conversation in our Zulip Chat to shape up our next release.

Enjoy,

The Infinispan Team

Monday, 27 August 2018

Infinispan 9.4.0.CR1 is out!

Dear Infinispan users,

We have just released 9.4.0.CR1 which includes bug fixes and improvements.

Highlights of this release include:
  • Near cache and client side TTL (ISPN-9098
  • Allow configuring near cache from hot rod properties (ISPN-9385
  • Initial support for JSON format in scripts 
  • Default analyzers are provided to use with remote queries (ISPN-9429
  • Prevent user from configuring passivation with a shared store (ISPN-7168
  • Enhance RemoteStore to support segmentation (ISPN-9376
  • Upgrade to RxJava 2.2.0 (ISPN-9418
  • Hot Rod configuration properties have setters now to ease integration with other frameworks (ISPN-9398
The full list of 9.4.0.CR1 fixes are here.

You can find the release on our download page. Please report any issues in our issue tracker and join the conversation in our Zulip Chat to shape up our next release.

Enjoy,

The Infinispan Team