[asterisk-users] Scaling/Loadbalancing a Call Center and Redundancy

Steve Totaro stotaro at asteriskhelpdesk.com
Fri Sep 15 19:34:29 MST 2006


I have been tossing around some ideas about scaling a call center with 
load balancing and redundancy and would like the comunities input, 
thoughts, criticism and anything anyone wants to toss in.

The most evident thing is to start with beefy servers and only run procs 
that are required.  All of the TDM boxes run stripped down versions of 
Linux and Asterisk, they just take the call from the PRIs and convert 
them to SIP, everything stays ulaw end to end.

*Shared queues across multiple servers would be ideal*.  I don't think 
it is possible in asterisk, as is.  Maybe DUNDI could be useful but I am 
not up to speed on it enough to really know.

I was toying with a concept of a DB server tracking the number of calls 
to queue(s), number of agents logged into the queue(s).  Some agents 
will be logged into multiple queues and providing the logic to a series 
of Asterisk servers.   Calls could be made to the db to determine which 
queue/server to route the call to.  In this situation, duplicate queues 
would exist on several servers, so balancing would work somewhat if the 
DB made the selection on which box to route the call to and which box an 
agent should log into.  FastAGI and the manager interface will provide 
the routing and DB updates.

Another thought was to have one central server with all of the queues 
and agents, then somehow the central server would cause a "recording/CDR 
server" to send re-invites to the two SIP endpoints so that the call/RTP 
stream is moved to another asterisk server which would record the call 
and keep the CDR info.  Again, this would be done with a DB to decide 
which asterisk (recording/CDR) box has the lightest load.  It would take 
the burden of maintaining the call from the "Queue" server.  I/O is the 
first bottleneck in scaling when you record each and every call.

Would it be difficult to have asterisk send two SIP endpoints re-invites 
and then bridge the call?  Then it is just a matter of the "Queue" 
server checking the DB which recording/CDR server the call should go to 
and send it a message to re-invite and bridge the endpoints.  A transfer 
to a meetme is another possiblility but I want the "Queue" server out of 
the stream.

Has anybody else thought through the best way to scale something like 
this.  I have a DS3 and will be using all of the channels in the 
semi-near future.  I need to come up with a workable plan before then.

Thanks,
Steve


More information about the asterisk-users mailing list