On link modeling, network emulation and its impacts on applications

In this blog post, I’ll guide you through the most important characteristics that define a ‘link’ in packet-switched networks, how they can impact your application, give some examples of real world parameters and how to use NetEm to emulate them.

In every packet-switched network, you will notice characteristics that are intrinsic to them and that varies depends on the communication channels being used. Such characteristics are bandwidth, delay (including jitter), packet loss, packet corruption and reordering.

Continue reading “On link modeling, network emulation and its impacts on applications”

Troubleshooting Java applications on OpenShift

Troubleshooting Java applications on OpenShift

What is it about?

OpenShift has seen a lot of traction with the release of its third version based on Kubernetes a couple of years ago. More and more companies after a thorough evaluation of OpenShift Container Platform (OCP) have built an on-premise or in the cloud PaaS. With the next step, they have started to run their applications on OCP. One of the important aspects of running applications in production is the capacity of quickly restoring services to the normal service level after an incident followed by the identification and the resolution of the underlying problem. In this respect, I want to present in this blog a few approaches for troubleshooting Java applications running on OpenShift. Similar approaches can be taken with other languages.

Debugging applications during development phase can be done thanks to features like:

  • Debug mode for resolving issues during startup.
  • Port forwarding for connecting an IDE like JBDS to an application running in a remote container and debugging it with breakpoints and object inspection.

This has been presented in blogs like here and here.

In this blog, on the contrary, I want to focus on troubleshooting applications in production and to cover things like capturing heap and thread dumps, resource consumption per thread. These are techniques that have more than once been helpful in the past for resolving deadlocks, memory leaks or performance degradation due to excessive garbage collection for instance.

Let’s get into the heart of the matter!

Continue reading “Troubleshooting Java applications on OpenShift”


A microservices example: writing a simple to-do application

Microservices are becoming a new trend, thanks to the modularity and granularity they provide on top of advantages like releasing applications in a continuous manner. There are various platforms and projects that are rising which aims to make writing and managing microservices easy.

Keeping that in mind, I thought, why not make a demo application that can give an example of how microservices are built and how they interact. In this article, I will be building a small application using the Microservice Architecture (MSA).

The application will be a super simple To-Do management list. So, let’s have take a look at what we are going to build and how we are going to build.

Editor’s note: This article references Fedora, which is the upstream project for Red Hat Enterprise Linux (RHEL) — now free for developers. This tutorial should also work on RHEL, just replace ‘dnf’ with ‘yum’ wherever appropriate.

Continue reading “A microservices example: writing a simple to-do application”