Gato visited the Portland Jive offices this past week from Argentina. Besides consuming many bottles of Oregon and Argentina wine we also spent some time discussing Pampero. Here’'s our proposal on how to move forward:
Phase 1: Get something simple but working in place
Create a very simple connection manager implementation using our existing I/O code from Jive Messenger. Connection managers will need to be manually configured to connect to a central Jive Messenger server.
Add support to Jive Messenger to allow connection manager connections. This basically means listening on a special port for CM connections and then assigning each session inside the server a CM id so that the server knows how to route packets.
We’'ll re-use the existing external component protocol with very minor tweaks.
Most likely, the majority of this work will be done by Gato. It’‘s hard to start from nothing and get to somewhere where people can experiment and contribute. Current estimate is that it’'s a couple weeks of solid work, but given all the other things going on at the moment, could be 6-8 weeks from now.
Phase 2: Experiment with different approaches to get high scalability
Use IP multi-cast so that connection managers can automatically find the Jive Messenger server to connect to. We could use multi-cast DNS (Apple Bonjour) or Jini.
Build a new connection manager that uses NIO for much improved scalability.
Try out different XML libraries than Dom4J in the hopes of finding something faster as well as something that supports binary XML. This has been discussed in some other threads.
Add statistics and management using JMX.
Some prototype work for Phase 2 can start now but we’‘ll want to wait until after Phase 1 before adding it in. We’'re hoping that many of the Phase 2 items can be driven by Noah, Conor, Iain, and others.
Phase 3: Polish
In phase 3 we’'ll setup the full load testing environment and make additional tweaks to get scalability to where we want it.
Some general scaling goals associated with each phase; if possible, we’'d like to test the system at each phase to see if we reach these goals:
Phase 1: 15K connections
Phase 2: 40K connections
Phase 3: 100K connections