cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
Announcements
834
Views
10
Helpful
8
Replies
Highlighted

CVP and load balancing with custom ASR/TTS VXML app

Hello

consider the following architecture:

HCS-CC/UCCE v11.0.2 with 3 CVP servers, CUCM (PUB+4 SUB);  2 CUBEs with 2 separate IOS VXML VBs.

The ASR/TTS VXML apps (non call studio apps) run on 2 dedicated separate VXML app servers with 3 Nuance speech servers.

Load balancing "between" the 3 CVP servers and the 2 VXML app servers is done by ICM scripting (setting media server and 50/50 %allocation)

(not sure if this can also be done using a CUSP)

I am struggling on how to load balance between the 2 IOS VXML VBs and the 3 Nuance speech servers.

Can this be done with CUSP v9.1 ? I could not find any config sample on how to do this.

CVP v11 doc refers to ACE but they seem end of life (?)

What would be the preferred way to implement this kind of load balancing ?

Any help appreciated.

8 REPLIES 8
Highlighted
Advocate

Peter,

I have done something similar. The customer has 4 VXML servers per side (also non-CVP Studio). They have 4 Nuance servers per side. We use MRCP v2. (I hope you are using v2).

With MRCP v2 you can use the dial peers on the voice gateways to load balance your Nuance servers. It may not be obvious, and it's certainly not intuitive, but the following does work.

voice class uri TTS sip
 pattern tts@10.199.199.101

voice class uri ASR sip
 pattern asr@10.199.199.101

ivr asr-server sip:asr@10.199.199.101
ivr tts-server sip:tts@10.199.199.101

dial-peer voice 100 voip
 description SIP TTS Media Call
 session protocol sipv2
 session target ipv4:10.199.199.101
 session transport tcp
 destination uri TTS
 dtmf-relay rtp-nte
 codec g711ulaw
 no vad

dial-peer voice 101 voip
 description SIP ASR Media Call
 session protocol sipv2
 session target ipv4:10.199.199.101
 session transport tcp
 destination uri ASR
 dtmf-relay rtp-nte
 codec g711ulaw
 no vad

dial-peer voice 102 voip
 description SIP TTS Media Call
 session protocol sipv2
 session target ipv4:10.199.199.102
 session transport tcp
 destination uri TTS
 dtmf-relay rtp-nte
 codec g711ulaw
 no vad

dial-peer voice 103 voip
 description SIP ASR Media Call
 session protocol sipv2
 session target ipv4:10.199.199.102
 session transport tcp
 destination uri ASR
 dtmf-relay rtp-nte
 codec g711ulaw
 no vad

dial-peer voice 104 voip
 description SIP TTS Media Call
 session protocol sipv2
 session target ipv4:10.199.199.103
 session transport tcp
 destination uri TTS
 dtmf-relay rtp-nte
 codec g711ulaw
 no vad

dial-peer voice 105 voip
 description SIP ASR Media Call
 session protocol sipv2
 session target ipv4:10.199.199.103
 session transport tcp
 destination uri ASR
 dtmf-relay rtp-nte
 codec g711ulaw
 no vad

dial-peer voice 106 voip
 description SIP TTS Media Call
 session protocol sipv2
 session target ipv4:10.199.199.104
 session transport tcp
 destination uri TTS
 dtmf-relay rtp-nte
 codec g711ulaw
 no vad

dial-peer voice 107 voip
 description SIP ASR Media Call
 session protocol sipv2
 session target ipv4:10.199.199.104
 session transport tcp
 destination uri ASR
 dtmf-relay rtp-nte
 codec g711ulaw
 no vad

With these 4 equal preference dial peers for ASR, and 4 equal preference dial peers for TTS, the load is distributed and fault tolerance is achieved. A failure of the SIP call to a down Nuance server causes the gateway to retry and another dial peer is selected.

One comment to readers looking at this configuration. What is the role of the configuration settings for voice class uri values and the asr-server and tts-server? How can we have different values for those when they are singletons (can only appear once in the configuration)?

As I said - it's not intuitive. The Cisco documentation is not clear on what to use here, but we simply used the first address of the 4 Nuance servers.

Regards,
Geoff

Highlighted

thx Geoff

This works although we invented a slightly diff method by using a server-group for the speech servers and a keep alive profile and then use these in 2 dial peers (1 for asr and 1 for tts)

It seems the keep alive profile can only be put in one of the 2 dial peers; if put in both the cube vxml vb gets "confused" when one or more speech servers are disconnected.

Highlighted

Peter

That sounds like a great idea - having a server-group. If you feel like posting a snippet of your config, that would be fine.

Regards,
Geoff

Highlighted
Not applicable

Hi there,

Thanks for the fab question and replies, it helped a lot.

Would you guys know if we could still use the Gateway dial peers configuration (suggested above) if using CVP Call Studio Custom VXML Apps?

Thanks a lot

Nando

Highlighted

You sure would. At this particular customer the VXML server was a non-Cisco platform, but it will be the same.

Regards,
Geoff

Highlighted
Not applicable

Thanks Geoff,

Cisco docs can be hard to read sometimes, they have this statement in the CVP Configuration guide:

"For ASR/TTS failover to function when using Custom VXML Applications, you require either an Application Control Engine (ACE) or any other supported load balancer."

I agree with you, can't see a reason why it wouldn't work, but when you read the above, it scares me a bit. 

Any comments?

Nando

Highlighted

With MRCP v1 the only way was with the CSS (Cisco Content Services Switch) which was superceded by the ACE. So in some sense the Cisco comment is OK.

But with MCRP v2 there is a better way. By the way, I had a NetScaler at this deployment and tried to make that load balancer work for ASR but could not make it happen. Used the dial peer method and it's terrific.

Regards,
Geoff

Highlighted

an additional comment when using server groups in the asr and tts dial-peers.

we initially had only a "voice-class sip options-keepalive profile .." stmt in the tts dial-peer.

However it was found that "failover" to another Nuance ASR/TTS server in the server group failed when it was completely shutdown (so not only some apps on that server). When adding the keep alive to the asr dial-peer as well this was resolved. Not 100% clear on why this worked.