Measure thrice and cut once, or what to look for when designing microservices

Microservices is a common buzzword these days and everyone wants them just because "I've heard it is cool and modern". It became a de facto standard for the new applications, although not everyone understands what are the real benefits and disadvantages of Microservices architecture. During my career I've seen many implementations that were far from ideal, therefore I decided to write this article in the hope that it may help you to avoid some of the common mistakes.

Continue Reading →

Orchestrating backend calls with AWS Step Functions

Couple of months ago I was asked to design and implement a new feature for one of the customer's applications that involved calls to 3rd party services, including on-premise ones, and orchestration of those calls. The application I am talking about is hosted on AWS and implemented using AWS Serverless stack (Lambda, DynamoDB, Glue, etc). In this article I will explain the proposed solution as well as its pros, cons and things to be careful about, especially if you work with large enterprises. Looking ahead, I can tell that this problem has been solved using AWS Step Function in a tandem with AWS API Gateway and Lambdas.

Continue Reading →

Databases Beyond The Data: Part 3. Closer look at relational indexes

It's been a while since I published my previous article from this series, so I decided that it is a perfect time to catch up. Today we are going to talk about one of the oldest and most commonly used types of databases - relational ones. Relational databases have been around since the late 60s - early 70s, long time before I was born, and they remain the most commonly used type of databases even today. It is hard to find a developer who has never worked with SQL or relational DBs, but not many understand how they work under the hood, therefore, our goal today is to fix that.

Continue Reading →

Potential pitfalls with DynamoDB

Amazon DynamoDB has been around for quite a while and it became a standard for many AWS architectures. Amazon positions this database as a universal tool that is able to solve almost any problem, with only minor exceptions. As a result, it became a "no-brainer" choice for many people, and I get it! They admire DynamoDB for its simplicity, out-of-the-box scalability, single milliseconds response time, cost and other useful features. However, we should always be careful as the "silver bullet" for databases has not been invented yet. So, in this article we are going to discuss some hidden traps which you can fall into with DynamoDB if you don't choose it carefully.

Continue Reading →

Databases Beyond The Data: Part 2. How NoSQL databases work and when to use them

In the previous article (Databases Beyond The Data: Part 1) we discussed an example of in-memory index used in Bitcask and the way it works. We spoke about HashMap implementation, compaction and merging process, disaster recovery and use cases. Today we are going to continue our discussion and review an internal organization of more advanced NoSQL databases, including their indexes, performance optimization techniques, pros and cons of such DB types, and their application areas. However, before we get started, make sure to check the first part of this article, because we are going to assume that you know all the details.

Continue Reading →

Complete multi-tenant architecture guide with Inversion of Control

About a year ago I was asked to join one quite interesting project with the task to help the project become sustainable in the long term. The project was developed within extremely limited time, resources and, due to internal politics, with almost no support from the customer's organization. It had many issues, but there was one that caught my attention, this problem was a presence of different stakeholders who represented different business units and all of them had their own requirements. Moreover, new stakeholders kept emerging with new requests. It was quite obvious that to make this thing work in the long run we had to come up with some kind of separation to prevent unrelated requirements from affecting each other. In this article I am going to explain the principle that I used, together with code examples and DevOps practices similar to those used on a project, so buckle up and let's get started.

Continue Reading →

Running AWS Lambda written in Java with Docker

To make 2020 a little bit less creepy than it was AWS has announced Container Image Support for AWS Lambda. That’s one small step for AWS, but one giant leap for everyone who uses Lambda on a daily basis. First of all, they increased container image size from 250 MB to 10 GB which opens completely new possibilities, for instance, we can make data science models serverless now. Container Image Support also allows developers to pack their code into containers and deploy it using Container registry. It is awesome, but the biggest benefit to me is that we can now run Lambdas locally without any additional tools or magical rituals! If you are unfamiliar with AWS Lambda please check AWS official documentation. In this article I will demonstrate how it works in practice, so let’s get started!

Continue Reading →

Databases Beyond the data: Part 1. How in-memory DB indexes work

During the whole history of humanity people were collecting, storing and organizing information of some kind. It all started with the ancient cave painting and evolved into modern distributed data storages that operate at petabyte scale. These are very different examples, but they both serve two basic purposes, namely storing and retrieving the information. Cave paintings evolved into manuscripts, then manuscripts evolved into printed books, which were stored in libraries, and every person coming to a library can get a book based on the request. Even though databases are much more complex than libraries, they serve a very similar purpose. They organize, store and provide data based on request. In this series of articles we will review how databases store the data, how the data is organized, what is the real difference between different database types and how they are used in practice. With this said, it is time to begin.

Continue Reading →

The essence of Machine Learning in one example

During my career I worked with many programming languages, paradigms, design principles, architectures, etc., however, machine learning has always been an unknown and scary territory for me, so a couple of months ago I decided to figure out what this machine learning hype is all about. My good friend and colleague Jonathan Rioux, who is head of Canadian Data Science practice in EPAM Systems, recommended me to start with a free course provided by Fast.ai, and I followed his advice. To be frank, initially I was a bit sceptical about free courses as usually they do not provide much value, but these guys surprised me a lot. This resource provides tons of well structured information and gives an understanding of quite complex topics! When I started writing this article I set myself a goal to explain how machine learning works under the hood, and decided to follow an example established by fast.ai, so I will base my explanation on the problem of handwriting recognition. I have a very deep connection with this problem as it used to be a topic of my PhD research and I dedicated more than a decade of my life to it. But, before we start solving the problem we need to understand why it is that so difficult to recognize handwriting and what tools we can use.

Continue Reading →

Let the story begin!

Let's get started

This is my first post in my first blog ever. So, to make a quick introduction I am going to set some rules that I am going to follow.

First of all, this blog is about technologies and everything around them. There are many good software developers, DevOps engineers, business analysts, quality assurance engineers, etc., who are focusing solely on their area of interests or expertise, but to advance your career tech itself (or narrow the focus area) is not enough. Technologies are not standalone, they live with people, who are quite complex creatures. So, you may also expect topics about technological mindset, business aspects of technologies, corporate politics, people relationships, etc.

Initially, I planned to write posts to explaine complex things in a simple language, but then I realized that I want to go a bit deeper from time to time, so I am going to differentiate my articles. Complex articles will be categorized as “Learning” and marked with the “Advanced content” tag.

I decided to create a possibility for you to share your thoughts and provide feedback in the comments. However, I want you to remember that power comes with responsibility, so please do not write aggressive, abusive, racist and etc. comments, otherwise you will be banned.

Also, I need to warn you... English is my third language, so the text can be a little rough to read, but I will do my best to become a better writer. I promise!

With this said, let’s the story begin!