pages/masters.markdown
author Tero Marttila <terom@qmsk.net>
Mon, 10 Oct 2016 20:18:13 +0300
changeset 142 dbed5a455927
parent 141 0ebc46106159
child 144 775e3eab3f30
permissions -rw-r--r--
masters: spellfix refer
# Design and Implementation of the <a href="https://github.com/qmsk/clusterf"><tt>clusterf</tt></a> Load Balancer for Docker Clusters

### Author
Tero Marttila

### Submitted
Thesis submitted for examination for the degree of Master of Science in Technology at <a href="http://comnet.aalto.fi/">Aalto University Department of Communications and Networking</a>,

Espoo 10.10.2016

### Thesis supervisor
Prof. Raimo Kantola

### Thesis advisor
PhD. Pasi Sarolahti

## Seminar Presentation

Presented 08.10.2016 ([slides](https://mycourses.aalto.fi/pluginfile.php/292054/mod_folder/content/0/Marttila_071016.pdf?forcedownload=1)].

## Abstract

### Relation to a bigger picture
[Docker](https://www.docker.com/) uses the Linux container `namespace` and `cgroup` primitives to provide isolated application runtime environments, allowing the distribution of self-contained application images that can be run in the form of Docker containers.

Container platforms provide the infrastructure needed to deploy horizontally scalable container services into the Cloud, including orchestration, networking, service discovery and load balancing.

### Purpose
This thesis studies container networking architectures and existing Cloud load balancer implementations to create a design for a scalable load balancer using the [Linux IPVS](http://www.linuxvirtualserver.org/software/ipvs.html) network-level load balancer implementation.

The `clusterf` load balancer architecture uses a two-level load balancing scheme combining different packet forwarding methods for scalability and           compatibility with existing Docker applications.

A distributed load balancer control plane is implemented to provide automatic load balancing for Docker containers.

### Research method
The `clusterf` load balancer is evaluated using a testbed environment, measuring the performance the network-level Linux IPVS implementation.

The scalability of the `clusterf` load balancer is tested using Equal-Cost Multi-Path (ECMP) routing and [IPVS connection synchronization](http://www.linux-vs.org/docs/sync.html).

### Key results
The result is that the network-level Linux IPVS load balancer performs significantly better than the application-level HAProxy load balancer in the same      configuration.

The `clusterf` design allows for horizontal scaling with connection failover between IPVS load balancers.

### Practical implications
The current `clusterf` implementation requires the use of asymmetric routing within a network, such as provided by local Ethernet networks.

Extending the `clusterf` design to support deployment onto existing Cloud infrastructure platforms with different networking implementations would qualify   the `clusterf` load balancer for use in container platforms.

## Thesis

Pending publication.

In the meantime, refer to the [Presentation Slides](//static.qmsk.net/www/masters/clusterf-presentation.pdf).

## [The `clusterf` Load Balancer](https://github.com/qmsk/clusterf)

### Design
The architecture of the `clusterf` load balancer is shown in the Figure below.

<img src="//static.qmsk.net/www/masters/clusterf-architecture.svg" style="width: 100%" />

### Implementation
The Go implementation of the `clusterf` load balancer control plane is available on GitHub: 

> [`go get github.com/qmsk/clusterf`](https://github.com/qmsk/clusterf)