My company uses OpenFire for server-side and smack for client-side in its XMPP Android application.

AWS seems like a good and scalable service for what we need. We use it for testing our app, but I'm afraid that the server will crash with 20k-50k users.

I have 2 questions:

  1. Is AWS good enough for an XMPP (OpenFire) server? What are the pros and cons?
  2. How do I build such an application that can handle 20k online users at least, and lets say 2k opened chat rooms?
  3. Is there any specific tutorial for this kind of stuff?

Money is not a problem in terms of server costs. Time is what matter for us right now.

  • Does OpenFire support running your XMPP service across multiple servers? Because if it does I would think that AWS would be great for that. You could bring up new servers and spread the load as you add more users. – thelsdj Jan 31 '11 at 9:13

AWS will work for what you intend without any problem, things to be aware though of an EC2 implementation

  • You'll lose CPU cycles when the underlying node is under high load, be ready for your machines to sometimes not deliver enough CPU juice
  • Disk I/O will be a bit slower than a regular machine

Apart from that Openfire does have a clustering solution, which is commercial, and as far as I know the company behind it died (and they haven't open sourced it, gah), I've been trying to contact them to get the clustering solution myself, to no avail.

So if you choose Openfire you'll be stuck with one server having to carry all the workload, which sounds a bit stressing with the numbers you're talking about, if you want to start with Openfire it looks like a good easy way to get rolling but when you need to be aware of your options when you start to grow ;)

For tutorials have a look at the Openfire howto at http://ubuntuforums.org/showthread.php?t=525670, it's not a bad one :)

  • I need the ability to grow. Do you recommend another XMPP server-side application? Also, what about this connection module? igniterealtime.org/projects/openfire/connection_manager.jsp – shaimagz Jan 31 '11 at 9:31
  • Any XMPP server should do the task, although clustering is a bit of a daunting task. That connection module will connect your XMPP server to other networks, maybe you can end up using this to connect multiple XMPP servers between them, but they'll see the users as being on remote servers, try it out though. – lynxman Jan 31 '11 at 9:33
  • ejabberd scales a bit more linearly. – Tom O'Connor Jan 31 '11 at 9:39
  • I just found this thread: community.igniterealtime.org/thread/32723 . They say that we should use: docs.safehaus.org/display/PENROSE/Home . After reading about this it sounds exactly like what AWS does. am I wrong? – shaimagz Jan 31 '11 at 9:43
  • Yeah, that's the main issue, if you have separate Openfire servers users will see one each other form different domains, as Tom O'Connor says ejabberd will be a bit more linear to grow but also the learning curve is steeper than Openfire. Try starting your project with Openfire so you can test your code but keep in mind that you'll need to look at other XMPP servers as soon as you start growing. – lynxman Jan 31 '11 at 9:46

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.