I’‘m designing an IM system for an established web company with many users. I’'ve settled on OpenFire for the IM server, and now I need to make some hardware recommendations. Here are the specifics:
Initial support for at least 5,000 simultaneous users (more is better), with scalability up to 50,000+
All users will connect through a private AJAX chat client. So, everything is going through http-bind.
Message traffic will be normal user-generated typing. Not a lot of logging in and logging out.
Roster sizes will be … I dunno. Normal-sized.
There are a few layers of hardware that I’'m recommending:
- A load balancer/reverse proxy. The load balancer part is to spread traffic around to multiple connection managers (although we’'ll only have one at first) and also around multiple web front ends handling some extra AJAX stuff. The reverse proxy is to map URLS to servers/ports based on URL format. For example, example.com/ws goes to webservices.example.com:80, while example.com/chat goes to cm1.example.com:5280.
I’‘m considering HAProxy to handle this job, since I’‘ve heard rumors that apache proxying can’'t handle the simultaneous connections that http-bind requires. Can someone comment on whether this is the right choice, and what kind of hardware would be required?
A bunch of web server/connection manager boxes. Obviously the hardware requirements will depend on the load generated by the web server half of things, but these will be fairly lightweight (relatively speaking). How much RAM do the connection managers need on a per-user basis?
The OpenFire server! This will probably match the specs at http://www.jivesoftware.com/products/openfire/resources/requirements.jsp. When it comes to scaling, is RAM or CPU more likely to be a bottleneck in my case?
A database server. Not much to say here.
I’‘m sure I’'ll have many more follow up posts as this project gets rolling. Thanks in advance for your help!