caler info server application scalability

Version 1
    This document was generated from CDN thread

    Created by: UMUT ARSLAN on 14-04-2009 04:12:01 PM
    The IP Phones Services SDK has an example (CallerInfo) of sending caller information to a phone.
    In callerinfo.jsp there is a performance note about scalability.
    We have tested this application with 30 IP phones and everything went fine. Then we started to increase the number of phones that this service is running and when we reach hundreds of phones the application can not handle the requests.
    Has this application been tested with hundreds of phones before ? How can we manage this application to work in many phones.
    the call manager version is 6.1
    there is one jtapi user controlling all the phones.

    // PERFORMANCE NOTE: As with any CTI-based application, scalability can be a limiting factor.
    // Consult Cisco's CTI design guides to ensure that the use of this application does not cause
    // performance or scalability problems.

    Subject: RE: caler info server application scalability
    Replied by: David Staudt on 14-04-2009 05:19:09 PM
    The intention of these samples is purely illustrative: to show how the Cisco-specific APIs/commands might be used in practice.  The suitability of the apps for any kind or production situation is not considered - certainly deploying to a site with hundreds of clients is not envisioned or supported.  Certainly all of the samples need significant re-architecting to provide security, scalability, resiliency, etc.
    Regarding the CTI scalability note, this refers primarily to the impact of monitoring multiple devices via CTI.  See the UCM SRND doc for full details of the performance impact of CTI scaling:
    However the sample code itself is not intended to scale, and likely will show big issues if you try to do so.  Looking at the class that this sample uses, it seems particularly ill-suited to monitoring multiple phones: this infinite loop here would quickly kill the app-server after a few phones are added:
        while (true) {
          String[] numbers = theInfoServer.getActiveCallPartyNumbers(args[3]);
          if (numbers == null) {
            System.out.println("No active calls on " + args[3]);
          else {
            System.out.println("Orig#:" + numbers[0] + " Dest#:" + numbers[1] + " This#:" + numbers[2]);
    Deploying a scalable app to a real site based on this sample will require significant re-work by the developer.

    Subject: RE: caler info server application scalability
    Replied by: Praful Kapadia on 23-04-2009 10:31:46 PM
    Hi David
    The CallerInfoServer shows a number of techniques. Looking at the code, I get the impression that the getActiveCallPartyNumbers method was provided to run the class as a demo. The main purpose seems to be to show you how  to implement a CallObserver. Since this is event-based I assume it is efficient? Does it scale? If not, how would you make it scale - by having multiple call observers each observing a different subset of the total list of phones?
    Given the caveats about scalability in the SDK examples, where is the Cisco guidance on how to scale applications correctly?