Hi all,

I would like to introduce a topic for discussion, regarding DB connection pools 
used in CloudStack, currently Apache Commons DBCP 1.4 
(http://commons.apache.org/) is used. I've been investigating this topic as we 
are having complains of random issues on MySQL connection pool on large 
environments. Please let me know if this topic has already been discussed 
before.


First of all, DBCP 1.4 has been released on 2010 
(https://commons.apache.org/proper/commons-dbcp/changes-report.html), and no 
minor/patch version has been released since then. It seems to work in high 
performance with relatively low traffic and low load applications. However, it 
is single threaded, and in order to be thread-safe, the entire pool needs to be 
locked. It is also reported that an CPU and concurrent threads increases, the 
performance gets affected. This is a serious issue on highly concurrent 
systems, such as CloudStack.


I've been investigating some options to replace it:
- The first option can be upgrading to version 2.x. Issues on performance and 
concurrency could be solved using this version.
- Tomcat JDBC Connection Pool. Please check: 
https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html.

- Other replacement options found: BoneCP, C3P0, HikariCP


Given these options, I've been looking for benchmarks to compare them (*). 
Looks like HikariCP (http://brettwooldridge.github.io/HikariCP/) could be the 
best replacement, improving performance and stability. Another good replacement 
option could be Tomcat.


I've been also examining the codebase, data source initialization is done on 
TransactionLegacy class under the cloud-framework-db project. Replacement work 
should be done on this class. Instead of pure replacement, a global setting can 
be introduced to make the admins able to select which connection pool to use.

What do you think? Any possitive/negative feedback is welcome as well as new 
ideas. As mentioned before, I don't know if it has been discussed before, sorry 
in advance if it has.

Kind regards,
Nicolas

(*) Links to benchmarks and comparissons:
https://www.wix.engineering/single-post/how-many-threads-does-it-take-to-fill-a-pool
https://www.wix.engineering/single-post/how-does-hikaricp-compare-to-other-connection-pools
<https://www.wix.engineering/single-post/how-does-hikaricp-compare-to-other-connection-pools>https://beansroasted.wordpress.com/2017/07/29/connection-pool-analysis/
https://beansroasted.wordpress.com/tag/connection-pool-comparison/
<https://beansroasted.wordpress.com/tag/connection-pool-comparison/>https://github.com/brettwooldridge/HikariCP/wiki/%22My-benchmark-doesn't-show-a-difference.%22
http://www.trustiv.co.uk/2014/06/battle-connection-pools

nicolas.vazq...@shapeblue.com 
www.shapeblue.com
,   
@shapeblue
  
 

Reply via email to