Девушка, милая, мне 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 тысяч. Пользователь загружает новую верси…
В первой статье про GoOS я довольно подробно прошёлся по загрузке, SMP, IPC, capabilities, сети, Linux ABI и устройству сервисов. А в комментариях довольно быстро всплыл вопрос, который я тогда сознательно обошёл стороной: что в системе происходит с динамической памятью и сборщиком мусора.Вопрос этот был вполне по делу. Я пишу ОС преимущественно на Go, компилирую её TinyGo, но обычный Go runtime мне тут никто не выдаёт. Значит, фраза «Go сам разберётся с памятью» тут не работает от слова «совсе…
О чём статьяНедавно я познакомился с golang и в качестве практики решил реализовать алгоритмы rate limiting'а из статьи c arxiv. В этой статье мы рассмотрим написание rate-limiter'а в виде отдельно стоящего сервиса и в виде middleware, используя in-memory кэш или Redis, добавим поддержку REST и gRPC, подключим Prometheus и поймём как добиться атомарности операций с минимальными задержками. Кому полезноНовичкам в golang или же людям, которые по какой-то причине также решили использовать…
Привет. В этой статье я расскажу какие бывают паттерны отказоустойчивости. Всего их 6, но я расскажу про 4 вида: Retry, Deadline, Rate Limiter, Circuit Breaker. Начнем по порядку.RetryСначала скажу, что сеть максимальна не стабильна и полагаться на успешные операции не вариант. При выполнении какого либо запроса, может быть сетевая ошибка, обрыв, дроп пакета, недоступность ресурса. Чаще всего такие проблемы можно решить обычным повтором запроса.Но повторять нельзя вслепую. Если операция не идем…
Недавно я был на хардкорной конференции про облачные технологии и ИИ. Но не в качестве спикера или гостя, а в качестве технического интервьюера: проводил короткие собеседования с Go-разработчиками для наших команд.Мы наивно рассчитывали, что к нам выстроится очередь, но к рекрутерам за весь день подошли всего два Go-шника. Конечно, приятно думать, что доклады были настолько интересными, что никто не хотел их пропускать. Но вообще я задумался: почему так получилось?Отсюда вопрос к вам, Go-разраб…