Composite Container Patterns in K8S From a Developer’s Perspective

Building complex container-based architectures is not very different from programming in terms of applying design best practices and principles. The goal of this article is to present three popular extensibility architectural patterns from a developer's perspective using well-known programming principles.

Let's start with the Single Responsibility Principle. According to R. Martin, "A class should have only one reason to change." But classes are abstractions used to simplify real-world problems and represent software components. Hence, a component should have only one reason to change over time. Software services and microservices in particular are also components (runtime components) and should have only one reason to change. Microservices are supposed to be a single deployable unit, meaning they are deployed independently of other components and can have as many instances as needed.

Time Series Analysis: VAR-Model-As-A-Service Using Flask and MinIO

VAR-As-A-Service is an MLOps approach for the unification and reuse of statistical models and machine learning models deployment pipelines. It is the second of a series of articles that is built on top of that project, representing experiments with various statistical and machine learning models, data pipelines implemented using existing DAG tools, and storage services, both cloud-based and alternative on-premises solutions. This article focuses on the model file storage using an approach also applicable and used for machine learning models. The implemented storage is based on MinIO as an AWS S3-compatible object storage service. Furthermore, the article gives an overview of alternative storage solutions and outlines the benefits of object-based storage.

The first article of the series (Time Series Analysis: VARMAX-As-A-Service) compares statistical and machine learning models as being both mathematical models and provides an end-to-end implementation of a VARMAX-based statistical model for macroeconomic forecast using a Python library called statsmodels. The model is deployed as a REST service using Python Flask and Apache web server, packaged in a docker container. The high-level architecture of the application is depicted in the following picture:

Time Series Analysis: VARMAX-As-A-Service

VARMAX-As-A-Service is an MLOps approach for the unification and reuse of statistical models and machine learning models deployment pipelines. It is the first of a series of articles that will be built on top of that project, representing experiments with various statistical and machine learning models, data pipelines implemented using existing DAG tools, and storage services, both cloud-based and alternative on-premises solutions. 

But what is VARMAX and statistical models in general and how are they different from machine learning models?

Multi-Threading and Spring Transactions

As developers, we are used to applying the @Transactional annotation provided by the Spring framework and rely on the mechanisms implemented by the framework for transaction management. But is this enough?

Well, the answer is clear: No. 

Concatenating Strings in Java 9

Have you ever had the need to build a comma-separated list of values from a list or an array in Java or wanted to create a file path using concatenated folder names and a file path delimiter? Well, in the article Cocatenating Strings in Java 8, I have described a convinient way to use Java 8 APIs to do the job.

This not only reduces your development time and prevents additional errors, but it also let's you write more readable and understandable code. But what exactly happened since Java 9 was released, and does it apply to the code presented in the cases described in the aforementioned article.

7 Myths About Web Services

Despite the popularity of SOA and Microservice Architectures, some technological and implementation details are often missunderstood or incorrect interpreted. In this article, we will review seven facts about Web Services that can help developers to better understand the concepts and also to better prepare for interview questions if needed. 

You may also The HTTP Series (Part 1): Overview of the Basic Concepts.

HTTP Is Absolutely Required for RESTful Services

HTTP is not formally required for RESTful web services, but if HTTP methods are used, their formal meaning should be strictly followed so that without additional effort the clients can understand the API (e.g. do not use POST to update data, it is supposed to only create resources and is not idempotent by nature).