About Microservices, Containers and their Underestimated Impact on Network Performance
Nane Kratzke
arXiv e-Print archive - 2017 via Local arXiv
Keywords:
cs.DC
First published: 2017/09/14 (7 years ago) Abstract: Microservices are used to build complex applications composed of small,
independent and highly decoupled processes. Recently, microservices are often
mentioned in one breath with container technologies like Docker. That is why
operating system virtualization experiences a renaissance in cloud computing.
These approaches shall provide horizontally scalable, easily deployable systems
and a high-performance alternative to hypervisors. Nevertheless, performance
impacts of containers on top of hypervisors are hardly investigated.
Furthermore, microservice frameworks often come along with software defined
networks. This contribution presents benchmark results to quantify the impacts
of container, software defined networking and encryption on network
performance. Even containers, although postulated to be lightweight, show a
noteworthy impact to network performance. These impacts can be minimized on
several system layers. Some design recommendations for cloud deployed systems
following the microservice architecture pattern are derived.
### Contribution
The author conducts five experiments on EC2 to assess the impact of software-defined virtual networking with HTTP on composite container applications. Compared to previous container performance studies, it contributes new insight into the overlay networking aspect specifically for VM-hosted containers. Evidently, the SDVN causes a major performance loss whereas the container itself as well as the encryption cause minor (but still not negligible) losses. The results indicate that further practical work on container networking tools and stacks is needed for performance-critical distributed applications.
### Strong points
The methodology of measuring the performance and using a baseline performance result is appropriate. The author provides the benchmark tooling (ppbench) and reference results (in dockerised form) to enable recomputable research.
### Weak points
The title mentions microservices and the abstract promises design recommendations for microservice architectures. Yet, the paper only discusses containers which are a potential implementation technology but neither necessary for nor guaranteed to be microservices. Reducing the paper scope to just containers would be fair. The introduction contains an unnecessary redundant mention of Kubernetes, CoreOS, Mesos and reference [9] around the column wrap. The notation of SDN vs. SDVN is inconsistent between text and images; due to SDN being a wide area of research, the consistent use of SDVN is recommended. Fig. 3b is not clearly labelled. Resulting transfer losses - 100% means no loss, this is confusing. The y axis should presumably be inverted so that losses show highest for SDN with about 70%. The performance breakdown around 300kB messages in Fig. 2 is not sufficiently explained. Is it a repeating phenomenon which might be related to packet scheduling? The "just Docker" networking configuration is not explained, does it run in host or bridge mode? Which version of Docker was used? The size and time distribution of the 6 million HTTP requests should also be explained in greater detail to see how much randomness was involved.
### Further comments
The work assumes that containers are always hosted in virtual machines while bare metal container hosting in the form of CaaS becomes increasingly available (Triton, CoreOS OnMetal, etc.). The results by Felter et al. are mentioned but not put into perspective. A comparison of how the networking is affected by VM/BM hosting would be a welcome addition, although AWS would probably not be a likely environment due to ECS running atop EC2.