Columbia InterNet Extensible Multimedia Architecture (CINEMA) provides a test
bed for different multimedia and Internet telephony applications. We need some
mechanism to implement the load balancing in the SIP conference servers to
achieve better performance. When the participants in the conference grows, we
can dispatch the partipants to the least loaded server and bring up new server
when it is necessary.
The longer term goal of the project is to build a system which automatically adds new servers and transfers existing participants to new servers as the group size grows using the audio/video conferencing server. The new servers should be chosen to be well-positioned in respect to the members to be transferred, e.g., by using UDP round trip delay, path length or packet loss measurements. In this document we describe how to implement a simple version of the system: Find the server which has capacity to host the new conference from the current active conference servers. Later, we can choose the server that has capacity AND has a good path properties to the participant at connect time.
Old Conference Server System
This project is based on the sipconf audio conference server built by
Kundan Singh and
Gautam Nair. We extend the
following functionality in the current version:
Conference Server with REDIRECT service
To implent the load balancing in conference servers when the size of participants
in conference grows, we need some mechanism to evaluate the current load in each
server and make decision as where to direct the participant and when to bring up
new server if all the servers in the conference is overloaded.
Currently, information for the conference servers are not presented in the
database, thus make it difficult to evaluate the current conferece servers,
conference members in the servers and related QOS information.
Also, current system have only one table entry for each conference, even if it has multiple instances. Each conference, such as irt-meeting@cs.columbia.edu, can (or should be able to) have multiple instances. For example, irt-meeting@cs might meet once a week, Wednesday evening at 6 for 2 hours. Each such meeting would be a separate instance.
To make server information presented in the database, we need a server database.
Each conference should simply have an entry pointing to its server, which is
then registered on the proxy.(E.g., if the conference acm@cs.columbia.edu is on
conductor, conductor would register with sipd as Contact
acm@conductor.cs.columbia.edu.)
In addition, we need another table for each conference instance. The file upload
area and message board (in the future) would be for the whole conference, while
the conference recording, for example, would be specific to one instance of the
conference. This table will store the user QOS measurements, indexed by
conference-instance and user.
Conference Server Database Design
- host running the server - server capacity
- date and time with repeat indication ("every Wednesday", "every other day") - voting - message board - action items (part of calendar) - file upload - membership list - event group that the conference refer to
- event for the instance in calendar - start and ending time - host running the conference - pointer to recording
- user - conference instance - QOS values (from RTCP report): - number of RTP packets received - number of RTP packets sent - packet loss fraction reported by the participant via RTCP RR - # of packets sent as claimed by the RTCP SR (this allows to detect losses seen by the mixer) - jitter reported by the participant in RTCP RRThe sipconf module:
int GetEventID (int event_group_id) :This function return the event_id for the given event_group that currentTime is in between the start_time and end_time, return 0 if no match found.
int GetEventGroupID () :This function return the event_group_id for the conference that the user want to join when a new call arrives, return 0 if no match found.
void *CreateConfInstance () :This function create the conference instance for the conference in the database, this is called when a new SIP call arrives and the instance for the conference that the user want to join hasn't been created yet.
void *CreateConfInstance () :This function create the conference instance for the conference in the database, this is called when a new SIP call arrives and the instance for the conference that the user want to join hasn't been created yet.
char *GetConfInstanceServer () :This function find the server for the conference if a instance is currently active, this is called when a new SIP call arrives. It will search for the conference server for the conference in the confinstances table, if find the match, return the server for the conference, a NULL string is returned if no match found.
char *GetLeastLoadServer () :This function find the least loaded server from the conference servers, this is called when a new "ad hoc" conference is created via INVITE. It will search the database for the current load for all the conference servers and find the server with least users count.
char *GetServerHasCapacity () :This function find the server which still have enought capacity to satisfy the bandwidth requirement for a new conference, this is called when a new conference with known size is created via INVITE. It will search the database for the current load for all the conference servers and find the server with the maximum left capacity.
char *RunScheduleAlgorithm () :This function run the schedule algorithm to find the best server for the new conference instance. This is called when a new SIP call arrives to join a conference instance which hasn't been created yet. In this case, we will create a new instance for the conference, and then run the algorithm to find the best server for the conference instance:
Conference Server Future Extension
Platform: UNIX system, Sun 5.8
1. Setup mkdir sun-sipconf cd sun-sipconf 2. configure ..configure --with-mysql=/proj/irt-gc4/mysql/SunOS 3. make make sipconf
Updated: 12/14/2001 By Huwei Zhang