netcomposer
TRANSCRIPT
What is NetComposer?“A flexible, easy to use software platform designed to be
the core of next generation, scalable and highly available data centers.”
“A tool to build and operate distributed, massively scalable, network-centric applications, with a focus on uptime and
low latency, ruled as reactive systems and based on micro services.”
Core FeaturesScalable from one node to thousands of nodes.
Fault tolerant. No master, shared-nothing architecture.
Multi data center. Hybrid clouds. From a Raspberry Pi to big multicore machines.
Batteries included: distributed database, discovery, sophisticated network features, scalable storage and container orchestration.
Lightweight. Flexible. Incredibly easy to install and operate. Single image for all of the nodes.
Under load, on-the-fly updates of any part of the system. No service interruption.
What can I do with NC?SDN/NFV Platform.
Video/audio/chat UC system foundation.
Storage-as-a-service.
Docker orchestrator.
Microservices container.
Any other critical/distributed application.
Core LayerIt is the logical core of the system, in charge of managing the core services and starting and controlling the rest of nodes and services.
Included core services:
a distributed, low-latency powerful database, with eventually consistent, self-convergent and strong consistency modes, memory and disk backends, search engine, auto expiration…
DNS discovery.
Cloud and Bare Metal server provisioning.
Signaling protocols: SIP, XMPP, Matrix.
Bundled services like OpenFlow controller and Docker orchestrator.
Metadata servers for the software defined storage system (based on Ceph).
All core services are distributed and fault-tolerant. Hot code loading. Automatic load distribution.
User-defined services are also possible
Ceph Storage Controllers
NetComponser Core Services:CORE fault-tolerant coordinator
Distributed DatabaseDNS, DHCP, Server provisioning
SIP, XMPP, MatrixOpenFlow controllerDocker orchestrator
Router / Gateway / Internet
Core Layer
Access layer
Worker Layer
User-Defined Services
Access LayerThe access layer interfaces with the rest of the world, and provides network facilities, specific for each started service. It can send the requests to the core layer if its target is a core service (like SIP or OpenFlow) or directly to the worker that must manage that request.
Virtual IP groups. Each service can setup a group of IPs to be mapped to it. IPs remain active even after server failures from the access, core or worker layers.
Distributed ACLs and firewall. Each time a new service is started requiring firewall services, it is updated automatically.
Proxy and intelligent, service-aware load balancing services. The core layer keeps the list of mappings up to date, so that when a worker dies, the balancers are automatically updated.
Service-specific QoS management
Network metrics
It can be implemented with NetComposer nodes or using any Openflow compatible hardware or software switch.
Router / Gateway / Internet
FirewallProxy / LB
QoSFlow / Metrics
Core Layer
Access layer
Worker Layer
FirewallProxy / LB
QoSFlow / Metrics
FirewallProxy / LB
QoSFlow / Metrics
FirewallProxy / LB
QoSFlow / Metrics
SIP
RTP MediaHTTP
VIp1
VIp1 VIp2
VIp3
VIp3 VIp2
Worker LayerThe worker layer is made of any number of servers, managed from the core layer, and running inside docker containers.
The core layer is aware at any moment of the exact number of nodes, current load, running containers, etc., and it is able to schedule new containers to the best server.
Each server runs a small agent installed from the core layer, and can be updated on the fly. It also works as local DNS server for service discovery.
A special container is used to serve storage to the rest of containers, in a highly available, high performance scheme, using Ceph.
NetComposer is able to set up VxLANs automatically to connect containers running in different hosts, networks and data centers.
VXLAN
Core Layer
Worker Layer
Router / Gateway / Internet
Access layer
Containers Group
Ceph Disk
Ceph Disk
Container
Container
Container
Container
Container
Container Container
Container
DomainsDomains are the basic NetComposer management units. You can start any number of domains, that can be used for different applications, sets of applications or customers.
You work with the whole cluster as if it were a single computer. It does not matter if it has a single server or a thousand.
You start with a single configuration file describing your domains. You can start, stop or update most domain parameters and services in real time, under load, or while adding or removing nodes. You can use NetComposer’s CLI or the REST interface to manage your domains after the initial configuration.
You can associate with each domain the core services you want. You can add, modify or remove services in real time.
Core ServicesNetComposer offers a serie of core services for your domains. Each domain can use any set of different services.
All core services are cluster aware, distributed and highly available.
All core services have a REST interface that you can publish to the outside or inside networks, and have also a high-speed, low latency interface to other core services running inside NetComposer.
Core services are hierarchical. Some core services depend, modify or upgrade the functionality of lower level, more basic core services.
Core services’s code can be upgraded on the fly (as the rest of NetComposer).
You can develop your own core services that run inside NetComposer core layer nodes, or manage any other service using the Container Service or externally to NetComposer.
Core ServicesThe initial planned core services list include:
Distributed Database.
Distributed Storage.
Cloud and Bare Metal server provisioning.
Virtual IP/Port groups.
Firewall, load balancer, QoS, VLANs, VPNs and tunnels.
SIP/WebRTC Engine (registrar, proxy, B2BUA and media processing).
Openflow controller .
Docker container orchestrator.
Distributed DatabaseNetComposer includes and distributed, flexible database available as a service, for internal core services or your own services or external applications:
Highly available, allowing read and write operation even in case of node failures.
Disk and memory backends.
Three simultaneous operation modes:
Eventually consistent mode using Dotted Version Vectors.
Strong consistent mode based on using multi-paxos.
Easy to use, self-convergent DMaps.
Multiple, auto-generated secondary indices, usable in the three modes.
Simple, easy to use, utf8 and latin-1 aware query language for secondary indices.
Full support for auto-expiration of objects, with configurable resolution.
The distribute database service is based on the already released NkBASE project: https://github.com/Nekso/nkbase
Storage ServiceNetComposer uses Ceph to provide persistency services to other core services, user services (at the core layer or inside docker containers) and external applications.
It offers a redundant, scalable storage-as-a-service facility than can be consumed as virtual disks, with a S3-compatible interface or as a POSIX file system.
The core layer starts and manages a number of Ceph Monitors and Metadata Servers.
Any node of the cluster can export disks to the cluster. The NetComposer remote agent starts and manages the corresponding Ceph Object Storage Sevices.
NetComposer configures the Ceph cluster automatically, and manages the possible failures of monitors or metadata servers.
DNS server/discoveryNetComposer includes a high-performance DNS server, available to core services, user services or external applications.
NetComposer registers automatically started domain services and assigned IPs and ports. When a shutdown or failure is detected the entries are automatically removed from DNS.
As all other core services, it offers a full-blown REST interface to manage registrations and configurations parameters.
It can use NetComposer database as backend or any other user-supplied backend.
Cloud/Iron provisioningNetComposer includes all the tools for an automatic provisioning of nodes (for access, core or worker layers) on raw hardware, virtual machines or public clouds.
NetComposer has a minimal OS based on GNU/Linux which is deployable (hands off) into bare metal servers.
It offers auto updates with atomic rollbacks, distributed HA configuration, and auto join for the cluster.
It assures the QoS of the cluster resources for the different layers that works in it.
Network ServiceAccess layer nodes offer a full catalogue of software-defined network services to core services, user services or external applications. As the rest of core services, all management can be done through the CLI or REST interface.
NetComposer access layer nodes can provision dynamically sets of combination of IP/Ports, assigned to specific services. These IPs are activated on access nodes. When an access layer node failure is detected, another node “takes” the IPs belonging to the failed node temporarily. If the node is marked as permanent down, all the IPs are reorganized.
From the network or the service point of view, there is a single network element. All services are designed to be scalable and distributed, with automatic failover in case of node failures.
Available services include NAT, firewall, (intelligent) load balancer, QoS management, VxLANS, tunnels and VPNs.
Media ServiceNetComposer includes full SIP support which greatly facilitates the development of robust and scalable server-side SIP applications like proxy, registrar, redirect or outbound servers, B2BUAs, SBCs or load generators.
It also offers the tools to build distributed WebRTC applications, (using SIP over websockets or any other signaling protocol).
A Matrix (matrix.org) compatible server is also planned.
For the media processing, it is able to start and manage a number of Freeswitch instances. The offered REST interface shows a single, virtual media server. NetComposer takes care of sending the requests and RTP traffic to the right server, and failover in case of failures.
NetComposer SIP capabilities are based on the NkSIP project (https://github.com/kalta/nksip).
OpenFlow ControllerNetComposer includes a distributed OpenFlow controller, than can be managed through the REST interface or trough the high-speed internal services connector.
It can manage the internal OpenVSwitch virtual switches (that are otherwise automatically managed) or any external, OpenFlow compatible virtual or physical switch.
It is, as the rest of NetComposer Services, highly scalable and fault tolerant. It can manage thousands of switches.
Container ServiceNetComposer offers a distributed container service, initially focused on Docker. Containers run on the worker layer.
It is able to select the best node or group of nodes to run the selected container or group of containers. Network and storage services are automatically provisioned. Containers can be moved from one node to another transparently.
Integrating Kubernetes is being studied as an alternative.
Applications running inside containers can use all of NetComposer services through the REST interface of any of them, like the database, SIP, OpenFlow, etc.
NetComposer can connect containers running in different nodes to the same network using VxLANs.