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 ejabberd
s 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.
-
A single JVM was able to handle 250,000 concurrent users
-
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