The current (pre 2.0) OpenSIPS internal design is based on some concepts older than 7 years. At the time, the requirements were few (simple stateless UDP proxy) and the decisions were made accordingly. But with all the additions, both in SIP and functionality (like TCP/TLS, script manipulation, dialog support, external integration, etc), the existing design is not able to cope with the requirements and use-cases any more.
The issues that the new design tries to solve are:
- I/O blocking (transport, DB, applications)
- scaling with the hardware resources (I/O and parallel processing sync is a bottleneck with the current design)
- script writer must manually deal with low level functionalities (TM, dialog, NAT), instead of focusing on service logic
- horizontal scalability of both core and routing logic
- routing logic (as a custom language) has very limited non-SIP functionalities (integration with other applications, complex script processing, array/string manipulations, support for complex operations and data types) and requires additional skills from the user.
- routing logic is too tightly coupled with the SIP stack, making impossible to change it at runtime without restarting OpenSIPS
- cannot distribute the routing/control logic over multiple systems (to increase scalability)