[jdev] scaling a component

Simon Tennant simon at buddycloud.com
Mon Dec 15 13:50:39 CST 2008

I was reading the http://xmpp.org/registrar/disco-categories.html and
the http://xmpp.org/extensions/xep-0030.html XEPs and have some questions.

Here at Buddycloud Towers we are running into some component scalability
problems that are hitting us sooner than we thought and I need move from
a single component handling messages to multiple components handling the
same message type.

Our main location lookup component handling the XEP-0255 stanzas is
starting to be IO-bound and we need to break it out into multiple
components handling the location queries.

What's current best practise for having multiple components that offer
the same service?

Here's a couple of options that I could think of (the component in
question is called butler.buddycloud.com):

* Have the client do a disco query at startup and then choose a
component based on a regex and a bit of randomness for load balancing:
search for butler*.buddycloud.com would return all the butlers and the
client would then connect to butler33.buddycloud.com.

* Have the client do a disco query at startup and then choose a random
leaf from a branch: household-staff.buddycloud.com

* have all the butlers go through a proxy butler that is registered on
the sever which then load-balances between different dedicated butlers.

Any tips or pointers would be most useful.  (I'll push the queries about
load balancing components between servers to the ejabberd mailing list.)

Simon Tennant
uk: +44 20 7043 6756               de: +49 89 420 955 854
uk: +44 78 5335 6047               de: +49 17 8545 0880
email and xmpp: simon at buddycloud.com

More information about the JDev mailing list