Большинство современных систем — это не просто код, выполняющий запросы, а последовательности действий, которые должны выполняться атомарно и восстанавливаться при сбое. Речь идёт не о бизнес-логике в пределах одной функции, а об оркестрации процессов: цепочках шагов, где каждая операция может завершиться ошибкой, требующей компенсации.Такую задачу решает паттерн Saga — один из самых сложных и важных архитектурных паттернов. Он описывает, как выполнить серию распределённых операций с возможност…
Перевод статьи "A million ways to die from a data race in Go" от Philippe Gaultier, которую он опубликовал в личном блоге. Предполагается, что изложенный материал будет полезен разработчикам, уже имеющим какой-то практический опыт работы с Go.Я занимаюсь созданием production-приложений на Go уже несколько лет. Мне нравятся некоторые особенности Go, но есть и то, чему вряд ли можно дать положительную оценку - например, это то, как легко можно наткнуться на непреднамеренный Data Race.Data…
Статья подготовлена в рамках исследовательского проекта CloudBridge Research, посвященного оптимизации сетевых протоколов (BBRv3, MASQUE, FEC, QUIC).Проект: github.com/twogc/quic-testВидео-демонстрация работы quic-testПредысторияРанее мы публиковали на Хабре результаты наших исследований современных сетевых протоколов. В статье «CloudBridge Research: открываем результаты исследований QUIC/MASQUE и приглашаем к сотрудничеству» мы рассказали о нашей исследовательской инициативе и о том, зачем мы …
Коллега давеча показал любопытный "фокус", который вызвал изрядный спор в рабочем канальчике посвящённом Golang. Сначала обозвали коллегу двоечником, мол синхронизацию забыл - но выходит что дело тоньше и выдаёт небольшую неконсистентность эволюции средств языка, в частности каналов.Вот он код - он использует новую фичу из 1.24, synctest.Wait() - дело не в ней самой, но кажется на текущий момент это единственный способ "вскрыть" проблему (UPD - нет не единственный, смотри примеч…
Команда Go for Devs подготовила перевод статьи о новом подходе к защите Go-приложений от CSRF/CORF-атак. Автор разбирает, как связка TLS 1.3, SameSite cookies и http.CrossOriginProtection из стандартной библиотеки позволяют отказаться от токенов — но только если соблюдены важные условия. Насколько безопасен такой подход? Разбираемся. Go 1.25 представил новый middleware http.CrossOriginProtection в стандартной библиотеке — и это заставило меня задуматься:Неужели мы наконец пришли к тому моменту…
Привет, Хабр! Меня зовут Александр Кувакин, я backend-инженер в команде Engineering Excellence в Авито. В этой статье разберём, как backend-разработчикам выстраивать систему тестов на бэкенде и разберём основные проблемы. Речь пойдет прежде всего о тестах, которые проверяют бизнес-логику.Проблем с тестированием у backend-разработчиков хватает: кто-то считает, что тесты отнимают много времени, и не понимает, зачем они вообще нужны; у кого-то нет мотивации их писать; кто-то ограничивается unit-те…
ВступлениеПредставьте утро. Вы открываете ноутбук, заходите в Allure — и видите красное море.Падает половина автотестов, часть — «временно», часть — «иногда». Почти каждый день начинается с одних и тех же починок, дебага и «вроде теперь стабильно».Знакомо? Скорее всего да, иначе вы бы не открыли эту статью.Сегодня хочу спокойно, без паники и взаимных обвинений, взглянуть на эту ситуацию со стороны. Почему тесты ведут себя так непредсказуемо? Откуда берётся эта нестабильность, и почему она кажет…
Команда Go for Devs подготовила перевод материала о том, как изменилась экосистема Go к 2025 году. Рост числа профессиональных разработчиков, смещение баланса между веб-фреймворками, развитие инструментов тестирования, взлёт AI-редакторов и укрепление позиций Go в корпоративных и инфраструктурных командах — язык уверенно взрослеет и расширяет своё влияние.В этом году Go исполняется 16 лет. В честь этой даты мы внимательно изучили свежие результаты опроса Developer Ecosystem Survey и проследили,…
Команда Go for Devs подготовила материал о том, почему попытка тащить в Go привычные ОО-паттерны часто заканчивается печально, а вот разделение интерфейсов — наоборот, работает почти магически. Разберём, как маленькие интерфейсы избавляют от «интерфейсного ожирения», упрощают тесты и делают код гибче, даже если вы никогда не читали SOLID. А заодно посмотрим, почему огромный S3Client — это архитектурный антипаттерн, замаскированный под благо.Объектно-ориентированные (ОО) паттерны часто критикуют…