strace для отладки: находим баги в проде за 5 минут
Выбор логгера в Node.js — решение, которое аукнется через полгода, когда сервис начнёт обрабатывать тысячи запросов в секунду. В 2026 году два главных кандидата — Pino и Winston. Оба поддерживают…
50 постов
Выбор логгера в Node.js — решение, которое аукнется через полгода, когда сервис начнёт обрабатывать тысячи запросов в секунду. В 2026 году два главных кандидата — Pino и Winston. Оба поддерживают…
Горутины — одна из главных суперсил Go. Лёгкие, дешёвые, запускаются за микросекунды. Но именно эта лёгкость создаёт ловушку: забытая горутина не падает с ошибкой, а тихо висит в памяти, пока сервис…
Накатил приложение на сервер, написал systemd-юнит, делаешь systemctl start lenec.service, а в ответ:Job for lenec.service failed because the control process exited with error code. See "systemctl…
Гавриил Барсуков Postgres падает не от количества SQL-запросов и не от размера базы. Чаще всего у людей в проде он начинает выдавать вот это:FATAL: sorry, too many clients alreadyСообщение прямое: достигнут лимит…
Зоя Хомякова Запускаешь dev-сервер большого проекта, и через секунду в консоли:Error: ENOSPC: System limit for number of file watchers reached, watch '/path/to/project'Скажу честно: к самой ENOSPC (no space) это…
Зоя Хомякова Делаешь git push, а в ответ:git@github.com: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository…
Олег Барсов Запускаешь npm run dev, а вместо знакомого ready on http://localhost:3000 получаешь:Error: listen EADDRINUSE: address already in use :::3000Порт 3000 уже кем-то занят. Чаще всего это твой же…
Камилла Куницына Раскатывать схему БД без остановки сервиса — это не магия и не специальный фреймворк. Это набор правил: сначала добавляем, потом начинаем читать и писать обратно совместимо, и только потом удаляем…
Игнат Хорьков Docker Compose — отличная штука, чтобы за пять минут поднять локально стек из приложения, базы и Redis. Но когда тот же compose.yml уезжает на продакшен сервер, у людей внезапно обнаруживается, что…
Игнат Хорьков Сертификат Let's Encrypt живёт 90 дней. Если ты один раз настроил его руками и забыл — через три месяца сайт встретит пользователей предупреждением о просроченном сертификате. Поэтому автообновление…
Игнат Хорьков На моём проекте Node-приложение слушает 127.0.0.1:3000, а наружу торчит nginx на 443. Так живёт уже несколько лет: обновления Node не трогают сертификаты, а правила лимитов и редиректов лежат рядом,…
Игнат Хорьков Дефолтный nginx обрабатывает тысячи RPS. Но когда трафик растёт, дефолты мешают: соединения к upstream пересоздаются на каждый запрос, буферы маленькие, сжатие отключено. Разберём параметры, которые…
Ваше Node.js приложение работает отлично на локалхосте, но в Kubernetes начинаются проблемы: поды рестартятся без причины, пользователи получают 502 во время деплоя, load balancer продолжает слать…
Pydantic v2 — это не косметический апдейт, а переписывание ядра на Rust. Валидация стала в 5–50 раз быстрее, API почистили, а старые паттерны из v1 местами сломались. Разберём, что изменилось, как…
Gitea Actions появились на стабильном уровне в Gitea 1.21 и за полтора года выросли до варианта, на котором я спокойно держу боевой CI. Расскажу, что это, чем отличается от GitHub Actions и где у…
Влада Барсукова Выбор базового образа — одно из первых решений при контейнеризации. От него зависит размер итогового image, количество CVE в сканере, время cold start и возможность дебага в проде. Три главных…
В 2026 году спор «Zustand или Redux Toolkit» — это уже не холивар фанатов, а практический выбор архитектуры. Оба инструмента зрелые, оба поддерживают TypeScript из коробки. Но подходят они для разных…
Node.js — однопоточный. Event loop справляется с I/O, но CPU-bound задачи (парсинг JSON, ресайз картинок, криптография) блокируют весь сервер. Модуль worker_threads даёт настоящие потоки с…
«Access to fetch has been blocked by CORS policy» — ошибка, которую видел каждый фронтенд-разработчик. Реакция обычно одна: поставить Access-Control-Allow-Origin: * и забыть. Но CORS — это не баг…
# Semantic versioning и автоматический changelog Версионирование — это не просто цифры в package.json. Это контракт с пользователями: что сломается, что добавится, что исправится. Когда проект…
Текстовые логи вида INFO: User logged in работают, пока сервис маленький. Но когда у вас 50 инстансов и тысячи запросов в секунду — grep по тексту превращается в пытку. structlog решает проблему:…
Если вы пришли в Rust из Python, borrow checker — это первая стена, в которую вы врежетесь. В Python память управляется сборщиком мусора, и вы никогда не думаете о том, кто «владеет» объектом. В Rust…
Микросервисная архитектура даёт гибкость, но усложняет отладку: один HTTP-запрос проходит через 5–10 сервисов, и без distributed tracing найти узкое место невозможно. OpenTelemetry — открытый…
Сборка Docker-образа в CI без кэша — это каждый раз npm ci с нуля, каждый раз скачивание всех зависимостей. На крупном проекте это 5-10 минут на каждый коммит. Layer caching и BuildKit cache mounts…
Redis из коробки — single-threaded процесс без встроенной отказоустойчивости. Если мастер упал, клиенты получают ошибки до ручного переключения. Sentinel и Cluster решают эту проблему, но по-разному:…
Infrastructure as Code давно стал стандартом, но выбор инструмента по-прежнему вызывает споры. Terraform с его HCL — проверенный лидер. Pulumi предлагает писать инфраструктуру на TypeScript, Python…
Каждый, кто деплоил больше двух сервисов в Kubernetes, знает боль: десятки YAML-файлов, которые отличаются только именем, портом и парой переменных окружения. Helm решает эту проблему — превращает…
Если вы пришли в Rust из Python, borrow checker — первая стена. В Python память управляется GC, и вы не думаете о владении. В Rust ownership — центральная концепция, гарантирующая безопасность памяти…
# Semantic versioning и автоматический changelog Версионирование — это не просто цифры в package.json. Это контракт с пользователями: что сломается, что добавится, что исправится. Когда проект…
SSH-соединение оборвалось — и ваш долгий процесс умер вместе с терминалом. Знакомо? tmux решает эту проблему раз и навсегда: сессии живут на сервере независимо от подключения. Но tmux — это не только…
Probes — это та часть k8s, где даже опытные команды регулярно ловят пятёрки и шестёрки. Liveness убивает живой pod в момент пика нагрузки, readiness не отдаёт трафик после рестарта секунд тридцать,…
Дмитрий Орлов HTTP создавался для request-response: клиент спрашивает, сервер отвечает. Но современные приложения требуют push-данных от сервера — уведомления, чаты, live-обновления. Три основных подхода: Long…
В моём опыте кластеры с GitOps-инструментами делятся на два типа: те, что начали с ArgoCD, и те, что начали с Flux. И раз в пару лет в команду приходит человек с предыдущим опытом и предлагает…
Дмитрий Орлов Апгрейд мажорной версии Postgres — отдельный жанр работы. Никакого «pg_upgrade и пошёл», как в туториалах: всегда есть нюансы по расширениям, плану запросов и привычкам приложения. Я в этом году…
Astro — фреймворк, который отправляет браузеру чистый HTML и ноль JavaScript по умолчанию. Интерактивные компоненты подключаются точечно — как «острова» в море статики. Это делает Astro идеальным для…
Когда впервые собираешь Go-приложение в Docker, обычно получаешь образ на 800 МБ: вся golang:1.23 внутри плюс твой бинарь на 20 МБ. И это работает, но вытягивать 800 МБ при каждом deploy и хранить…
Дмитрий Орлов Бэкап Postgres в k8s — это та тема, где много туториалов, но мало кто проверял restore. Я три раза попадал на ситуацию, когда бэкап был, скрипт pg_dump отрабатывал по cron, файлы лежали в S3, а…
Дмитрий Орлов Вы развернули Node.js приложение в Kubernetes через kubectl apply -f deployment.yaml. Работает. Теперь нужно развернуть то же приложение в staging с другими переменными окружения, другим количеством…
«Просто накатим миграцию ночью» — в боевом сервисе так себе план, особенно если у тебя пользователи в нескольких часовых поясах. Я набил несколько шишек с миграциями на горячих таблицах и хочу…
Игнат Хорьков Cloudflare Tunnel — простой способ опубликовать приложение, у которого нет публичного IP. У тебя домашний сервер, виртуалка за NAT, dev-стенд за корпоративным файрволом — Tunnel это легко решает. Я…
Ярослав Медведев В 2026 году спор «Zustand или Redux Toolkit» — это уже не холивар фанатов, а практический выбор архитектуры. Оба инструмента зрелые, оба поддерживают TypeScript из коробки. Но подходят они для разных…
Когда приложение в проде зависает или молча падает — первое, за что стоит взяться, это strace. Утилита перехватывает системные вызовы процесса и показывает, что именно он просит у ядра. Никакой…
Логическая репликация в PostgreSQL — механизм выборочного копирования данных между серверами на уровне отдельных таблиц. В отличие от физической репликации, которая передаёт WAL-сегменты целиком,…
База данных без бэкапа — это база, которую вот-вот потеряешь. Я делаю бэкапы Postgres на S3-совместимое хранилище уже несколько лет, и за это время восстанавливалась с них раза три-четыре. Расскажу…
Эльвира Соболева Передавать пароли через переменные окружения — привычно, но небезопасно. Любой с доступом к docker inspect видит все env в открытом виде. Docker secrets решают проблему: секреты монтируются как файлы…
Деплой новой версии — и часть пользователей получает 502. Kubernetes послал SIGTERM, а сервер оборвал соединения на полуслове. Graceful shutdown — обязательная часть production-ready сервиса:…
В каждый новый кластер k8s через две недели после старта приходит вопрос: «а почему этот сервис тормозит ночью?». И ты понимаешь, что ничего не видишь — ни логов, ни метрик, ни трейсов. Можно…
Дмитрий Орлов В 2024 году команда Astral (создатели ruff) выпустила uv — менеджер пакетов Python, написанный на Rust. За полтора года он дорос до стабильной версии и претендует на замену pip, pip-tools, virtualenv…
Когда приходишь в новый проект на k8s, первое, что бросается в глаза — это либо полное отсутствие resources у pod-ов, либо одинаковые requests/limits на всех контейнерах, скопированные из чужого…
Дмитрий Орлов