Самая дорогая строчка в микросервисе с LLM — model="gpt-4o". За ней тянутся свой ключ вендора, свои ретраи и счёт, который потом некому разобрать.Расскажу об одной идее, которая это убирает: сервис не должен знать, какая модель ему отвечает. Вокруг неё четыре механизма: правила маршрутизации, автоматический выбор сложности, поведение при сбоях вендоров и контроль денег. Всё это есть в Keystone. The Model Switchboard. (KTMS), нашем open-source LLM-шлюзе на Go, и примеры кода ниже из него…
Привет, Хабр! На связи Илья Данилкин, тимлид в Авито Авто. В этом материале я собрал подборку важных новостей из мира Go. Разберём, откуда берутся типичные утечки горутин и чем встроенный в рантайм детектор принципиально отличается от uber-go/goleak. Посмотрим, как устроен механизм GOEXPERIMENT и какие эксперименты стоит попробовать. Измерим, сколько реально даёт флаг GOAMD64 на современном железе. А также расскажу, почему языковые модели перестали быть просто предметом обсуждения и стали участ…
Как я сделал «Свою игру», где телефоны друзей становятся кнопкамис друзьями давно играем в «Свою игру». SIGame — отличная штука, но каждый раз начинается одно и то же: «скачай», «а у меня мак», «а я с телефона», «какой пароль от комнаты», «у меня не нажимается пробел». Половина вечера уходит на настройку.Мне хотелось, чтобы было как в телепередаче: большой экран с табло, а у каждого в руке кнопка. Табло — это любой экран, который у всех перед глазами: телевизор, проектор, ноутбук или демонстрац…
Привет, Хабр!Сегодня мы рады представить вам нашу очередную новинку, которая украсит полку профессионального бэкенд-разработчика: «Высокопроизводительный Go. Руководство по оптимизации». Она продолжает сразу два направления нашей работы и ориентирована как на современных бэкендеров, всё активнее переходящих на Go, так и просто на ответственных разработчиков, желающих систематизировать проверенные практики повышения производительности. Книга сложилась из заметок и кода, над которыми много лет ра…
Девушка, милая, мне gemini 3.8 flash, пожалуйста!Имя модели в коде устаревает в день выхода следующей модели. Если у вас десять сервисов, вы перепишете его десять раз и десять раз разнесёте по конфигам ключи вендоров.Keystone. The Model Switchboard. (KTMS) убирает это из кода. Сервис говорит, насколько сложна задача, а шлюз решает, какую модель позвать, с каким ключом и не отдать ли запрос вашей собственной GPU. В простое он занимает 7 МиБ памяти, а с версии 1.0 его API в пределах 1.x не ломает…
Есть глава, которую читали все, кто готовился к секции по проектированию систем: «Приблизительные оценки» у Алекса Сюя. DAU делим на 86 400, умножаем на два для пика, прикидываем объём за год — и получаем «1 160 записей в секунду, 11 600 чтений, 365 терабайт». Я тоже умел это считать. А потом я задал себе простой вопрос: «И Postgres это выдержит?» — и понял, что не знаю. Я знаю, как посчитать нагрузку. Я не знаю, что на самом деле происходит с базой, когда эта нагрузка приходит.Решил не гадать,…
Каждый, кто поднимает свой Kubernetes-кластер, рано или поздно упирается в вопрос: где хранить Docker-образы?Вариантов вроде бы немного, но каждый со своими граблями:Docker Registry — голый, без UI, без бэкапов, без RBAC. Для прототипа сойдёт, для продакшена — нет.Harbor — мощная штука, но требует PostgreSQL, Redis, Trivy, Core, Jobservice, Notary… Это отдельный мини-кластер со своими миграциями, обновлениями и логами.Nexus / GitLab Registry — либо тяжеловесные, либо привязаны к экосистеме, кот…
Как я рассказывал в первой части, реализация работы с памятью - довольно непростое занятие, и в первой части я рассказывал про сравнительно лёгкую область этой работы.Пока процесс однопоточный, сборщик мусора имеет дело с одним стеком, одним набором регистров и одной точкой выполнения. Как только появляется второй поток, он уже может одновременно менять кучу на другом процессорном ядре. А после появления горутин выполнение Go-кода вообще перестаёт быть жёстко связано с одним стеком нативного по…
Импорт Excel-файлов обычно выглядит несложной задачей. Получили XLSX, прочитали строки, проверили обязательные поля и записали данные в PostgreSQL. Если запись существует, обновили её через ON CONFLICT DO UPDATE.Для одноразового скрипта этого часто достаточно. Проблемы начинаются, когда импорт становится частью продукта.Допустим, в SaaS есть справочник товаров, который клиенты периодически обновляют из Excel. В одном файле 30 тысяч позиций, в другом 100 тысяч. Пользователь загружает новую верси…