Термин halting problem обычно вспоминают как «ту самую» теоретическую границу вычислений: нельзя написать программу, которая для любой другой программы и любого входа заранее решит, завершится ли вычисление или уйдёт в бесконечный цикл. Но если посмотреть на индустриальные системы — от микросервисов до агентных пайплайнов с LLM — то «проблема остановки» неожиданно перестаёт быть абстракцией. Она…
NFR Conflicts: 3 practical cases
Over time I noticed some typical contradictions between non-functional requirements (NFR). Let’s consider three typical cases of NFR conflicts I learned from practice. Security vs Ease of Use Security is a huge and ever growing concern these days. No surprise here – we live when IT-systems are unprecedentedly dependable. More and more activities occur in…
Max Performance of Nginx, PHP & PostgreSQL Chain
This blog post is the first in a series of articles on performance engineering (PE) research I did some time ago. I touched the topic of PE a bit in one of previous blog articles. This time it’ll be purely practical. The picture was generated by Nano Banana and contains pretty obvious errors. I decided…
Feature, Solution and Platform Engineering
This post would probably be longer than usual. I’ve been pondering the concept I’m going to cover in it for a while already. It all was ignited by the initiative to slice and dice workforce at the company I work now into a small, delivery oriented teams. The idea per se isn’t bad at all…
Mental Models for Performance Engineering
I’ve been tinkering with performance engineering (PE) as one of the areas of interest for a while lately. From experience I built up a few mental models / metaphors which help with reasoning about systems performance. Let’s get through these mental models for performance engineering one by one. The most significant achievement thus far was…
Unsettling story of proxy_next_upstream in Nginx
It turns out that there’s quite a bunch of people who bumped into a particular Nginx upstream handling behavior. Not that long ago I also joined the club. It usually manifests as unavailability of some service behind Nginx as a reverse proxy. Clients start to get “502 Bad Gateway” after some change in the service…
Tribute to the Blog of Uwe Friedrichsen
At the end of November last year I bumped into a blog which immediately captured my attention. I eagerly read during a few weeks after as the blog turned out to be a treasury of value =) Articles are nicely interconnected with each other, so it’s easy to fall into a rabbithole of great content…
How to manage CPU in Kubernetes and keep your foot safe
In today’s complex cloud-native landscapes, Kubernetes (aka k8s) stands as a pivotal technology that simplifies the management and orchestration of containerized applications. However, as developers and operators dive deeper into Kubernetes, it’s essential to understand how resource management within K8s operates, particularly regarding CPU requests and limits. This article aims to shed light on Kubernetes,…
Майндсет зрелого технического специалиста – 3 признака
За мою 15+ лет профессиональную карьеру в ИТ я общался с разнообразными командами разработки как лидер, участник и сторонний эксперт. Замечаю повторяющиеся психологические особенности, по которым можно условно поделить технарей на зрелых и не очень. Это эдакие “кризисы взросления”, через которые я проходил и сам. Сегодня посмотрим на три особенно ярких признака, характеризующих майндсет зрелого…
Signs of memory pressure in Linux
The question of “is my Linux system has enough memory?” sounds easy on the surface. It’s surprisingly cumbersome to answer when you dig deeper. Yup, free -m is not even a half of the story and there are all kinds of signs of memory pressure in Linux. First of all there’s vm.overcommit_memory kernel setting which…
