Backend Podcast
подкаст о разработке бэкенд-приложений
⚖️ В этом выпуске рассказываю про
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-комьюнити.