Fork me on GitHub

Changelog

v2.6

We are proud to announce that we have successfully upgraded to Play 2.4.x, “Damiya”. Although the last few Play releases were generally straightforward to upgrade to, with 2.4, the Play team made a lot of big changes to the framework, resulting in a lot of fixes and performance improvements. Some of the changes that are more relevant to Octoparts include:

  • Dependency injection out of the box. (Octoparts continues to make use of compile-time DI for correctness and performance)
  • Combination of previously separate thread pools into the Play default thread pool
  • Migration of components out of the Global singleton for easier mocking and better reasonability

After performing the upgrade, we deployed it into our test and QA environments and carefully monitored it for problems. When we found none, we used Siege to stress test the latest Play 2.3.x-based version of Octoparts against the Play 2.4.x-based version. The following results were obtained from 10 mins of Sieging using a payload equivalent to one that would request data for the M3.com homepage for signed-in users, with 100 concurrent requests, and zero delay on a 2Ghz Corei7 (Haswell) Macbook Pro with 8GB RAM:

Play 2.3.x based Play 2.4.x based
JVisualVM
Transactions 24317 hits 25024 hits
Availability 99.93 % 100.00 %
Elapsed time 599.44 secs 598.99 secs
Data transferred 145.70 MB 149.84 MB
Response time 1.96 secs 1.89 secs
Transaction rate 40.57 trans/sec 41.78 trans/sec
Throughput 0.24 MB/sec 0.25 MB/sec
Concurrency 79.49 79.04
Successful transactions 24317 25024
Failed transactions 16 0
Longest transaction 12.03 secs 3.19 secs
Shortest transaction 0.06 secs 0.06 secs

Discussion

Overall, there is a slight improvement in response time, and in resource usage under stress (if anything, performance under stress improved because there is a lower tendency to hit 100% CPU usage peaks), with Siege reporting fewer failures (99.93% availability with Play 2.3 version versus 100% availability with Play 2.4). Thanks to Play 2.4’s thread pool optimisation, we are using ~200 less threads at peak than with 2.3.x.