How to deal with slow back ends in an application server environment
posted 4 years ago
My apologies - I am not sure what sub forum to post this in :-)
While I am a wannabe coder and secretly hack at night, I am currently looking at fixing up a lot of legacy issues in my work environment and delegating the tasks to other developers who unfortunately unless pushed don't try very hard to find solutions on their own. We have an issue that is constantly coming up and I am sure there must be a better way to handle it, but I am not sure what words to search for to get some ideas.
We run JBoss 5.1 application servers with connection pooling. Problem is that if one of the many defined databases or back ends slows down due to resource constraints or whatever, the worker threads start piling up to the point where you reach the upper limit and the app server 'dies.'
What is the best way of dealing with this? I once read something about a dripping bucket algorithm that would stop queries being sent to an already unresponsive back end - is this an option? Is there some best practice to protect yourself from such scenarios?
I have also read about asynchronous http and Jetty continuations, but I guess that is not solving the problem, just masking it better but keeping the app server alive while everything else is piling up in the background.