Wij zijn een nieuwe versie voor een webservice aan het schrijven, omdat de oude tegen zijn dak zit qua performance & schaalbaarheid.
De (nieuwe) opzet is als volgt:
1 een (Axis) webservice ontvangt de call en encapsuleert de WS data klasses naar 'eigen 'domein klassen
2 er wordt (met die eigen klassen als parameters) een call gedaan naar een Stateless Session Bean (JBoss is de applicatieserver)
3 ieder zo'n EJB heeft een eigen database-connectie met een set prepared statements; de bean vult de juiste statement in en vuurt het verzoek af
4 MySQL (op een aparate machine) doet z'n ding en geeft een antwoord terug
We testen de gehele opzet met een zelf geschreven java client, welke meerdere concurrent threads aan het werk zet om calls af te vuren op de webservice. Er wordt voorlopig alleen getest met opvragingen waarvan we weten dat er in de database gegevens gevonden worden.
Het Probleem
.. is de performance. Die is niet bevredigend; maximale throughput aan de client kant is zo'n 25 call per seconde bij 10 concurrent sessies (is het maximaal haalbare).
Maar het vreemde is: geen van de systemen zit tegen z'n dak qua CPU load, de gegenereerde netwerk-traffic is een schijntje t.o.v. de capaciteit en de database staat ook uit z'n nuis te eten. De client PC heeft ook al niets te doen; met meerdere clients wordt (opgeteld) nauwelijks een hogere throughput gemeten.
De laatste 'hoop' was dat de database niet goed in elkaar zat (qua query's of indexen); maar wanneer we de client aanpassen zodat ie direct naar dezelfde MySQL database gaat, wordt de throughput (maximaal) een ruime 3000 calls / sec bij 60 concurrent sessies. Nogal een verschil met de gemeten 20 calls/sec in de complete opstelling! Wij concluderen hier dat de database dus niet de bottleneck is.
Ook hebben we de poolsize van de EJB's en de Http sessions bekeken, maar die staan ruimschoots boven het geteste aantal concurrent sessies.
Mijn vraag aan jullie
hebben jullie ervaring met de gebruikte tools (JBoss, Axis, Stateless EJB's, en/of MySQL) en een idee waar de bottleneck zou kunnen zitten?
Ieder advies of suggestie is welkom!
De (nieuwe) opzet is als volgt:
1 een (Axis) webservice ontvangt de call en encapsuleert de WS data klasses naar 'eigen 'domein klassen
2 er wordt (met die eigen klassen als parameters) een call gedaan naar een Stateless Session Bean (JBoss is de applicatieserver)
3 ieder zo'n EJB heeft een eigen database-connectie met een set prepared statements; de bean vult de juiste statement in en vuurt het verzoek af
4 MySQL (op een aparate machine) doet z'n ding en geeft een antwoord terug
We testen de gehele opzet met een zelf geschreven java client, welke meerdere concurrent threads aan het werk zet om calls af te vuren op de webservice. Er wordt voorlopig alleen getest met opvragingen waarvan we weten dat er in de database gegevens gevonden worden.
Het Probleem
.. is de performance. Die is niet bevredigend; maximale throughput aan de client kant is zo'n 25 call per seconde bij 10 concurrent sessies (is het maximaal haalbare).
Maar het vreemde is: geen van de systemen zit tegen z'n dak qua CPU load, de gegenereerde netwerk-traffic is een schijntje t.o.v. de capaciteit en de database staat ook uit z'n nuis te eten. De client PC heeft ook al niets te doen; met meerdere clients wordt (opgeteld) nauwelijks een hogere throughput gemeten.
De laatste 'hoop' was dat de database niet goed in elkaar zat (qua query's of indexen); maar wanneer we de client aanpassen zodat ie direct naar dezelfde MySQL database gaat, wordt de throughput (maximaal) een ruime 3000 calls / sec bij 60 concurrent sessies. Nogal een verschil met de gemeten 20 calls/sec in de complete opstelling! Wij concluderen hier dat de database dus niet de bottleneck is.
Ook hebben we de poolsize van de EJB's en de Http sessions bekeken, maar die staan ruimschoots boven het geteste aantal concurrent sessies.
Mijn vraag aan jullie
hebben jullie ervaring met de gebruikte tools (JBoss, Axis, Stateless EJB's, en/of MySQL) en een idee waar de bottleneck zou kunnen zitten?
Ieder advies of suggestie is welkom!
The most exciting phrase to hear in science, the one that heralds new discoveries, is not 'Eureka!' but 'That's funny...'