Virtual Clustering?

I am looking at creating an application that would potentially server 10,000 users online at once. From what I have read, each server can be expected to handle multi user chat of 1000 to 5000 concurrent users.

I am only looking for One to One chat, and would be willing to have 1 Jive Messenger server to support every 1000 users online.

The trouble is, how do I get presence status from all 10 servers into one place?

Would it be feasable or wise to log every client into TWO servers: One big public server to handle presence, and another to manage the one to one chatting…?

It seems like it must be possible with a little help from a MySQL server or something.

Any thoughts?

I would suggest checking out the following thread:

http://www.jivesoftware.org/forums/thread.jspa?threadID=14602

I think our suggestion for being able to coalesce connections to a central router server is what would work well for your implementation. We’‘re interested in working on this feature, but haven’'t had time yet.

Regards,

Matt

Thanks Matt… I like the idea of using router servers… now, pardon my ignorance on this one:

For my implimentation I would have users select maybe 4 - 10 chat buddies that they would need presence info for.

Main user is on Server A

User1 is on Server B

User2 is on Server C etc.

If every time a user’'s status changed their status was recorded in a MySQL database then when Main User adds User1 to her one to one chat list, the availability can be looked up in the db based on username and displayed appropriately.

Along with availability, we could ask the MySQL db WHICH server User1 was on, and then send a private chat from MainUser@ServerA.com to User1@ServerB.com

Although realtime availability info would be ideal, I would settle for a 1 or even 2 second lag between updates, just to have relatively up to date availability info displayed.

All messages would be stored in a MySQL database anyway, so even if a user was not available at the time of sending, the message would still be there when they returned.

I am probably missing some major performance hurdle in here. Basically, we are talking about shifting the responsibility of presence to a MySQL server which would get a request for presence info up to 5 times a second per user.

Can MySQL handle that? 50,000 request for data a second? Surely there are clustering solutions for MySQL that will allow us to get the performance we would need to up the capacity…

Is the whole idea a clumsy hack?

I don’‘t think you need anything near this complicated. A single Jive Messenger server can scale to the number of packets sent/received by 50K users. What it can’'t do is scale to that many connections. The router protocol I described above would solve that problem without any strange database hacks.

All users sessions are “on” a single main server even if their connections are being handled by other servers that then aggregate those connections together to the main server. Does that make sense?

Regards,

-Matt

Ah… I think I get it now.

Main User connects to Router Server A which then connects to Jive Server which manages the details.

User1 connects to Router Server B which also connects to the Jive Server. etc.

Can anyone point me to a ‘‘How To’’?

Thanks again for shedding some light on this.

There’‘s not really a how-to unfortunately. So far, it’‘s just an idea that needs to be implemented. We’'d be happy to work on it with you, though.

Regards,

Matt