ROC‑AUC 1,000 против 0,500: Как я совместил мультиплексирование и HTTP-2-профиль трафика
В нашем тестовом стенде p95 latency снизилась с 579 до 108 мс, а Random Forest на выбранных признаках показал ROC‑AUC 0,500. Рассказываю об архитектуре, методике и ограничениях результата.В статье разбираю архитектуру ghostmux, проверки устойчивости и исправления, подготовленные для REALITYНебольшая оговорка о результатах ML‑ классификации: ROC‑AIC = 0,500 означает что, конкретная модель на конкретных признаках не показала качества выше случайного угадывания. Это не доказывает универсальную неразличимость трафика для любых моделей и методов анализа.Название
Go в продакшене 2026: как язык вырос из микросервисов
Привет, Хабр! На связи Илья Данилкин, тимлид в Авито Авто.
Как я перевёл свой self-hosted мониторинг с JSONL на SQLite и заставил модули просить разрешения
Привет, Хабр.Мне нужно было открыть страницу и увидеть, что происходит на удалённых серверах: нагрузка, процессы, диски, логи. Всё, что я находил, делилось на два лагеря. В первом система, под которую поднимаешь несколько сервисов и потом живёшь с их конфигами. Во втором простая штука, которая выглядит как из прошлого десятилетия и под себя почти не настраивается. Красивого, простого и гибкого одновременно я не нашёл. Мне это надоело, и я написал своё.
Доставка пива, алгоритм «Октагон» и поиск компании в EDGE: какие архитектуры придумали на Avito Grill & Go
Обычно на митапах всё довольно предсказуемо: доклады, слайды, кофе-брейк и немного общения между ними. Но в прошлом году мы решили перевернуть привычный формат — собрать Go-сообщество и побрейнштормить архитектуру. Активность была похожа на System Design, но с фаном и мясом!Так появился Avito Grill & Go. Формат зашёл настолько, что участники попросили повторить. И мы подумали: а почему бы не привезти его в Петербург?
HTTP-запрос закончился, а LLM ещё работает: как проектировать AI-задачи на Go
Когда пишешь обычный HTTP API на Go, использование context.Context быстро становится привычкой.Пришёл запрос, получили r.Context(), передали его в сервис, затем в репозиторий и во все внешние вызовы. Если клиент отключился или истёк таймаут, связанные операции отменяются.Для большинства backend-задач это именно то поведение, которого мы хотим.Зачем продолжать выполнять SQL-запрос, если результат уже некому возвращать? Зачем держать соединение с внешним API, если пользователь закрыл страницу?Но когда в систему добавляется LLM, эта привычная логика начинает работать не всегда так, как ожидается.
Почему JSON Schema не делает ответ LLM надёжным
После того как LLM начинает возвращать structured output, интеграция внезапно становится очень похожей на обычный backend.Больше не нужно вырезать JSON из Markdown, надеяться, что модель не добавит перед ним «Конечно, вот результат», чинить потерянные кавычки и повторять запрос из-за случайной запятой.Мы описываем схему, модель возвращает объект, десериализуем его в Go-структуру — и кажется, что самая неприятная часть интеграции закончилась.Например:type Invoice struct { Number string `json:"number"` Currency string `json:"currency"` Total int64 `json:"total"` }На выходе получаем:{ "number": "INV-2026-1842", "currency": "USD", "total": 148000 }JSON валиден.
Почему fallback между LLM может сломать семантику ответа
Когда проектируешь обычный backend, fallback обычно воспринимается как довольно понятный механизм.Есть основной upstream. Если он недоступен, переключаемся на резервный. Если один pod умер, запрос обслужит другой. Если один PostgreSQL read replica недоступен, читаем с другой. Если основной endpoint партнёра отвечает ошибкой, можно попробовать резервный.В большинстве таких случаев мы предполагаем, что резервный исполнитель реализует тот же контракт.С LLM это предположение начинает ломаться.Две модели могут принимать один и тот же JSON, возвращать JSON по одной и той же схеме и при этом фактически выполнять задачу по-разному.
xk6-sip: SIP-телефония как код
Парадокс 2026 годаНа дворе 2026 год. Веб-сервисы тестируют облачные оркестраторы: тысячи виртуальных пользователей поднимаются из пайплайна, метрики падают в Prometheus, деградации ловит алерт до того, как их заметит клиент. А в телефонии, которая до сих пор держит колл-центры, банки, скорую помощь и диспетчерские, релиз АТС часто проверяют так же, как двадцать лет назад: тестировщик берёт два телефона и звонит сам себе. Нагрузку дают SIPp со сценариями в XML, которые проверяют сигнализацию, но не слышат, прошёл ли голос.xk6-sip — моя попытка закрыть этот разрыв. Это расширение k6/x/sip для Grafana k6

