Category : golang

golang
Keystone 1.0: LLM-шлюз, который не хардкодит модели, держит свои GPU и не теряет ключи

Девушка, милая, мне gemini 3.8 flash, пожалуйста!Имя модели в коде устаревает в день выхода следующей модели. Если у вас десять сервисов, вы перепишете его десять раз и десять раз разнесёте по конфигам ключи вендоров.Keystone. The Model Switchboard. (KTMS) убирает это из кода. Сервис говорит, насколько сложна задача, а шлюз решает, какую модель позвать, с каким ключом и не отдать ли запрос вашей собственной GPU. В простое он занимает 7 МиБ памяти, а с версии 1.0 его API в пределах 1.x не ломает…

  • среда, 28 октября 2026 г. в 00:00:16
golang
Оценил по Сюю 500 запросов в секунду — замерил на ноутбуке: вот где сломалось

Есть глава, которую читали все, кто готовился к секции по проектированию систем: «Приблизительные оценки» у Алекса Сюя. DAU делим на 86 400, умножаем на два для пика, прикидываем объём за год — и получаем «1 160 записей в секунду, 11 600 чтений, 365 терабайт». Я тоже умел это считать. А потом я задал себе простой вопрос: «И Postgres это выдержит?» — и понял, что не знаю. Я знаю, как посчитать нагрузку. Я не знаю, что на самом деле происходит с базой, когда эта нагрузка приходит.Решил не гадать,…

  • среда, 28 октября 2026 г. в 00:00:15
golang
RGSTR: Экономим ресурсы кластера и время SRE: зачем нам нужен декларативный OCI-реестр с нативными …

Каждый, кто поднимает свой Kubernetes-кластер, рано или поздно упирается в вопрос: где хранить Docker-образы?Вариантов вроде бы немного, но каждый со своими граблями:Docker Registry — голый, без UI, без бэкапов, без RBAC. Для прототипа сойдёт, для продакшена — нет.Harbor — мощная штука, но требует PostgreSQL, Redis, Trivy, Core, Jobservice, Notary… Это отдельный мини-кластер со своими миграциями, обновлениями и логами.Nexus / GitLab Registry — либо тяжеловесные, либо привязаны к экосистеме, кот…

  • среда, 28 октября 2026 г. в 00:00:13
golang
Память в GoOS, часть 2. Нативные потоки, горутины и GC на SMP

Как я рассказывал в первой части, реализация работы с памятью - довольно непростое занятие, и в первой части я рассказывал про сравнительно лёгкую область этой работы.Пока процесс однопоточный, сборщик мусора имеет дело с одним стеком, одним набором регистров и одной точкой выполнения. Как только появляется второй поток, он уже может одновременно менять кучу на другом процессорном ядре. А после появления горутин выполнение Go-кода вообще перестаёт быть жёстко связано с одним стеком нативного по…

  • вторник, 27 октября 2026 г. в 00:00:27
golang
Excel как внешний API без контракта: безопасный импорт данных в Go и PostgreSQL

Импорт Excel-файлов обычно выглядит несложной задачей. Получили XLSX, прочитали строки, проверили обязательные поля и записали данные в PostgreSQL. Если запись существует, обновили её через ON CONFLICT DO UPDATE.Для одноразового скрипта этого часто достаточно. Проблемы начинаются, когда импорт становится частью продукта.Допустим, в SaaS есть справочник товаров, который клиенты периодически обновляют из Excel. В одном файле 30 тысяч позиций, в другом 100 тысяч. Пользователь загружает новую верси…

  • вторник, 27 октября 2026 г. в 00:00:26
golang
Память в GoOS, часть 1. От bump allocator к собственному heap и GC

В первой статье про GoOS я довольно подробно прошёлся по загрузке, SMP, IPC, capabilities, сети, Linux ABI и устройству сервисов. А в комментариях довольно быстро всплыл вопрос, который я тогда сознательно обошёл стороной: что в системе происходит с динамической памятью и сборщиком мусора.Вопрос этот был вполне по делу. Я пишу ОС преимущественно на Go, компилирую её TinyGo, но обычный Go runtime мне тут никто не выдаёт. Значит, фраза «Go сам разберётся с памятью» тут не работает от слова «совсе…

  • понедельник, 26 октября 2026 г. в 00:00:24
golang
Пишем высокопроизводительный rate-limiter на golang

О чём статьяНедавно я познакомился с golang и в качестве практики решил реализовать алгоритмы rate limiting'а из статьи c arxiv. В этой статье мы рассмотрим написание rate-limiter'а в виде отдельно стоящего сервиса и в виде middleware, используя in-memory кэш или Redis, добавим поддержку REST и gRPC, подключим Prometheus и поймём как добиться атомарности операций с минимальными задержками. Кому полезноНовичкам в golang или же людям, которые по какой-то причине также решили использовать…

  • понедельник, 26 октября 2026 г. в 00:00:23
golang
Паттерны отказоустойчивости

Привет. В этой статье я расскажу какие бывают паттерны отказоустойчивости. Всего их 6, но я расскажу про 4 вида: Retry, Deadline, Rate Limiter, Circuit Breaker. Начнем по порядку.RetryСначала скажу, что сеть максимальна не стабильна и полагаться на успешные операции не вариант. При выполнении какого либо запроса, может быть сетевая ошибка, обрыв, дроп пакета, недоступность ресурса. Чаще всего такие проблемы можно решить обычным повтором запроса.Но повторять нельзя вслепую. Если операция не идем…

  • суббота, 24 октября 2026 г. в 00:00:18
golang
Go-собеседоваться! Чего ожидать от интервью на конференции

Недавно я был на хардкорной конференции про облачные технологии и ИИ. Но не в качестве спикера или гостя, а в качестве технического интервьюера: проводил короткие собеседования с Go-разработчиками для наших команд.Мы наивно рассчитывали, что к нам выстроится очередь, но к рекрутерам за весь день подошли всего два Go-шника. Конечно, приятно думать, что доклады были настолько интересными, что никто не хотел их пропускать. Но вообще я задумался: почему так получилось?Отсюда вопрос к вам, Go-разраб…

  • пятница, 23 октября 2026 г. в 00:00:18