From openSIPS

Development: NewDesignRequirements

Development -> New Design -> Requirements

Table of Content (hide)

  1. 1. Fault Tolerance and Redundancy
  2. 2. Topology Hiding
  3. 3. Scripting
  4. 4. Application Layer
  5. 5. Message processing
  6. 6. Asynchronous processing
  7. 7. Load Balancing and Memory Design
  8. 8. Documentation
  9. 9. Dynamic Multi-domain

1.  Fault Tolerance and Redundancy


2.  Topology Hiding


3.  Scripting


4.  Application Layer

Think about hybrid multi-process multi-threaded server model (http://httpd.apache.org/docs/2.2/mod/worker.html) for providing high performance and stability.


5.  Message processing


6.  Asynchronous processing

More details on this: The whole idea is to concentrate all waits in a single point (like you do with a select while waiting for multiple TCP connections) - it is not a serial wait that may lead to idle time (because of the serialization), but a parallel approach where you are waiting in the same time for the termination of any I/O (reading a message from the net, a finished DNS, a DB response).

Just to give an example: let's assume we have 1 process

1) current design:

    time T - a message is read from network
    t+1 - a DB is invoked
       ---- idle ------
    t+3 - reply from DB
    t+4 - done with the message
    t+5 - read the next one

2) new design

    time T - a message is read from network (reactor gets indication 

from the network socket)

    t+1 - a DB is invoked (context is suspended and a new socket is 

added to the reactor for waiting the DB reply)

    t+2 - a second message is read from network (reactor gets again 

indication from the network socket)

    t+3 - second message is done
    t+4 - reply from DB (reactor get indication from the DB socket) -  

context is restored for the first message

    t+5 - done with the first message

So, i the same amount of time, you use all the time for computing instead of idle I/O and you can process more traffic.


7.  Load Balancing and Memory Design


8.  Documentation


9.  Dynamic Multi-domain

Retrieved from https://www.opensips.org/Development/NewDesignRequirements
Page last modified on October 10, 2014, at 03:18 PM