Upload
carlosjgf
View
414
Download
8
Embed Size (px)
DESCRIPTION
NkSIP: The Erlang SIP Application Server
Citation preview
NKSIPTHE ERLANG SIP APPLICATION SERVER
1
What is NkSIP?
An open-source, scalable, easy to use
and (soon) distributed
Erlang SIP application server
2
A bit of background
Emergency Coordination Centers
3
Our’s visionA communications product you can use as cloud-based, on-premises or any combination of local/remote sites and cloud providers.
The only operator’s interface for voice/data/video is the browser. The web application connects to any local cluster if available, or directly to the cloud if none is up.
Self-healing, peace of mind, dev-ops friendly. If a node goes down in any of the local clusters, there is no hurry in repairing it. Even if the full cluster goes down, operators connect automatically to another one or directly to the cloud.
The specific client application should be developed easily, in a few months, without special distributed programming abilities.
4
First approach
Distributed Erlang/OTP core
NoSQL Database (CouchDB -> Riak)
HTML5 client, websockets, WebRTC
Freeswitch
5
Erlang / OTPLanguage, environment and best practices developed by Ericsson from late 80s
Building critical, highly available systems
The secret sauce of WhatsApp, RabbitMQ, Ejabberd, Riak, CouchDB…
Incredible simple (BUT functional)
Building distributed applications is NOT, even with Erlang
6
Erlang / OTP
Lightweight concurrency
Asynchronous communication
Process isolation
Continuous evolution of the system
Errors will happen: ”Let it crash”
7
Erlang / OTPAPPLICATION
SUPERVISOR
WORKER
8
Erlang / OTP
APPLICATION
SUPERVISOR
WORKER
NODE1 NODE2
9
First approach
Distributed Erlang/OTP core
NoSQL Database (CouchDB -> Riak)
HTML5 client, websockets, WebRTC
Freeswitch
10
We need SIP
OpenSIPS, Kamailio, Mobicents…
… they don’t really fit.
Freeswitch was not enough
11
Another SIP product?Existing products are either too complex to integrate into a distributed application server (Kamailio, Mobicents) or too high-level to fully use all SIP’s potential (Freeswitch, Asterisk).
SIP is a very complex protocol, but most of this complexity has no added-value and should be hidden from the developer. On the other hand, SIP concepts are actually easy. No product clearly maps SIP concepts to the application.
Implementing new RFCs is currently a painful process.
SIP routing is at the very heart of any multimedia solution. Wouldn’t it be nice to have full control of it?
12
NkSIP’s visionAn open source tool to develop any kind of SIP application (NkAPPs), specially focused on highly available, distributed and scalable SIP applications.
Each NkAPP application decides what callback functions to implement. Very few for a simple, standard behavior. Many of them for fine-tuned or low level behaviors.
NkSIP takes care of all the details: retransmissions, transactions, authentication, dialogs, sessions, etc.
All SIP applications are similar from NkSIP’s point of view: UACs, UASs, proxy servers, B2BUAs, SBCs, load testers… why a different box for each one?
13
NkSIP’s visionNkSIP does NOT try to emulate a PBX. No dial plans. No extensions. Only pure SIP. You need to now what INVITE and BYE means to use NkSIP, but don't need a deep understanding of the details.
Implementing new RFCs should be easy and natural. NkSIP offers a rock solid core, written from scratch core to develop distributed, highly available and scalable systems. It has a hierarchical plug-in system to develop new functionality without having to modify the core or other base plugins.
The Erlang ecosystem is the perfect fit for this kind of product. You can run any number of SIP applications on a NkSIP cluster, using Erlang but (soon) also using Javascript, Lua, Java, or any other language capable of receiving a JSON over a socket connection.
14
Current featuresFull support for all defined SIP methods: PRACK, INFO, UPDATE, SUBSCRIBE, NOTIFY, REFER, PUBLISH and MESSAGE, as UAC, UAS and Proxy.
Registrar and Event State Compositor (using the RAM built-in store or any other external database).
Stateful proxy servers with serial and parallel forking. Stateless proxy servers, even using TCP/TLS.
IPv6 support. NkSIP can connect IPv4-only with IPv6-only hosts.
Support for NAPTR and SRV location, including priority and weights.
Support for events, reliable provisional responses (100rel), session timers, path, service route, outbound and GRUU.
15
Current featuresAutomatic outbound registrations and timed pings.
Dialog and SDP media start and stop detection. SDP processing utilities.
UDP, TCP, TLS, SCTP and WEBSOCKETS transports, capable of handling thousands of simultaneous sessions.
Robust and highly scalable, using all available processor cores. Currently is able to process 10.000 registrations/sec or 4.000 call setups/sec (INVITE+ACK+BYE) on a 4-core i7 machine.
A written from scratch, fully typed Erlang code easy to understand and extend. Unit tests cover nearly all of the functionality. Few external dependencies.
Hot, on the fly core and application code upgrade. 16
17
18
Plugin systemMost complex functionality have been extracted into plugins: Registrar, PRACK, Outbound, etc.
Rich set of callbacks available.
The core remains simple.
Each plugin adds API functions and callbacks for your application (and other, higher level plugins).
Each NkAPP can implement a different set of plugins. Can even change them on the fly.
Zero added latency, even with many plugins.19
Pending features
Distribution based on the Dynamo model.
Other languages for NkAPPs (Node.js, Lua, Python…)
More RFCs and Event Packages
IMS
20
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
Node1
16 17 18 19 20
21
Ip1 Ip2 Ip3 Ip4
Router / Gateway
Node1
Router / Gateway
Node2 Node3
22
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
Ip1 Ip2 Ip3 Ip4
Node1
Router / Gateway
Node2 Node3
23
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
Ip1 Ip2 Ip3 Ip4
node2> nksip_admin -join node1node3> nksip_admin -join node1
1 4 7 10 13
16 19
Node1
Router / Gateway
2 5 8 11 14
17 20
Node2
3 6 9 12 15
18
Node3
24
Ip1 Ip4 Ip2 Ip3
1 4 7 10 13
16 19
Node1
Router / Gateway
2 5 8 11 14
17 20
Node2
3 6 9 12 15
18
Node3
node2> nksip_admin -remove node1
25
Ip1 Ip4 Ip2 Ip3
1 47 1013 16 19
Node1
Router / Gateway
2 5 8 11 14
17 20
Node2
3 6 9 12 15
18
Node3
node1> poweroff
26
Ip1 Ip2 Ip3 Ip4
NKCOREERLANG DISTRIBUTED SDN/NFV APPLICATION SERVER
27
Another application server?NkSIP offers a fresh approach to the development of applications, and it has very powerful tools, but is focused on SIP.
However, NkSIP could behave as a generic high-capacity, low-latency message processing engine.
Many concepts and technology solutions from NkSIP are applicable to many other protocols: REST, Diameter, MSRP, XMPP, DNS, DHCP, Mail, OpenFlow…
There is no easy to use, fully distributed, heavy-load open source application server out there.
This looks a lot like an SDN/NFV framework!
28
NkCORE’s visionYou start any number of control nodes, and install any number of user applications (NkAPPs) on the cluster.
Incoming messages (in a broad sense: SIP, REST request…) are sent to a specific control node and triggers the call of specific application callbacks. Applications are written using Javascript, Lua, Java, etc.
Many modules are available, offering tools and semi automatic processing of messages: SIP (NkSIP), Web (NkREST), DNS, DHCP, Diameter, OpenFlow,etc. Each one adds new callbacks and APIs available to the application. Some of them offer additional optional plugins (i.e. event support packages for SIP).
Many common functionality is available: configuration, cluster management, distributed database, network transport management, storage, dns, logging, authentication, roles, etc.
29
NkCORE’s visionYou also start any number of worker nodes. They don’t need to have Erlang, only Docker.
The NkAPP can program the scheduling of tasks (i.e, 10 instances of Freeswitch, 5 instances of a node.js application, etc.), and NkCORE selects the worker nodes and downloads and starts and monitors the Docker processes in selected ones.
Control nodes route specific traffic to any of the workers nodes, and offers network functionalities to the application: firewall, load balancer, VPNs, VLANs… (using Openvswitch).
NkCORE offers easy-to-use APIs for each type of task, and can act as a proxy or B2BUA, transparent or not. The application doesn’t even need to know that it is speaking to several different instances of the processes.
We plan to support many common used packages:
Media servers (Asterisk, Freeswitch…) and XMPP (Ejabberd…)
NoSQL (Redis, Riak, CouchDB…) and SQL databases (MySQL, PostgreSQL)
Distributed Storage (Ceph)
Mail Servers
…
30
Cont
rol N
odes
Router / Gateway
Node.JS Node.JS
Python
Node.JS Python
Freeswitch Asterisk
Node.JS Node.JS
Python
Node.JS Node.JS
Python
Wor
ker N
odes
Storage Storage
Erlang Erlang Erlang
Routing Routing Routing
Docker instances
Erlang code
Native code
31
NkAPPs
NkCORE NkCORE NkCORE
32
Expected featuresThe applications are in full control not only of the business logic, but also of the network, the storage and the related processes (data bases, media servers…)
Hot code loading (NkCORE itself, modules and user applications). Hot relocation of external processes.
NkCORE offers a everything-as-a-service model to the applications (Freeswitch, DNS, Riak, …), even in local. Hybrid or hierarchical cloud model. Multi-cluster management.
Allows applications to become highly available and scalable very easily.
33
Thank you
Carlos González Florido
https://github.com/kalta/nksip
@carlosjgf34