Openfire scaling s2s vs CM vs clustering

Hi,

Is there a difference between the new clustering and scaling using s2s except for the one domain issue?

Is there a performance difference between the two methods?

Will there be a difference between the two methods if the servers are sitting on the same host (physically close)?

Is there a limit on the number of nodes I can use in clustering or number of servers in s2s implementation?

Is there a difference on the maximum number of concurrent users in the whole implementation in the two methods?

Are there any guides how to deploy s2s or is it just comes down to configure the allowed servers on the admin console?

Is there a difference between openfires scaling and ejabberds scaling?

Thanks.

Hi,

I would answer a lot of questions simply with yes but I wonder how it would help you. Anyhow it’s interesting to know how many concurrent users with vCards and a specific chat / MUC behavior can connect to

  • a standalone Openfire server with 64 MB, 128 MB, 192 MB, 256 MB, … 512 MB memory

  • a cluster with 2, 3, 4, 5 servers with similar memory values

  • servers with s2s connections

Hopefully Gato or somebody else with a lot of time can run such tests.

LG

Hey dror,

Those are a lot of questions.

Is there a difference between the new clustering and scaling using s2s except for the one domain issue?

server-2-server and clustering are 2 different things. However, you can (in an ad-hoc way) use server-2-server for scalability but not for high availability. Anyway, server-2-server implies using different domains for each server. That means that each user will be aware that another user lives in another server. If you want to hide that fact to the user then you will need to implement some smart solution which is not something trivial. As I said, s-2-s and clustering are different solutions to different problems.

Is there a performance difference between the two methods?

Yes. Moreover, remember that server-2-server does not give you high availability per se. Having said that, depending on how you implemented the s-2-s (e.g. if you are hiding it from the end user or not) you may not be able to scale to the same number of users you have in a single cluster.

Will there be a difference between the two methods if the servers are sitting on the same host (physically close)?

XMPP servers will consume CPU to process I/O activity and parse XML. Placing many servers in a single machine is not recommended for servers with high load.

Is there a limit on the number of nodes I can use in clustering or number of servers in s2s implementation?

Server-2-server is a machine-to-machine link. You can build a graph of server-2-server (i.e. each server can connect to the other servers). These model should scale fine for federation. Clustering on the other hand uses heavily UDP packets. We are relying on Coherence to do all the clustering work and I read some documentation about Coherence being used with hundreds of cluster nodes.

Is there a difference on the maximum number of concurrent users in the whole implementation in the two methods?

Same as above.

Are there any guides how to deploy s2s or is it just comes down to configure the allowed servers on the admin console?

Server-2-server just requires to have port 5269 opened (i.e. not blocked by a firewall) and in theory you should also have a DNS SRV entry for your server. Both clients and servers should do DNS lookups to get the actual address and port to use to connect to the server.

Is there a difference between openfires scaling and ejabberds scaling?

I have not tested scalability of ejabberd so hard to say. When we implemented clustering in Openfire we did some load tests and got the following results.

  1. A single JVM was able to handle 250,000 concurrent users

  2. A cluster of 2 cluster nodes was able to handle 500,000 concurrent users

Having answered all those questions…my question for you is: what is your expected load on the server? It is not a matter of concurrent connections but also about traffic per second that you expect on your installation.

Regards,

– Gato

Thank you so much for your answer.

  1. A single JVM was able to handle 250,000 concurrent users
  1. A cluster of 2 cluster nodes was able to handle 500,000 concurrent users

Having answered all those questions…my question for you is: what is your expected load on the server? It is not a matter of concurrent connections but also about traffic per second that you expect on your installation.

Regards,

  • Gato

The expected trafic per user should be very low. All my users will be using a javascript web-client for exchanging text messages.

I know that you havn`t done test loads on the BOSH implementation but do you expect it to defer dramatically from the usual test load?

I don`t use a proxy so is there some other bottle neck I should be aware of?

I read about erlang vs java and people says that erlang suppose to support at least 10 times the number of threads compared to java. They are talking about a limit of several thousands of threads in java. Is it biased or am I missing something? I read that meebo uses ejabberd in the backbend, could openfire support a massive deploy like this as well?

I do like openfire and consider to use it because of the fantastic features, community and your support and because java is easier to develop and maintain. I`m just trying to learn about it some more.

Best,

Dror

I have not tested scalability of ejabberd so hard to say. When we implemented clustering in Openfire we did some load tests and got the following results.

  1. A single JVM was able to handle 250,000 concurrent users
  1. A cluster of 2 cluster nodes was able to handle 500,000 concurrent users

What size machines are these numbers absed on?