Managing a network can be complex and full of headaches, especially when your resources are stretched thin. Auvik is creating a cloud managed network automation platform to simplify the complexities of managing network infrastructure. To deliver this vision, they turned to the Lightbend Platform to provide the reliability and scalability their solution needed, so that they could focus on creating value.
About Auvik Networks
Auvik Networks believes that enterprise networking is too complex. Unless you have a dedicated team of networking engineers, it's challenging to stay on top of the best practices for monitoring and securing your network, let alone actually configuring everything. This complexity can create an inflexible network that struggles to keep up with the latest trends. Auvik wants to make enterprise networking easier. The company’s cloud managed network automation platform dramatically simplifies the way you configure, monitor, and manage your network. Best of all, Auvik’s platform works with the network you already have.
Managing network devices is very cumbersome and old school. In order to make a change to a network’s configuration, an IT professional must log into each device via a command line interface (CLI), make the required changes, and hope that things work as desired in the end. This approach has not changed in twenty years, and it’s very analogous to the days of the mainframe or building applications in assembler – unnecessarily low-level and exceedingly painful.
Building a Solution
Given the Auvik team has a long history building network equipment for service providers, they know only too well the requirements that drive the need for a new class of enterprise network management tools.
Auvik is converting objectives, for example “I want to implement the best practice for VoIP Quality of Service”, into machine executable instructions, and is executing these instructions consistently in a heterogeneous network environment.
People need to be able to reason at a higher level when configuring enterprise networks - to focus on business requirements instead of technical requirements. The network automation platform should generate underlying rules and implement the solution.Marc MorinCEO, Auvik Networks
In a prior venture, the founders of Auvik faced a similar problem, in that they wanted to articulate business level objectives using a simple policy language. The team made a substantial investment to develop a proprietary policy language built in C++ and Java. Enabling the policy language required the creation of a system to evaluate the policy language and determine where and how to run rules. Even though the rules seemed simple when defined in English, implementing them correctly and consistently across a network infrastructure was a massively complex task.
At Auvik, the team wanted to ensure they had a solid, scalable platform to build on and starting from scratch in Java meant solving problems that other platforms have since addressed.
Their requirements narrowed down the field of potential platforms considerably; they liked Haskell, but not being a JVM language made it a no–go since it was very important that they be able to import and leverage existing libraries. They liked the idea of ERLANG’s Actor model too, but its requirement to run on a proprietary platform made that untenable.
The CEO of Auvik, Marc Morin, had previously discovered the Scala programming language from Lightbend. He’d built some small projects with it and loved how concise the language was. Since Scala is a JVM language and supports the Actor model, it seemed like the best fit. The team decided to develop the network compiler and application in Scala.
Within a couple of months, the team at Auvik had developed large components of their network automation platform in only a few thousand lines of Scala. A component that would have been 20,000 lines of Java code, could be implemented in 1,500 of lines of Scala code. After experiencing how easy it was to add features and functionality incrementally, the team knew they were working with the right tools.
Auvik’s new programming language - Network Programming Language (NPL) - enables people to articulate their requirements, and even create a DSL that enables putting together requirements in native Scala.
Marc commented, “Scala’s language features appear to be tailor made for our application. The biggest benefit on the network compiler side is the case…match statement, which makes expression matching a piece of cake,” - this is where the team saw the biggest code reduction.
In the enterprise networking world, there are many technologies at play – VLANs, routes, dynamic routes, ACLs, etc. Expecting an IT professional to develop a massively distributed system that encompasses hundreds of different nodes with numerous criteria, to write all the business logic, that covers all corner cases, in a mission critical situation, is an extremely challenging proposition!
Today, nobody wants to make a change to the network for fear of unknown repercussions. IT professionals have to:
- Understand the exact behavior of the current configuration
- Architect and define the change
- Deploy, test and hope the change doesn’t break anything else!
These professionals are expected to manage high-level requirements all the way down to machine code.
The NPL Language goes both ways. Users can not only build a rule such as “Block Git from Marketing”, but it can also take an existing configuration and reverse compile it such that it can see a configuration where users on the marketing subnet cannot access a certain IP address – and that IP address has a Git server on it.
The entire NPL tool chain would have been hundreds of thousands of lines of code, but now that number is measured in the tens of thousands with Scala. Auvik has appreciated a ten times reduction in code so far.
Auvik used Lightbend’s Akka - a toolkit and runtime for building highly concurrent, distributed, and fault tolerant event-driven applications on the JVM to handle the huge number of parallel operations and calculations that need to happen.
Furthermore, Akka’s built in scalability, clustering, and load balancing has proven to be useful due to the distributed nature of the Auvik solution, which is deployed in a hybrid cloud configuration. Once a customer signs up, they have the ability to manage, monitor, and configure their network environment through a cloud-based central User Interface built in Lightbend’s Play Framework - an MVC based web framework that focuses on developer productivity, modern web and mobile applications, and predictable, minimal resource consumption resulting in highly performant, highly scalable applications.
Akka’s concept of actors not being tied to threads is very appealing. You still need to use best practices but so far Akka has really simplified our architecture.Marc MorinCEO, Auvik
To achieve this distributed design, users download a virtual appliance that runs inside their network and does all of the network discovery, configuration, and other “intellectual property stuff”. The virtual appliance consists of a Linux VM with a Play, Akka, and Scala runtime that talks to the cloud servers, which are also running Play, Akka, and Scala.
The most impressive thing about Auvik’s network automation platform is the nodes in the field are just actor systems that communicate without IP professionals needing to do any major architecture work. A typical customer could have twelve branch offices, each one with at least one VM appliance, and each appliance would just automatically join the cloud, and start collecting statistics and pushing configuration data back and forth.
Auvik currently has fifteen developers spread throughout the full Lightbend stack of Scala, Akka, Play and CoffeeScript. The team is using the latest versions of the Lightbend Platform – Scala 2.10, Akka 2.2.x and Play 2.1.x to develop the network compiler, core system and user/interface management components of the Auvik network automation platform.
Inspired by this story? Contact us to learn more about what Lightbend can do for your organization.