TL;DRGOMAXPROCS ограничивает число потоков, которые одновременно исполняют Go-код (и тем самым задаёт параллелизм выполнения горутин); раньше по умолчанию он равнялся числу логических CPU на хосте.В контейнерах с CPU-лимитами это давало рассинхронизацию: Go распараллеливался «по ноде», а Linux удерживал процесс троттлингом cgroups, ухудшая задержки.В Go 1.25 дефолтный GOMAXPROCS учитывает CPU-лимит контейнера (если он меньше CPU хоста) и периодически обновляется при изменении лимита — если GOMA…
Всем привет! Меня зовут Михаил Пашедко, я backend-разработчик в Авито в команде Автотека. Автотека — это сервис для проверки истории автомобиля, в котором вы можете получить специальный отчет. Когда в тот самый отчет решили добавить подсказки для пользователя, идея казалась простой. Небольшая рекомендательная система, которая подскажет: стоит ли покупать конкретный автомобиль, на что обратить внимание, когда лучше отказаться от сделки.Но чтобы вписать даже такую, казалось бы, небольшую фичу в э…
ПредисловиеОднажды мне пришлось участвовать в переводе большого старого проекта на новую СУБД. Это заняло несколько месяцев тогда. И этот урок я запомнил на всю жизнь. В проекте повсеместно код приложения был перемешан с кодом SQL-запросов. При этом они во многих местах еще �� генерировались динамически из фрагментов текста. С тех пор я являюсь ярым сторонником отделения SQL-кода от непосредственно кода программы и патологически не перевариваю динамическую генерацию запросов.Мухи - отдельно, ко…
В России в принципе меньше интересного IT, который разрабатывает что-то новое и перспективное, чем "в мире". Оно есть, но на всех не хватит. Многие хотят пилить ядро, применять алгоритмы, исследовать компиляторы, но таких мест единицы и все давно заняты, уходить из них ради вас никто не собирается. Подавляющая часть, особенно в бигтехе - чисто поддержка, латать дыры в чужом говнокоде: разрабы в 2022 поубегали, а бизнес прекращать получать прибыль из этого кода пока не планировал - подде…
JWT, SSO, OAuth, OpenID Connect — названия, знакомые каждому разработчику. В коде токены встречаются повсюду. Кажется, что всё понятно.Но стоит спросить: «Зачем в продакшене нужен JWKS?» или «Чем отличается OAuth2 от OpenID Connect?» — уверенность сразу исчезает. Большинство работает с аутентификацией поверхностно: по шаблону или туториалам, не понимая, что лежит в основе. В этой статье мы разберём, как устроен JWT и его подпись, зачем нужны access и refresh-токены, что такое JWKS и в чём отлич…
Сталкивались ли вы с болью при управлении порядком запуска и остановки зависимостей в вашем Go-сервисе?Разработка больших сервисов неизбежно приводит к необходимости управлять множеством зависимостей. В этом контексте мы говорим о долгоживущих компонентах, чья работа обеспечивается отдельными горутинами: как правило, это блокирующий метод (например, Start), внутри которого крутится цикл обработки.Примерный сценарий жизненного цикла сервиса выглядит так:При запуске критически важно, чтобы пул со…
Команда Go for Devs подготовила перевод статьи о трёх языках, которые всё чаще оказываются в одном ряду, но на самом деле решают принципиально разные задачи: Go, Rust и Zig. Автор несколько месяцев изучал каждый из них и попытался понять, какие ценности стоят за их устройством. Go выбирает минимализм и корпоративную предсказуемость, Rust — безопасность и максимальную выразительность, Zig — радикальный контроль и отказ от ООП-мышления. Получился честный и местами провокационный разбор того, заче…
Сейчас, когда утилита say понравилась многим, а я получил массу вопросов и предложений пришло время придать этой массе некоторое ускорение, сформировав сильные вопросы в детальное теническое описание проекта. На днях утилита была добавлена в AUR, что и подколкнуло меня всё же расписать как всё устроено под капотом.Для начала уточню: say, это инструмент для видеозвонков, работающий напрямую в окне терминала. Отдельный GUI не требуется: видеопоток рендерится прямо в терминале в текстовом виде (см…
Эту статью я написал по следам работы над шаблоном микросервиса на Go — для коллег, которые переходят на Go после Ruby.Такие проекты для меня - это способ немного выдохнуть и спокойно порефлексировать: чего именно не хватало в реальной работе, какие инструменты хотелось иметь под рукой, какие решения приходилось принимать в последний момент. Заодно появляется шанс изучить новые подходы и переосмыслить старые.Цель этого шаблона была простой: дать человеку возможность сразу писать бизнес-логику, …