backendportal | Unsorted

Telegram-канал backendportal - Backend Portal | Программирование

15708

Присоединяйтесь к нашему каналу и погрузитесь в мир Backend-разработки Связь: @devmangx РКН: https://clck.ru/3FobxK

Subscribe to a channel

Backend Portal | Программирование

Шаблон Full Stack FastAPI теперь отдаёт фронтенд на React и TanStack прямо через FastAPI.

В итоге одно приложение, один деплой и один домен.

Без отдельного фронтенд-сервера, лишней настройки CORS и постоянной отладки проблем между двумя частями приложения.

https://github.com/fastapi/full-stack-fastapi-template

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Если изучаете Kubernetes, стоит посмотреть на этот репозиторий — внутри 24 практические лабораторные работы 😆

Он охватывает

→ Pods, Deployments, ReplicaSets, StatefulSets и DaemonSets
→ развёртывания, откаты и масштабирование на ходу
→ Secrets, ConfigMaps, PV и PVC
→ привязку к узлам, taints и tolerations, RBAC
→ Services, Ingress и Helm
→ настройку кластера через Kubeadm

В каждой лабораторной есть YAML, команды kubectl и полноценное практическое задание.

Выберите одну. Откройте терминал. Начинайте ломать.

Репозиторий — https://github.com/omerbsezer/Fast-Kubernetes

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Эти заметки — структурированное руководство по собеседованиям по проектированию систем.

Внутри разбираются как базовые подходы к System Design, так и конкретные архитектуры: веб-краулеры, системы уведомлений, платёжные платформы и другие типичные задачи с собеседований.

https://github.com/liquidslr/system-design-notes

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Когда впервые сталкиваешься с гонками данных и моделью памяти Go, многое выглядит довольно странно.

Например, почему код ниже вообще может не работать?

Официальное описание модели памяти Go довольно большое и сложное, поэтому автор решил объяснить всё намного проще.

И тема оказалась куда интереснее, чем кажется — через неё хорошо видно, как Go на самом деле работает с памятью и горутинами.

https://func25.dev/posts/go-memory-visibility/

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Shell Gym – интерактивный тренажёр командной строки Linux, созданный на основе многолетнего опыта преподавания. По сути, автор выделил ядро iximiuz Labs и превратил его в отдельный демон.

https://github.com/iximiuz/shellgym

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

С Lazydocker работать с Docker становится заметно проще

Lazydocker – это опенсорс TUI для управления Docker и Docker Compose прямо из терминала.

В одном интерфейсе можно смотреть контейнеры, сервисы, логи и метрики, а также перезапускать, удалять и пересобирать контейнеры или подключаться к ним, без постоянного ввода Docker-команд.

github.com/jesseduffield/lazydocker

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Репозиторий TypeScript больше не на JavaScript. Теперь он на Go.

TypeScript 7 только что влили в основную ветку.

✓ Нативный компилятор — до 10 раз быстрее
✓ Значительная часть JavaScript-кода уходит в прошлое

Конец одной эпохи. И начало другой:

https://github.com/microsoft/TypeScript/pull/63763

Читать полностью…

Backend Portal | Программирование

Этот репозиторий на GitHub собрал больше 1000 бесплатных публичных API практически на любой случай.

Финансы, погода, карты, музыка, игры, машинное обучение, крипта, транспорт, наука, безопасность и десятки других категорий — всё собрано в одном месте.

Полезная штука, если нужен готовый API для пет-проекта, прототипа или тестирования идеи.

https://github.com/public-apis/public-apis

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Бенчмарки – оружие массового заблуждения?

E2E-бенчмарк может показать впечатляющие цифры, но при этом тестовые сценарии расходятся с реальностью. Что с этим делать расскажет Антон Курако на JVM Day от Т-Банка – конференции для Java-, Scala- и Kotlin-разработчиков, архитекторов и тимлидов. Спикер объяснит, где заканчивается полезное измерение и начинается погоня за красивыми показателями, а также как проверять производительность так, чтобы не стать жертвой собственного графика.

Еще в программе – доклад Сергея Петрелевича о Mechanical Sympathy. На примере Spring Boot MVC он покажет, как такой подход помогает добиться большей скорости с помощью простых решений и готовых библиотек. Александр Ланцов разберет разные модели конкурентного программирования после появления Virtual Threads, а Андрей Кулешов поделится последними новостями из мира JVM-языков.

После деловой программы начнется афтепати с играми, ИТ-квизом и диджей-сетом на виниле. Количество мест на ивент ограничено, поэтому есть смысл зарегистрироваться заранее. Пишите, если пойдете, в комментах: тем, кто тоже собирается на JVM Day, будет проще вас найти и организовать совместный поход.

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Linux 101: Практика по управлению хранилищами

Отработайте основы управления хранилищами в Linux на серии практических заданий – от монтирования существующих файловых систем до разметки дисков и автоматизации их подготовки:

- Смонтировать диск с уже существующими данными и прочитать его содержимое
https://labs.iximiuz.com/challenges/storage-simple-mount

- Создать файловую систему ext4 на неформатированном диске
https://labs.iximiuz.com/challenges/storage-simple-format

- Создать таблицу разделов GUID Partition Table (GPT) на пустом диске
https://labs.iximiuz.com/challenges/storage-simple-partition-table

- Разбить диск на несколько разделов и отформатировать их в ext4 и Btrfs
https://labs.iximiuz.com/challenges/storage-partition-drive

- Смонтировать существующую директорию по новому пути с помощью bind mount
https://labs.iximiuz.com/challenges/storage-bind-mount

- Настроить постоянное монтирование файловой системы, чтобы оно сохранялось после перезагрузки
https://labs.iximiuz.com/challenges/storage-persistent-mount

- Автоматизировать подготовку диска с помощью shell-скрипта
https://labs.iximiuz.com/challenges/storage-provision-drive-script


👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Илон теперь взялся за Microsoft!!

Cursor планирует убить GitHub.

Вчера GitHub не работал семь с половиной часов. Сайт, Actions, Copilot, слияние кода — всё лежало. О сбое сообщили 15 000 разработчиков.

Технический директор GitHub признал, что они закладывали запас мощностей в 10 раз, а в итоге поняли, что нужен запас в 30 раз. Теперь GitHub арендует серверы у AWS — крупнейшего облачного конкурента Microsoft.

И в тот же день Cursor запустил Origin.

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

На одном собеседовании по системному дизайну я использовал Kafka.
На другом — Redis.
На ещё одном — S3.
На ВСЕХ собеседованиях по системному дизайну я использовал базы данных.

Базы данных — основа любой архитектуры независимо от масштаба, стека или предметной области.

Если вы понимаете, как данные хранятся, запрашиваются, индексируются, реплицируются и партиционируются, то вы уже понимаете 70% системного дизайна.

Не отвлекайтесь на каждый новый модный компонент. Очереди, кэши и оркестраторы приходят и уходят.

А базы данных остаются.

Реляционные, NoSQL, временные ряды, векторные базы — подходы меняются, но принципы остаются теми же:

- пути чтения и записи
- индексация и кэширование
- транзакции и изоляция
- репликация и партиционирование

Разберитесь глубоко в том, как движутся данные, и вы увидите, как с ними связаны все остальные части системы.

Изучайте базы данных глубоко.

Большинство других компонентов существуют лишь для того, чтобы перемещать эти данные, защищать их или оптимизировать доступ к ним.

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Клиент доволен. Осталось только перейти к оплате ✅

Для разработчика это не должно превращаться в очередную задачу.

Обменник by Ali помогает принимать оплату от зарубежных клиентов через понятный сценарий в Telegram.

Что вы получаете:
актуальные реквизиты для каждой новой оплаты
статус и проверку платежа в приложении, а не догадки в переписке
баланс, историю операций и гибкий вывод средств в одном месте

🌎 Сервис помогает и с оплатой зарубежных рабочих инструментов: ChatGPT, Claude, GitHub, Cursor, облачных сервисов, доменов, хостингов, подписок и других нужных покупок.

🙅🏻‍♂️Не нужно каждый раз искать новый способ и разбираться с оплатой самостоятельно.

💰Наш сервис: /channel/exchanger_ali_bot?start=ABC4DC15

Посмотрите отзывы в нашем Telegram-канале.

Подробнее о сервисе — на сайте.

Остались вопросы? Ответ даст наш умный бот

Читать полностью…

Backend Portal | Программирование

Competitive Programmer’s Handbook — руководство по спортивному программированию.

Книга рассчитана на студентов, которые хотят изучить алгоритмы и, возможно, готовиться к Международной олимпиаде по информатике IOI или Международному студенческому чемпионату по программированию ICPC.

PDF доступен бесплатно.

https://cses.fi/book/book.pdf

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Никто не хочет весь день смотреть в панели мониторинга PostgreSQL. Поэтому чувак сделал бота, который делает это за вас.

Он находит, что работает не так, объясняет, что изменилось, и говорит, что нужно исправить в первую очередь.

Метрики — это данные. pgbot даёт вам ответы.

pgbot умеет следить за состоянием PostgreSQL, анализировать производительность запросов, находить медленные запросы и регрессии, разбирать блокировки и блокирующие запросы, анализировать таблицы и индексы, показывать работу VACUUM и autovacuum, отслеживать рост базы данных, находить первопричины проблем с помощью ИИ и давать рекомендации.

Подключаться можно напрямую к базе или через агента с приватным доступом.

Бесплатный, с открытым исходным кодом и написан на Go.

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Бывший глава GitHub строит ему замену.

Потому что GitHub уже не справляется с собственной инфраструктурой.

Сейчас GitHub обрабатывает 2,9 млрд коммитов в месяц. Ещё в апреле было 1,4 млрд. То есть нагрузка удвоилась всего за четыре месяца.

Каждый месяц сливаются 130 млн пул-реквестов и создаются 24 млн новых репозиториев.

И это уже второй крупный сбой GitHub только за август.

Технический директор GitHub Влад Фёдоров прямо написал в разборе инцидента

«Мы добились прогресса, но эти инциденты ясно показывают, что нам нужно ускорить эту работу».

Сейчас уже 58% нагрузки GitHub работает на Microsoft Azure. В мае было всего 12%.

Только за этот год компания добавила 3 млн процессорных ядер и 120 петабайт хранилища.

Собственные центры обработки данных GitHub упёрлись в предел. Причём не по бюджету, а буквально по доступной мощности электроснабжения.

Тем временем Томас Домке, который руководил GitHub до 2024 года, запустил новую компанию Entire.

И она создаётся именно потому, что он не верит, что нынешняя архитектура GitHub сможет выдержать ту нагрузку, которую скоро начнут генерировать ИИ-агенты для программирования.

Источник — The New Stack.

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Tobi Lütke, сооснователь и CEO Shopify, на выходных сделал открытую реализацию подхода из статьи Cursor «Git at Scale».

Проект называется walgit. Это один бинарный файл на Rust, который можно подключить к любому S3-совместимому объектному хранилищу. Он использует WAL и CAS и при этом не требует отдельной базы данных.

Также есть поддержка bundle-uri, благодаря чему большие Git-репозитории и монорепозитории можно гораздо быстрее скачивать как цепочку статических бандлов.

Плюс добавлен базовый привычный интерфейс.

Исходный код открыт - https://github.com/tobi/walgit

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Создатель PostgreSQL фактически поблагодарил Oracle за успех своей базы данных.

Майкл Стоунбрейкер создал PostgreSQL. Ему уже за 80, а он до сих пор продолжает запускать компании.

Его слова

«Мы должны поблагодарить Oracle за популярность PostgreSQL, потому что когда они купили MySQL, все испугались... Именно тогда и начался подъём PostgreSQL».

Oracle купила MySQL в 2010 году. Разработчики начали мигрировать ещё до того, как компания успела сделать что-то плохое.

Спустя 15 лет Стоунбрейкер считает, что страхи были оправданы.

В сентябре 2025 года Oracle провела масштабные сокращения в основной команде MySQL.

А PostgreSQL тем временем стал самой популярной базой данных среди разработчиков ещё в 2023 году. Microsoft, Google и Amazon построили вокруг его протокола собственные сервисы.

О нынешнем положении MySQL Стоунбрейкер говорит просто

«Исчезает как конкурент».

А главную причину успеха PostgreSQL он объясняет так

«Им управляет группа из 20–30 очень умных суперпрограммистов... Это открытый исходный код в своём лучшем проявлении».

Получается красиво.

Oracle 15 лет подряд случайно строила главное преимущество PostgreSQL.

У него никогда не было одного владельца, которого все могли бы бояться.

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Подзапросы в SQL сначала могут казаться запутанными, но на деле это просто запросы, которые передают данные другому запросу.

В этой статье Абдулла объясняет, как работают подзапросы и где они используются в SQL.

Разбираются некоррелированные и коррелированные подзапросы, производные столбцы и таблицы, а также операторы IN, ANY, ALL, EXISTS и многое другое.

https://freecodecamp.org/news/how-to-work-with-subqueries-in-sql/

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Вам доклады по Go или Java? VK приглашает на митап с двойной начинкой
26 августа VK собирает Go- и Java-инженеров, чтобы прокачать знания.

В программе два трека — Go и Java, по три доклада в каждом.

Трек Go:
• «Компиляция Go в динамическую либу, или как мы ускорили выкатку фичи в два раза, но нам не понравилось», Михаил Кичигин, бэкенд-разработчик, Avito Tech
• «Go-платформа VK: как мы построили единую основу для создания Go-сервисов», Александр Апанасенко, руководитель команды SDK Backend, VK
• «Почтальон от Kubernetes до Palo Alto. Как осуществляется доставка информации об адресах», Дарья Кулькина, бэкенд-разработчик, Точка Банк

Трек Java:
• «Перформанс-трюки в поисковой платформе Ozon», Пётр Портнов, ведущий разработчик среднего поиска, Ozon
• «Архитектура современного движка платёжной системы и переход к новой архитектуре», Игорь Крикунов, технический лидер разработки DBC, Альфа-Банк
• «Переход от федерации S3-кластеров в пользу коммунального и мультитенантного кластера», Кирилл Боблак, ведущий разработчик One-cloud, VK

А ещё будет мастер-класс по прокачке навыка, который сделает вас звездой любого вечера, и афтепати, чтобы обсудить доклады в неформальной обстановке.

Встречаемся в 17:00, начало в 18:00. Участие бесплатное, регистрация обязательна.

Читать полностью…

Backend Portal | Программирование

20 Kubernetes-челленджей

Итак, вот 20 вопросов (и ответов):

1. danielepolencic/kubernetes-challenge-1-counting-endpoints-9d9c49dac2aa">Подсчёт endpoints

2. danielepolencic/kubernetes-challenge-2-waiting-for-a-miracle-f8448c864397">Ждём чуда

3. danielepolencic/kubernetes-challenge-3-i-said-stop-3323e74002ca">Я сказал стоп

4. danielepolencic/kubernetes-challenge-4-designing-shared-clusters-dc836f087fb2">Проектирование shared-кластеров

5. danielepolencic/kubernetes-challenge-5-kernel-panic-b5409d3db6e4">Kernel panic

6. danielepolencic/challenge-6-hop-little-bunny-b0748c3cd907">Прыгай, кролик

7. danielepolencic/kubernetes-challenge-7-how-many-is-too-many-217cbc2c2b63">Сколько — это слишком много

8. danielepolencic/kubernetes-challenge-8-keeping-the-lights-on-bb2826dba28b">Держим свет включённым

9. danielepolencic/kubernetes-challenge-9-greedy-etcd-ba0e395cac8a">Прожорливый etcd

10. danielepolencic/challenge-10-multiplying-pods-ebd2a65e0ac9">Умножение pod’ов

11. danielepolencic/kubernetes-challenge-11-going-indie-0a91d244b17f">В одиночку

12. danielepolencic/challenge-12-rollin-28abe367e76b">Rollin’

13. danielepolencic/challenge-13-all-you-can-eat-c93045d17388">All you can eat

14. danielepolencic/challenge-14-bounce-2ba683214e7b">Bounce

15. danielepolencic/challenge-15-down-the-rabbit-hole-d1d16121a835">В кроличью нору

16. danielepolencic/challenge-16-throttled-93133f8fd0ad">Throttled

17. danielepolencic/challenge-17-sticky-mess-7f7f00be2636">Липкий бардак

18. danielepolencic/challenge-18-dead-or-alive-16357e0b874e">Жив или мёртв

19. danielepolencic/challenge-19-tied-up-dc16a3786218">Связанный по рукам

20. danielepolencic/challenge-20-one-to-bind-them-all-ca83406d0296">Один, чтобы связать их всех


Вы можете использовать эти задания, чтобы прокачать свои знания, как (очень сложные) вопросы на собеседованиях или чтобы подготовиться к интервью

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Разработчику стоит знать основные концепции системного дизайна.

Это помогает показать потенциальным работодателям, что вы умеете превращать требования к архитектуре в готовый к продакшену код.

В курсе разбираются архитектура приложений, проектирование API, кэширование, сети, базы данных и многое другое.

https://freecodecamp.org/news/learn-system-design-principles/

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Похоже, это один из самых полных справочников по самостоятельному хостингу.

Огромный открытый гайд со всем, что нужно для старта и дальнейшего изучения self-hosting:

Docker, Kubernetes, базы данных, LLM, сети, Raspberry Pi, Home Assistant, безопасность, программирование и ещё куча всего.

Если давно хотели научиться запускать собственный софт вместо того, чтобы зависеть от SaaS-сервисов, это точно стоит сохранить.

Источник: github.com/mikeroyal/Self-Hosting-Guide

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Импортируете CSV в Postgres? Используйте COPY или \copy.

Это быстро, потому что данные передаются одной массовой командой с минимальным количеством обменов по протоколу, одним разбором и планированием, прямым преобразованием строк и без накладных расходов на отдельный запрос для каждой строки.

Что важно знать:

FORMAT csv
Включает стандартный разбор CSV: запятые, поля в кавычках и экранированные кавычки.

Список целевых столбцов
Порядок столбцов в CSV редко совпадает с таблицей. Всегда указывайте целевые столбцы в том порядке, в котором они идут в файле. Postgres сопоставляет их по позиции, а не по имени из заголовка CSV.

HEADER / HEADER n
Пропускает строки заголовка. Обычный HEADER пропускает первую строку. Ожидается, что Postgres 19 позволит передавать число, например HEADER 2, чтобы пропускать несколько начальных строк.

DEFAULT 'string'
Позволяет сопоставить специальную строку в CSV, например '__DEFAULT__', с выражением DEFAULT соответствующего столбца.

Неуказанные столбцы
Столбцы таблицы, которые не указаны в списке целевых столбцов, автоматически получают DEFAULT или NULL.

Лишние столбцы в CSV
Postgres выдаст ошибку, если в CSV больше полей, чем указано целевых столбцов. Обрежьте файл или сначала загрузите данные в более широкую промежуточную таблицу.

NULL-значения
В формате csv стандартным представлением NULL является пустая строка без кавычек. Это можно изменить через NULL 'string'.

Обработка ошибок через ON_ERROR и REJECT_LIMIT
Исторически COPY останавливался на первой ошибке преобразования. В новых версиях появились:

ON_ERROR ignore в Postgres 17 — пропускает некорректные строки и сообщает их количество
REJECT_LIMIT n в Postgres 18 — задаёт максимальное число плохих строк при ON_ERROR ignore, после которого импорт будет остановлен
ON_ERROR set_null в Postgres 19 — заменяет некорректное поле на NULL вместо того, чтобы отбрасывать всю строку

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

🔴В 2025 году Россияне заработали 5,3 млрд рублей на арбитраже криптовалют

По данным Минфин 32% граждан покинули своё место работы, поскольку в среднем уже в первый месяц тут можно зарабатывать от 140 000 рублей, а через 2-3 месяца с легкостью выйти на семизначные числа.

Самое смешное, что лишь 8% россиян что-то слышали об этой профессии, хотя все инструкции бесплатно лежат на канале Арбитраж Криптовалют

Там объясняют, как имея телефон и доступ в интернет, заработать свои первые $2000. Причём разжёвывают так доступно, что поймёт даже ребенок. Кстати, на канале сегодня вышла новая рабочая связка!

Быстрее вступайте, пока это бесплатно — /channel/+yFtPq4VlI-k0OWEy

Читать полностью…

Backend Portal | Программирование

PostgreSQL: архитектура и тюнинг SQL-запросов

Погрузись в архитектуру и прокачай оптимизацию запросов одной из самых популярных open source СУБД – PostgreSQL.

🌐 В программе курса:

🤩 Разберём, как работают СУБД вообще и PostgreSQL в частности: что такое MVCC, ACID, WAL, LRU, PPC/TPC и другие фундаментальные понятия архитектуры баз данных

🤩 Получишь теорию и практику EXPLAIN и EXPLAIN ANALYZE на разных типа запросов: без индексов, с индексами, index only, нормализованные и документ-ориентированные данные и json-поля, изменение параметров сессии/конфигурации для ускорения запросов

🤩 Изучишь архитектуру хранения данных в PostgreSQL, типы и особенности индексов, а также полезные советы и трюки оптимизации БД

🤩 Получишь свой собственный выделенный облачный PostgreSQL-сервер (8 vCPU, 12G RAM, 100G NVMe) – предоставляется БЕСПЛАТНО на время обучения + готовый e-commerce датасет TPC-H (миллион пользователей, несколько миллионов заказов на десятки гигабайт)

🗓 Старт курса: 3 сентября. 5 недель обучения.

BackendPortal">Изучить программу и записаться можно здесь.

🤩Кто мы: R&D-центр Devhands, автор курса Николай Ихалайнен, эксперт по СУБД (ex-Percona), со-основатель MyDB, энтузиаст открытого ПО.

Реклама. ИП Рыбак А.А. ИНН 771407709607 Erid: 2VtzquuHE37

Читать полностью…

Backend Portal | Программирование

Microsoft открыла исходный код одного из лучших из своих инструментов для анализа данных с помощью ИИ.

Он называется Data Formulator.

Подключите любой источник — CSV, Postgres, BigQuery или даже URL с актуальными данными, а затем создавайте графики с помощью сочетания перетаскивания и обычного языка.

ИИ-агент сам пишет SQL и выполняет преобразования, а затем выдаёт график, который можно редактировать.

Можно перетаскивать поля на X/Y/Color, закреплять очищенный результат, чтобы последующие запросы не возвращались к исходным данным, создавать ответвления от любого графика для изучения других вариантов и подключать актуальные данные с автоматическим обновлением.

Используйте ключ своей модели, и всё будет работать локально.

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

11 принципов разработки ПО, которые стоило понять гораздо раньше.

1. SOLID — более качественное объектно-ориентированное проектирование
2. DRY — не повторяйся
3. KISS — не усложняй
4. YAGNI — не реализуй то, что пока не нужно
5. SRP — одна ответственность
6. Open/Closed — расширяй, не ломая существующее
7. Dependency Inversion — уменьшай связанность
8. Composition — собирай систему из гибких компонентов
9. Separation of Concerns — разделяй ответственность между частями системы
10. Fail Fast — обнаруживай проблемы как можно раньше
11. Measure First — оптимизируй только то, что действительно имеет значение

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Летняя уборка в базе данных. Теперь пора посмотреть на сами запросы.

pg_stat_statements отслеживает форму запросов, количество вызовов и время выполнения по всей базе. Это самый короткий путь от «база почему-то тормозит» до «вот эти пять запросов съедают большую часть времени».

Включаем pg_stat_statements

Если вы используете Crunchy Bridge, расширение уже доступно по умолчанию и можно сразу переходить к CREATE EXTENSION.

При самостоятельном размещении нужно изменить postgresql.conf и перезапустить PostgreSQL

shared_preload_libraries = 'pg_stat_statements, ...'
pg_stat_statements.track = top


Можно указать top или all. Режим all также учитывает запросы внутри функций и процедур. top используется по умолчанию и отслеживает только запросы, выполняемые клиентами.

Затем включаем расширение для нужной базы

CREATE EXTENSION IF NOT EXISTS pg_stat_statements;


Ищем дорогие запросы

Для такой проверки обычно полезнее смотреть на суммарное время выполнения. Запрос средней тяжести, который вызывается миллионы раз, часто наносит больше вреда, чем один редкий медленный запрос.

SELECT
round(total_exec_time::numeric, 1) AS total_ms,
calls,
round(mean_exec_time::numeric, 2) AS mean_ms,
rows,
query
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 20;


Также стоит смотреть на среднее время и количество строк. Например, последовательное сканирование может проявиться как большое total_exec_time и большое значение rows у запроса, который в норме должен находить одну конкретную запись.

Что означают столбцы

calls — сколько раз запрос выполнялся с момента последнего сброса статистики
total_exec_time и mean_exec_time — суммарное и среднее время выполнения в миллисекундах
rows — общее количество полученных или изменённых строк
query — нормализованный запрос с параметрами вида $1

Статистика копится до ручного сброса

SELECT pg_stat_statements_reset();


Важно помнить, что сброс удаляет всю накопленную историю. Для анализа можно либо сбросить статистику перед заранее известным периодом высокой нагрузки, либо сравнивать текущие данные с сохранённым ранее снимком.

Что делать с найденными запросами

1. Запустить EXPLAIN с реальными параметрами. pg_stat_statements показывает форму запроса, но не план выполнения.
2. Проверить недостающие индексы, сбросы на диск из-за work_mem и слишком большое количество мелких запросов приложения вроде N+1.
3. После деплоя или добавления индекса сбросить статистику, дать системе поработать под реальной нагрузкой и проверить, уменьшилось ли суммарное время выполнения.

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Переименование поля в API изнутри кажется безобидным. Снаружи оно может положить каждый дашборд, который рассчитывал на старое имя.

Любое изменение API попадает в одну из двух категорий, и от этого зависит всё.

Если изменение ломающее, нужно поднимать версию: удаление или переименование полей, добавление обязательных параметров или фундаментальное изменение поведения эндпоинта.

Безопасные изменения можно выпускать без новой версии: добавлять необязательные поля, новые эндпоинты или просто ускорять работу.

Большая часть боли появляется из-за двух противоположных ошибок. Не версионировать вообще — и каждый релиз превращается для пользователей в лотерею. Версионировать всё подряд — и в итоге вы поддерживаете пять версий, а разработчики уже не понимают, какую использовать.

Несколько простых правил помогают держать баланс:

— Показывайте версию явно, например /v1/ в URL, как это делают Stripe и GitHub.
— Используйте семантическое версионирование, чтобы смена мажорной версии сразу означала необходимость изменений в клиентском коде.
— Если версия выводится из эксплуатации, говорите об этом прямо в ответе через заголовок Sunset и давайте 6–12 месяцев на миграцию.

Версия API — это обещание о том, что не изменится.

Нарушать его нужно редко и громко. Никогда — молча.

Какую ошибку вы встречали чаще?

👉 @BackendPortal

Читать полностью…
Subscribe to a channel