Технический журнал Александра Хохлова

Инженерный журнал об инфраструктуре и backend

Заметки об IT и жизни. Docker, Go, инфраструктура и не только.

Личный инженерный журнал: инфраструктура, backend, домашняя лаборатория и накопленный практический опыт.

Последние публикации

Тестирование распределённых систем: уровни, границы, асинхронность

Тестирование распределённых систем: уровни, границы, асинхронность

Юнит-тесты не поймают то, что ломается между сервисами: несовместимый контракт, потерянное сообщение, гонку в eventual consistency. Как выстроить уровни для распределённой системы — юнит → интеграция (Testcontainers) → контрактные тесты (вместо хрупких e2e) → немного e2e, где тест-дубли ставить на границах, и как тестировать асинхронность и eventual так, чтобы тесты не были флаки. Стратегия, а не набор фреймворков

Streams, Lua и функции: программируемость Redis

Streams, Lua и функции: программируемость Redis

Redis умеет не только хранить, но и выполнять логику на сервере. Разбираем три способа программируемости: Streams с consumer groups (журнал сообщений с подтверждениями), Lua-скрипты и Redis Functions (атомарные серверные процедуры), плюс обзор модулей. Честно проводим границу Streams vs Kafka — где Redis Streams достаточно, а где нужна полноценная брокерная платформа.

Keycloak на практике: realms, clients, потоки, деплой

Keycloak на практике: realms, clients, потоки, деплой

От решения к практике: разворачиваем Keycloak 26.7.0 (Quarkus) в docker-compose с внешним PostgreSQL, разбираем анатомию realm (confidential vs public clients, redirect URI, realm- и client-роли, группы, client scopes), потоки authorization code + PKCE и client credentials, получаем первый access-token curl-ом к token endpoint и читаем реальный декодированный JWT (iss, aud=backend, exp, realm_access.roles). Realm-as-code через kc.sh export/import вместо click-ops, token lifespans и protocol mappers ролей.

Тестирование в разных языках: пирамида, Testcontainers, property-based

Тестирование в разных языках: пирамида, Testcontainers, property-based

Одна дисциплина — пирамида тестов, дублёры, property-based и реальные зависимости через Testcontainers — в Go, Java и Python на одном домене. Что идиоматично, чем различаются экосистемы и почему на настройках по умолчанию property-тест находит реальный дефект ненадёжно во всех трёх сразу

Свой auth или готовый IdP: когда брать Keycloak

Свой auth или готовый IdP: когда брать Keycloak

Не «как настроить Keycloak», а решение на уровень выше: когда вообще стоит брать готовый IdP вместо своего auth. Реальная цена «сделай сам» (восемь пластов — сессии, refresh, OAuth-флоу, MFA, passkeys, федерация — каждый отдельный проект и зона риска), что закрывает Keycloak, рамка «бай vs билд» (self-hosted vs managed Auth0/Cognito), РФ-угол on-prem и честная ops-цена stateful-сервиса

В работе

Ближайшие материалы, которые готовятся к публикации.

Безопасность

Авторизация: токены, сессии, refresh

Серия о сессиях и токенах: opaque vs JWT, ротация refresh, OAuth/OIDC, MFA и passkeys — от простого сервиса до многосервисной системы.

Kubernetes

Kubernetes на практике

Серия о реальной эксплуатации: control plane, планирование подов, автоскейлинг, сеть, хранилище и GitOps.

Архитектура

Строительные блоки system design: карта

Навигатор по блокам: фундамент, масштабирование, устойчивость, интерфейсы и сквозные оси — куда вести читателя.

Хранилища

Распределённые хранилища: карта

Карта серии о распределённых хранилищах: объектное, файловое и блочное, место S3 и HDFS.

Разделы

Основные направления сайта. Живые разделы с материалами идут первыми, новые направления ниже как задел на рост.

Базы данных

PostgreSQL, Redis, ClickHouse, MongoDB и другие системы хранения данных

54 статей +5

Архитектура

Системный дизайн, интеграционные паттерны, аналитика и инженерные trade-offs

40 статей +6

Безопасность

Изоляция и песочницы, hardening, модель угроз и практическая защита сервисов и рабочего окружения

10 статей +3

Сообщения

Kafka, NATS, RabbitMQ и практики построения асинхронных систем

32 статей +3

Go

Язык Go: паттерны, инструменты, практики

29 статей

Языки

Языки программирования как явление: теория вычислимости, выразительность, кросс-языковые сравнения и то, что стоит за синтаксисом

1 статей

Zig

Zig как современная замена C: философия, comptime, явные аллокаторы, C-interop и позиционирование среди системных языков

1 статей

Rust

Rust для сервисов, контейнеризация, observability и надёжная backend-разработка

6 статей

Kubernetes

Kubernetes, Talos, ArgoCD, GitOps и эксплуатация кластеров

3 статей

Performance

Низкая задержка и высокая пропускная способность: бюджет времени, транспорт, балансировка, пулы соединений

8 статей

Java

Java, JVM, контейнеризация, производительность и практики эксплуатации

12 статей

Инфраструктура

Proxmox, Terraform, Ansible, Vault, HAProxy, Angie, сети и базовые платформенные практики

10 статей

Наблюдаемость

OTEL, Vector, OpenSearch, VictoriaMetrics, Zabbix, логи, метрики и трейсы

2 статей

Docker

Контейнеризация, best practices, мультистейдж-сборки

7 статей

AI

AI для backend-инженера: LLM в проде, эмбеддинги и RAG, локальный инференс, tool use и AI-агенты.

1 статей

Инструменты

Рабочие инструменты инженера: Git от первого коммита до команды, настройка окружения, диаграммы как код (LikeC4).

3 статей

Скоро появятся

Scala

Функциональный backend на Scala 3: Cats Effect и ZIO, http4s, Akka/Pekko, Doobie и Quill, Spark и production-практики на JVM.

0 статей

C#

C# и .NET для backend: ASP.NET Core, async/await, доступ к данным, gRPC и messaging, упаковка, профилирование и эксплуатация.

0 статей

C++

Современный C++ для backend: корутины и Asio, CMake и пакетные менеджеры, HTTP-сервисы, профилирование и production-практики.

0 статей

Python

Python для backend, данных и автоматизации: типизация, async, веб-фреймворки, упаковка и производительность

0 статей

TypeScript / Node

TypeScript и Node.js для backend: типовой слой, event loop, веб-фреймворки, данные, упаковка и рантаймы (Node/Deno/Bun)

0 статей

Игровые серверы

Боты, античит и эксплуатация игровых серверов со стороны оператора и комьюнити: серверные AI-боты, детект читов, честная игра и наблюдаемость

0 статей

Мобильные клиенты

Бэкенд для мобильных приложений: авторизация и хранение токенов, push-уведомления, API и BFF, offline-first и синхронизация

0 статей

От кода до прода

Сквозные капстон-проекты: собираем реальный сервис через весь стек — код, данные и события, контейнеры и CI/CD, Kubernetes, наблюдаемость и эксплуатация

0 статей

Фото и игры

Личное вне IT: фотография (Canon, Nikon, Sony), история игровых проектов и турниров, как всё это менялось со временем

0 статей

Хранилища

Распределённые хранилища: объектное хранилище и S3, реализации после MinIO, HDFS, построение своего CDN

0 статей