Don't put all your eggs in one container

Day 1 /  / Track 4  /  RU / For practicing engineers

Containers are so good to run microservices. Even inexpensive cloud instance can run many nowadays. But why your services don't start, work slow and die in silence? Proper diagnostic tools and newer Java clarify and vanquish that.

Microservice architecture and containerization have become the standards of modern application development. The challenges that developers face today are different from the problems that we used to solve earlier. Creators of the Java runtime respond to this with the appropriate functionality in the JDK. For example, an inexpensive cloud instance can be quite powerful. And it runs a bunch of containers. Then JVMs running in different containers compete for instance resources. Starting from Java 10, virtual machines know how to live in peace, this work has continued in Java 11.

On the other hand, you now need to choose which base image to use. This includes the choice of operating system and Java runtime. OS images vary greatly in size and have their own characteristics, which must be taken into account. Java runtime is also for every taste now. And even within the OpenJDK framework, assemblies from different companies are available with different functionality and size. And you can create a custom runtime image.

We will consider the practical application of Java 11 functionality in a container environment typical for popular frameworks.

Dmitry Chuyko

Dmitry Chuyko is a performance engineer at BellSoft, which is among the top 5 contributors to OpenJDK. Before joining BellSoft, Dmitry programmed in Java, and then worked on Hotspot JVM in Oracle. After all, previous experience with Java has shown that the most interesting problems in applications get their solutions in the base platform. Currently Dmitry mostly optimizes OpenJDK for ARM64, the company even implemented its own JEP 315 on Java 11 on this topic.

BellSoft releases and supports Liberica JDK — a verified distribution of OpenJDK. Liberica is available in the form of binary assemblies, installers and container images for different operating systems and processors. Therefore, now the focus of attention is the work of various versions of Java in containers on ARM and x86.