Ваш сервис спокойно живёт неделями: графики ровные, алерты молчат, релизы проходят без сюрпризов. А потом в три часа ночи под нагрузкой всё начинает разваливаться с ошибкой: too many open filesНа Go это может выглядеть так:http: Accept error: accept tcp 0.0.0.0:8080: accept4: too many open files; retrying in 5msНа Java — так:java.io.IOException: Too many open files at sun.nio.ch.FileDispatcherImpl.init0(Native Method)На Python — так:OSError: [Errno 24] Too many open filesНазвания разные, …
Прод. Сервис на Go, 80k RPS, p99 latency 12 мс. Читаю Phoronix, новость: "io_uring быстрее epoll в 2-4 раза". Решаю переписать сетевую часть. Через неделю - откат в master. p99 не упал, а вырос до 18 мс, CPU подскочил на 15%, под нагрузкой иногда залипает на 200-400 мс. Эта статья - не про "io_uring - будущее async I/O", а про то, что в этом будущем реально работает в 2026 году, что нет, и где меня обманули бенчмарки.TL;DR как естьio_uring не убил epoll и не убьёт. Для классичес…
Привет. В прошлой статье мы в основном говорили про чтение — кэш в controller-runtime, informer’ы, Reflector, DeltaFIFO, почему r.Get в реконсайле не ходит в apiserver. Сегодня поговорим больше про запись.Kubernetes по своей природе спроектирован так, что одним и тем же объектом могут управлять разные контроллеры — и это нормально. На один Deployment смотрят и deployment-controller (правит status), и HPA (правит spec.replicas), и admission-мутаторы (расставляют labels), и cert-manager (дописыва…
Всем привет! Меня зовут Миша, я разрабатываю платформу Яндекс Еды. В декабре я рассказывал, как Temporal без боли решает привычную проблему распределённой бизнес‑логики.В продолжение темы я задумал написать такую статью, которую мне самому хотелось бы прочитать перед тем, как мы начали миграцию на Temporal. Всё изложенное проверено на практике: процессинг заказов Яндекс Еды уже почти год работает целиком на Temporal. Об общих принципах работы с Temporal я уже рассказал в предыдущей статье, а зд…
Оптимизация кода сервисов на Go под реальную нагрузку Когда сервис на Go начинает «тормозить» под реальной нагрузкой, проблема почти всегда не в самом языке и даже не в алгоритмах. Чаще всего узкие места лежат на уровне работы с памятью, сериализации данных и неочевидных накладных расходов рантайма. Если сервис упирается в сеть, базу данных или внешние API — оптимизация кода даёт ограниченный эффект. Но в CPU-bound сценариях (парсинг JSON, агрегации, обработка данных) каждая лишняя аллокация и…
Так выглядит работа с AIНаписать свою in-memory базу данных — это своеобразный способ изучить Go под капотом и сделать значимый пет-проект. Создавать обычную обертку над map скучно. Поэтому я задался вопросом: а что если написать по настоящему быстрый движок с бинарным хранением, а сверху прикрутить интерактивного ИИ-ассистента, с которым можно общаться на естественном языке, заставляя его самостоятельно выполнять цепочки запросов?Так на свет появился qrrot — in-memory хранилище на Go с TCP-инт…
Когда вы открываете mail.google.com, ваш рекурсивный резолвер делает три-четыре шага: спрашивает root, потом TLD, потом authoritative для google.com, иногда ещё один уровень. Десятилетиями каждому из этих серверов отправлялся один и тот же вопрос целиком: «дай мне mail.google.com». Root-серверу, который понятия не имеет про google. TLD-серверу, который умеет только делегации com.. Каждый из них видел всю строку, хотя для своей работы нуждался в одной метке.В 2016 году Стефан Бортцмайер написал …
Мы делаем мессенджер. Весной 2026 наш бэкенд начал отваливаться у части пользователей из России: HTTPS-запросы к API таймаутятся, WebSocket не поднимается. Картина знакомая всем, кто держит сервис с одним доменом и одним IP.Для мессенджера это приговор. Не «неудобно», а именно приговор: приложение, которое не может даже подключиться, бесполезно. И вариант «попросите пользователя сначала включить VPN» нас не устраивал совсем. Ниже разберу, почему мы в итоге встроили обход прямо в приложение, на …
Привет, Хабр! Меня зовут Даниил, я программист и архитектор, разрабатываю программное обеспечение и спецификации для создания ПО в YADRO. Продолжаю цикл статей об организации рабочего места по методу Spec-Driven Development. В первой части мы настроили агента Claude Code. Во второй расскажу, как настроить harness — программную инфраструктуру, выступающую оберткой для LLM, и наконец поделюсь решением задач по методу SDD. Слово «harness» переводится на русский язык как «упряжь»: по сути мы исполь…