OLTP, OLAP, stars, and snowflakes

Image for post
Image for post
Photo by Zdeněk Macháček on Unsplash

In the early days of business data processing, write operations to the database usually correspond to commercial transactions that occur: selling, placing orders with suppliers, paying employees’ salaries, etc. Transaction does not involve currency exchange, but the term transaction is stagnant, referring to a set of reads and writes that constitute a logical unit.

Even if the database started to be used for many different types of data annotations such as blog posts, actions in games, contacts in the address book, etc., the basic access pattern is still similar to processing business transactions. Applications usually use indexes to find a…

Logs and metrics tools

Image for post
Image for post
Photo by Shane Hauser on Unsplash

The ability to identify and troubleshoot an issue in a production system is critical. In this article, we will talk about a couple of tools that can help us understand what’s going on in a production Kubernetes cluster.


Observability is the ability to understand what is happening in a production system. We can deal with low-observability systems (inability to understand what is happening) or high-observability systems (where events and internal states can be inferred from the outside through tools).

Observability is an attribute of the system itself. Generally, monitoring is the operation of obtaining information about the current or past…

Restart flag, init, and supervisor processes

Image for post
Image for post
Photo by Pat Whelen on Unsplash

There are cases where software fails in rare conditions that are temporary in nature. Although it’s important to be made aware when these conditions arise, it’s usually at least as important to restore the service as quickly as possible.

When all the processes in a container have exited, that container will enter the exited state. A Docker container can be in one of four states:

  • Running
  • Paused
  • Restarting
  • Exited (also used if the container has never been started)

A basic strategy for recovering from temporary failures is that when a process exits or fails, it will automatically restart. …

Handling distributed transactions

Image for post
Image for post
Photo by Paweł Czerwiński on Unsplash

When everything is normal, the API composition and CQRS patterns can provide appropriate solutions for distributed queries.

However, maintaining the integrity of distributed data is complex. If you store all data in a single relational database and specify the appropriate constraints in the schema, you can rely on the database engine to maintain data integrity.

The situation is very different when multiple microservices keeps the data in isolated data stores (relational or non-relational). Data integrity is critical, but it must be maintained by code. The saga pattern addresses this concern.


Is the end of Docker?

Image for post
Image for post
Photo by Usman Yousaf on Unsplash

Kubernetes is deprecating Docker as a container runtime after version 1.20.

Docker as an underlying runtime is being deprecated in favor of runtimes that use the Container Runtime Interface (CRI) created for Kubernetes.

If you are an end-user of Kubernetes, it will not bring you much change. This does not mean the demise of Docker, nor does it mean that you cannot or should no longer use Docker as a development tool. Docker is still a useful tool for building containers, and the images produced by running docker build can still be run in your Kubernetes cluster.

In case you…

CQRS and API composition approaches

Image for post
Image for post
Photo by Dennis Kummer on Unsplash

When we have an application architected using microservices, there are several data strategies that can be used. One of the recommended approaches is to have each microservice owns its data store. This means that the overall state of the system will be distributed across multiple data stores, accessible only from their own microservices.

Most complex queries will involve data available in multiple databases. Every consumer can access all these microservices and aggregate all data to satisfy their queries. However, it is not ideal for several reasons:

  • Consumers have a close understanding of how the system manages data.
  • Consumers need to…

Software engineers with special skills

Image for post
Image for post
Photo by ThisisEngineering RAEng on Unsplash

Historically, companies have hired sysadmins to run complex systems.

This systems administrator approach involves building existing software components and deploying them to work together to produce a service. Then, the task of the system administrator is to run the service and respond to events and updates as they occur. With the increase in system complexity and traffic, the occurrence of incidents and updates has increased accordingly, the sysadmin team needs to grow to absorb the additional work.

The sysadmin model of service management has several advantages. For companies that decide how to run and configure services, this approach is relatively…

Twilio + Serverless + Amazon S3

Image for post
Image for post
Photo by Sigmund on Unsplash

It’s 2021 and you still want to talk about how to send a fax? Well, there are industries like real estate, healthcare, and banking that still rely heavily on fax.

In this article, we are going to build a simple service that will allow us to send faxes without a fax machine.


  • Twilio: We will be using Twilio programmable fax API. You need to have a Twilio account and a Twilio phone number with fax capability.
  • Serverless Framework: We are going to use this framework to be able to build a quick solution that can be deployed fast.
  • Amazon S3…

Using Ghostscript in an AWS Lambda function

Image for post
Image for post
Photo by Max LaRochelle on Unsplash

Serverless is the go-to technology these days to build simple and cost-effective services. We can also use it to run some experiments in the cloud without the need to spin up a server instance.

In this article, we are going to create a lambda function to join PDFs files. At first glance, it can look like an easy task to do. But it has some challenges when we need to run our code in a serverless infrastructure.


Fabricio Pautasso

Software Engineer

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store