SlideShare verwendet Cookies, um die Funktionalität und Leistungsfähigkeit der Webseite zu verbessern und Ihnen relevante Werbung bereitzustellen. Wenn Sie diese Webseite weiter besuchen, erklären Sie sich mit der Verwendung von Cookies auf dieser Seite einverstanden. Lesen Sie bitte unsere Nutzervereinbarung und die Datenschutzrichtlinie.
SlideShare verwendet Cookies, um die Funktionalität und Leistungsfähigkeit der Webseite zu verbessern und Ihnen relevante Werbung bereitzustellen. Wenn Sie diese Webseite weiter besuchen, erklären Sie sich mit der Verwendung von Cookies auf dieser Seite einverstanden. Lesen Sie bitte unsere unsere Datenschutzrichtlinie und die Nutzervereinbarung.
What is NkSIP?
An open-source, scalable, easy to use
and (soon) distributed
Erlang SIP application server
A bit of background
Emergency Coordination Centers
A communications product you can use as cloud-based, on-premises
or any combination of local/remote sites and cloud
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.
Erlang / OTP
Language, environment and best practices developed
by Ericsson from late 80s
Building critical, highly available systems
The secret sauce of WhatsApp, RabbitMQ, Ejabberd,
Incredible simple (BUT functional)
Building distributed applications is NOT, even with
Erlang / OTP
Continuous evolution of the system
Errors will happen: ”Let it crash”
Freeswitch was not enough
We need SIP
OpenSIPS, Kamailio, Mobicents…
… they don’t really fit.
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?
An 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?
NkSIP 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
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
language capable of receiving a JSON over a socket connection.
Full 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
Support for events, reliable provisional responses (100rel),
session timers, path, service route, outbound and GRUU.
Automatic outbound registrations and timed pings.
Dialog and SDP media start and stop detection. SDP
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.
Most 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.
Distribution based on the Dynamo
Other languages for NkAPPs (Node.js,
More RFCs and Event Packages
ERLANG DISTRIBUTED SDN/NFV APPLICATION SERVER
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!
You 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.
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.
You 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)
The 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
Carlos González Florido