Backend Podcast
подкаст о разработке бэкенд-приложений
🪂 Go 1.24.0. Самое полезное нововведение. Новый пакет в SDK. Развитие в сторону однородности терминов.
🛟 Почему команда create в Linux не заканчивается на e, а в Go - наоборот?
Как параллелизм может быть не конкурентным? И почему производительность Go и Python зависит от жесткого диска?
🧠 Многое ли изменит DeepSeek R1? От энергопотребления до тенденции ростов дата-центров.
🚸 Разбираем аналогию Unix пайпа и канала в Go.
Как думает программист при исправлении ошибок в коде? (на основе когнитивных исследований)
📼 Как организовать раздачу терабайт видео? Где хранить это видео, как его подготовить?
Как работает адаптивный битрейт в HLS?
📅 Тип DATE в Postgres и time.Time в Go. Как работать с датой, если не нужна часовая зона?
Когда использовать тип DATE в PostgreSQL? Необычное API у Date объекта в JavaScript.
In-memory мок интерфейса к СУБД и удобство SQL.
🦌🎄Как изменился Интернет за 2024 год? Почему Starlink растет втрое, а HTTP/3 уже занимает 20% трафика?
LLM-проекты с большим трафиком. Кто повинен в проблемах работы Интернета, пожары, технические ошибки,
государства? Разбираем годовой отчет от Cloudflare.
🪄 Короткие имена упрощают код, но усложняют его понимание. Как найти зологую середину?
🛣 Что такое Continuous Integration (CI), чем он отличается от Pre-Release Integration и Feature Branching?
Как делать код-ревью при CI в условиях частых пушей в mainline?
Как CI практика вынуждает разработчиков писать код проекта лучше?
👁🗨 Варианты сохранения состояния в скриптах. Впечатления от задач по computer vision.
🎇 Что такое сайд эффект? Какая парадигма программирования ввела этот термин?
Откуда взялся термин "сайд эффект"? Как понять где в коде сайд эффекты?
Действительно ли сайд эффект - это побочное дествие (дословный перевод) или желательное поведение?
🗑 Оцениваем упущенные выгоды от использования старой версии PostgreSQL. Новый файловый менджер yazi.
Как работают рейт лимиты и token bucket алгоритм?
☎️ Какой эффект оказывают прерывания - когда нас отвлекают - на эффективность разработчиков,
и можно ли их уменьшить? Recovery time после прерываний? Можно ли слушать музыку при написании кода?
🤼♀️ Как сделать multi-tenant очередь в PostgreSQL и обеспечить справедливое распределение очередности
выполнения задач? Зачем нужны странные вопросы на собеседованиях при устройстве в компанию
и что на них отвечать?
🕗 Долго выполняющиеся операции. О проблемах, когда клиент долго ждет ответа.
Когда применять дизайн паттерн LRO? Должен ли код ошибки быть читаемым?
🦁 Скрытые возможности gofpdf для генерации PDF. Какой формат для печатаемых документов предпочесть: PNG, ZPL, PDF?
Когда PostgreSQL годится в качестве key-value хранилища и как использовать HOT и fillfactor для
максимизации производительности часто обновляемых данных?
🧠 Когнитивная перегрузка, научные эксперименты по восприятию задач над шахматистами и программистами,
перенос в долговременную память. Что такое дальний и ближний перенос знаний и помогает ли знание алгоритмов в
написание приложений? Развивает ли интеллект умение пользоваться алгоритмами?
🐘 Что нового в PostgreSQL 17? Хорошая статья по введению в Bubble Tea для создания TUI приложений.
Скрипты на Go. Огромные web-формы: стоит ли переносить логику на фронтенд?
🩹 Пограничная разница уровней изоляции Repeatable Read и Serializable.
Частичное получение и обновление данных через API, метод PATCH.
🧝 Что такое шелл нового поколения на примере Elvish?
Как решаются проблемы надежного выполненеия workflow в микросервисной архитектуре?
Что понравилось и не понравилось в Temporal?
🫣 Разбираем термины webhook и callback.
В этом эпизоде мы знатно страдаем над определениями, разбираем наши заблуждения и прощупываем серые зоны.
Хотели осветить больше технических деталей, но делать эпизод длиннее часа не стали, поэтому будет продолжение.
🔄 Ошибка циклической инициализации в Go и особенности дизайна этого ЯП, инкрементная компиляция.
Модуль auto_explain в PostgreSQL. Когда использовать ClickHouse?
📚 Разница между моно и мульти репозиторием. Стоит ли вам использовать моно-репозиторий?
Как триггерить отдельный пайплайн для подпроектов в случае моно/мультирепозитория?
Ускорение сборки Docker образа. Синхронная разработка backend и frontend проекта.
💍 Итераторы в Go 1.23.0. Делать ли коммерческий проект с открытым исходным кодом или закрытым?
Социальный инжениринг из Северной Кореи. Какие для себя риски видят компании-потребители OSS?
🧗♀️ Почему мы выбрали ReactJS для фронтенда и потом отказались от него?
Когда стоит взять на борт ReactJS и когда генерировать старый добрый HTML на сервере?
Вобщем, обсуждаем наш тернистый путь отказа от ReactJS.
🌴 Обновленный индекс TIOBE по языкам программирования: Go на 9 месте и теперь в TOP-10.
Кртитический обзор преимуществ использования ORM. Примечательные цифры опроса 2024 года от StackOverflow.
‼ ️Дизайн-паттерн для предотвращения дублирования запросов.
Почему запросы иногда дублируются? Что делать, если данные в кеше устарели или кеш-сервер недоступен?
Нужен ли уникальный request_id или достаточно использовать хеш тела запроса?
☁️ Мнение о AWS сертификатах для поиска работы в США.
Case study: Monzo банк (UK) целиком работающий на инфраструктуре AWS.
💥 Критическая уязвимость sshd. Особеннось работы pg_basebackup. Использование ENUM в PostgreSQL.
Почему отказались от rclone в проде?
⛲️ Проблема двух хранилищ: СУБД и очередь. riverqueue - пример решения, в котором задачи очереди хранятся в
трназакционной СУБД. Также, pspg и использование только SDK для тестов в Go.
🗝 Говорим про открытый стандарт авторизации OAuth 2.0 и ключевые моменты в понимании этого стандарта,
а также про неочевидное использование этого фреймворка авторизации.
🤹♀️ Закат хайпа serverless архитектуры.
Почему в свежих публикациях так часто предвещают конец развития технологии (спойлер: с технологией все в порядке)?
Переход от микросервисной архитектуры к монолиту в Amazon Prime Video.
📘 Обзор книги "Modern Software Engineering": итеративная и инкрементальная разработка, agile современности и
agile-манист от создателей, стоит ли всегда применять TDD, важные метрики разработчика: стабильность и
производительность.
👭 Как используют rclone для однонаправленной и двунаправленной синхронизации?
Правило "3-2-1" для резервного копирования.
Также поговорили про внутренности rclone: интересная реализация интерактивной
сборки конфигов, встроенный ncdu, базовые пакеты fs и vfs.
🏃♀️ Основы PGO (Profile Guided Optimization): инлайнинг и бранчинг.
👨🚀 Разбор модельного интервью: разработка сервиса резервации билетов. Самый популярный проект на Go - frp.
📘 Отзыв на книгу “Engineers Survival Guide”. Как выжить программисту в большой корпорации.
💬 Mattermost - аналог Slack, написан на Go, с copyleft лицензией.
Хороший пример крупного web-сервиса. Как он устроен внутри?
Поговорили про абстрагирования от стораджа, разделение на слои приложения, выделения моделей в отдельный пакет,
систему сборки документации, e2e тесты в этом проекте.
📘 Обзор книги “Tidy First?”. Говорим о том, зачем нужен рефакторинг,
обсуждаем самые простые структурные изменения кода.
🍫 Что нового в Traefik 3? История о том, как добавили cmp.Or в Go 1.22.
Зачем нужна эта функция и где ее использовать? Что такое comparable интерфейс?
⚖️ В этом выпуске рассказываю про
nextgres
- PostgreSQL бэкенд для MySQL приложений.
И про
debezium
для аудита изменений СУБД.
🌶 Почему Redis теперь - это проприетарный продукт?
Что такое SSPL лицензия и чем она плоха для разрабочиков? Что использовать вместо Redis?
📘 Отзыв на книгу по UX. Важен ли UX? Как создать удобный сайт?
Почему простота и интуиция — ключи к успешному дизайну веб-сайта.
🍿 Инкрементные бэкапы при помощи pg_probackup, когда штатных средств PostgreSQL не хватает.
Что нового в GoLand 2024.1? Зачем предложен черновик стандарта новых UUID и чем хорош UUIDv7?
🐌 Как Gale-Shapley алгоритм помогает найти идеальную пару и работу мечты. И как жадность улучшает систему.
Также здесь поговорим о том, почему не всегда получается сделать всех счастливыми.
🪢 Что нового в
runtime/trace
? Что дает партицирование и стриминг данных трейсера?
Как ускорить чтение и обработку файла на 1 миллиард строк?
🥇 Обсудили статью Брукса 1986 года "No silver bullet" о возможности решения проблемы сложности в программных
продуктах. Коротко про инцендент и успешный PITR в PostgreSQL, а также про команду
MERGE
.
⛵️ Исправления безопасности в Go 1.22.1. Сравнение производительности и стоимости PostgreSQL в разных облаках.
Бережливое отношение к памяти в Go и пакет slices.
🪲 Почему индексация массивов начинается с 0 в большинстве ЯП? Статья Дейкстры.
Почему в Go отказались от отрицательной индексации?
🤹♀️ MVCC - механизм конкурентного доступа к данным в PostgreSQL.
Zero-code бэкенд с помощью nocodb.
Массовые увольнения в IT-отрасли в США.
Поговорили про пару стоящих книг:
📘 Мониторинг PostgreSQL, Алексей Лесовский;
📙 The Essence of SQL, Дэвид Розенштейн.
Одна из них совсем свежая, другая же вышла больше 20 лет назад.
🚀 Go 1.22 и новое версионирование пакетов в SDK, как использовать PGO и его улучшенная производительность,
улучшенный мультиплексор в net/http пакете, щепотка синтаксического сахара и другие изменения.
🧹 Буферный кеш в PostgreSQL. Что это и в чем отличия буферного кеша от буфера и от кеша?
😐 Насколько DRY-принцип - это принцип? Обсудили его недостатки и проблемы поиска нужной абстракции.
🩻 MVP для бекэнда в бизнес-аналитике и его важнейшие компоненты.
🐌 Таймауты и ретраи разного типа.
Какие бывают стратегии повторной отправки, зачем нужен джиттер и что такое спираль смерти?
🔫 Что такое work_mem и как определить его значение?
Стоит ли переносить всю бизнес-логику в хранимые процедуры?
Как быстро уведомить о завершившейся транзакции, NOTIFY или Go-рутина?
CTE или подзапросы и что изменилось в PostgreSQL 12? Сегодня говорим о PostgreSQL,
индексах на FK и вдохновляем себя и вас на использование EXPLAIN ANALYZE.
🉐 Ориентация букв, графемные кластеры, перевенутые символы, руны и код-поинты таблицы символов,
глифы, монгольский язык и египетские иероглифы, диакритики, валидация пользовательского ввода
с диакритиками и приведение строк к ASCII
🎅 Коротко об итогах года. Как ускорить LIKE/ILIKE с поиском по подстроке в PostgreSQL?
Находим мертвый код с помощью deadcode. Всех с наступающим/наступившим Новым Годом! ☃️🎄🌵🎉
🗿 Что такое выражение (expression) и инструкция (statement)? Что такое control flow?
Чем декларация в Go отличается от C? Два вида тайп алиасов.
🍰 Результаты отчета Go Developer Survey 2023 H2. Насколько микросервисная архитектура популярна в комьюнити Go-разработчиков?
Какие СУБД, облака, IDE, форматы обмена данных самые популярные в комьюнити?
Как комьюнити использует AI в разработке?
🔧
go-sqlite для работы с SQLite3 без CGO.
Чем CGO пакеты хуже pure Go? Бенчмарк C FFI оверхедов и низкий перфоманс Go.
👾 Почему мы решили использовать OpenAI в нашем проекте? Как мы его используем и какие поулчили результаты? Что
дает API ассистент? Готов ли ChatGPT для использования в продакшне?
☔️ Самая частая ошибка при работе с ошибками в Go.
Обработка ошибок в Go: wrapping и добавление контекста.
Достаточно ли Go SDK для работы с ошибками и что есть за пределами SDK?
💾 Функции Open, Close в Go, финализаторы и деструкторы Go рантайма.
🔧 nilaway - новый линтер от Uber
🌜 Что делать, если часто рвется SSH-соединение? Опыт использования lazydocker. Сколько можно выжать RPS из
web-сервера с SQLite базой? Какие есть варианты дизайна БД для достижения полиморфизма в SQL (polymorphic
association)?
🔥 Индциндент: закончилось место на сервере БД
🔪 Почему слайсы в Go - это сложная концепция? Типовые ошибки при использовании слайсов. Как они устроены?
🗞 Группа Charm получила USD 6_000_000 от фонда Gradient
🗞 Krater: опыт перехода с Rust на Go
🧟 что такое ssh-based приложения? есть ли в вашей компании X+ разработчиков для решений на базе микросервисной
архитектуры? почему микросервисная архитектура - это сложно? перспективы back-end разработки и у кого больше
з/платы?
🍄 Книга
SQL
антипаттерны.
Реляционные БД без FK чеков. Проблемы смешивания метаданных и данных.
EAV как надежный способ добавить страданий.
Три способа хранения деревьев в реляционной БД (включая тот, о котором вы скорее всего не знали).
🛵 Что будет в новом раутинге в Go1.22?
Как новый раутинг устроен под капотом и насколько медленнее он будет работать по сравнении с текущим?
Теперь для раутинга в HTTP-сервере достаточно Go SDK?
⏱ Что такое монотонные часы?
Скачущая секунда в POSIX и инциндент в CloudFlare из-за особенностей замеров временных интервалов в Go.
Астрономические, атомные и монотонные часы.
🐾 Можно ли в логгированием решить задачи трейсинга и мониторинга? Как логгировать запрос-ответ web-сервиса?
Подебатировали про уровни логгирования (severity levels). Где хранить логи, PostgreSQL, ElasticSearch,
ClickHouse?
Неправильные ошибки в Go и при чем тут логи?
🍕 Как мы используем Copilot и ChatGPT на ежедневной основе?
Недостатки обоих продуктов, а также про чувство вины при использовании ChatGPT в
работе, про правительство Исландии, идеи стартапов, "Black Mirror" и т.д.
🧩 То что вы скорее всего не знали о testing пакете в Go. Бенчмарки, фаззи-тесты, параллельное тестирование,
fstest, iotest и т.д.
🚧 Concurrency, parallelism и asyncronous программирование. Почему эти термины часто путают,
как все это работает в Go, JavaScript и Python? При чем тут очереди и event loop?
💬 Когда переходить от batch processing к брокеру сообщений? Каковы этапы повышения сложности приложения? Опыт
неудачного использования RabbitMQ.
🥊 Почему 5 лет назад мы перешли с Python и PHP на Golang? Почему именно Golang? Python треды и GIL, что выбрать
сегодня для разработки бэкэнда?
🧱 Почему мы не используем pq в наших проектах на Go? Когда стоит использовать database/sql из
стандартной библиотеки, а когда лучше работать напрямую с драйвером и почему мы не используем
database/sql? Поговорили про функционал pgx позволяющий использовать LISTEN/NOTIFY, т.е.
межпроцессное взаимодействие (IPC) на базе PostgreSQL. Коснулись работы с LOB и темы хранения
файлов в БД. Поговорили про новую систему логгирования в pgx5 с использованием механизма
трейсинга и про пул соединений.
🗺 В этом выпуске мы говорим о лейауте Go-проекта, т.е. организации файловой структуры проекта. Есть ли
стандартный лейаут? Какие общие правила можно применить для организации кода? Резместить весь код в одном
main.go файле - это ок? Какие идеи для лейаута можно почерпнуть из Go SDK? Стоит ли уделять большое внимание
этому вопросу? Также Боря рассказал в общих чертах о своем "неправильном" лейауте и почему он сделал такой выбор.
🔬 Валидация, верификация, RFC7807 и Марк Нотингем, анмаршалер JSON в Go и его связь с точностью валидации и как
сообщать пользователю об ошибках.️
🏋🏾♀️ Наконец-то появится стандартный лейаут Go-проекта? PostgreSQL станет single process, multi-threaded? Что
это решит и станет ли СУБД быстрее?
🔨 "Если у меня получилось, то и у вас получится" (Ларри Хон, очень эффективный плотник)
🔮 Казалось бы, с чего это пакет context заслужил отдельного подкаста?
☄️ Бесконечные респонсы, фул-дуплекс, тройное лейтенси однонаправленных и двунаправленных коммуникаций
🪓 REST - беда для перфекциониста.
Есть ли у RESTful архитектурного стиля стандарт?
🦕 Как ощутить свободу и избавиться от зависимостей?
Статья Раса Кокса легла в основу этого выпуска.
В этом выпуске мы немного поговорили о безопасности бэкэнд-приложений, CORS-механизм и связанные с ним политики
безопасности браузеров, чуть обсудили XSS и CSRF атаки.
В этом эпизоде обсудили стоит ли использовать ORM в проектах и почему мы отказались от них в своих проектах.
Регулярные выражения, автостарт и рестарт при краше с помощью systemd.
Фиксация тега базового docker-образа; програмы для сжатия в pg_basebackup;
важность понимания внутреннего устройства индексов БД на примере B-Tree;
результаты опросы Go-комьюнити.