Proxying Strophe to Nginx to Ejabberd via a BOSH cluster.

Wow! How many words did I just use up there? Too many. But they all have meanings. BOSH is the latest-greatest method of using a stateless protocol, like HTTP to keep a connection open to a stateful protocol, like XMPP. Jack Moffitt has written the most useful information on the web on this subject. But even with a complete description of how to pull off this "hack" there's always something that can sneak up on me. Here's my architecture right now.

Client (strophe) --> Nginx (rr balancer)--> ejabberd cluster (mod_http_bind)

Simple enough, and pretty much documented by Mr Moffitt. BUT WAIT! After deploying this to staging, user testing produced some very strange results. About 1 in 5 connectionswould be one way. I'd see you log in but you couldn't see my words. Bizarre, and usually the result of an inconsistant state. After a day of reading, drawing and poking around I discovered what I believe to be the source. The Mnesia database table for http_bind. I forgot to configure the database table to be shared across all nodes in the cluster. So I believe that each node had their own database for http_bind connections, which would explain the inconsistant yet unpredictable state.


Written on 2009-02-06 20:18:10 UTC

Back

comments powered by Disqus

I am a hacker and systems architect specializing in data analytics and human computer interfaces.



Photos

Music

lazzarello's Profile Page

  • Login