backendportal | Unsorted

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

15708

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

Subscribe to a channel

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

SELECT FOR UPDATE в Postgres фактически делает запись

В heap-странице Postgres у каждого tuple есть заголовок header с метаданными.

Когда транзакция выполняет SELECT FOR UPDATE, у найденных tuple (по предикату) обновляется header: они помечаются как залоченные, а атрибут xmax фиксирует XID транзакции, которая поставила лок.

Конкретно выставляются два бита в infomask заголовка: HEAP_XMAX_EXCL_LOCK и HEAP_XMAX_LOCK_ONLY.

Из-за этого страница становится dirty и это также попадает в WAL, который потом может уехать на standby-реплику.

Позже dirty-страница может быть сброшена на диск background writer-ом.

На commit эти биты очищаются.

Забавно, что операция чтения может породить приличный объём write I/O.

👉 @BackendPortal

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

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

Поздравляем, вы на 1 шаг ближе к работе мечты 🥳

Осталось только прочитать этот пост, подписаться на канал и откликнуться на вакансию 😉

Avito Career — место, где Авито делится актуальными вакансиями и стажировками для бэкенд-разработчиков.

Подписывайтесь, чтобы найти ту самую работу ✨

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

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

Если ты активно пользуешься JavaScript Intl API, можно выжать немного больше производительности.

Зацени intl-formatter: маленькая обертка, которая добавляет мемоизацию без настроек и при этом сохраняет тот же интерфейс Intl API. В AdonisJS мы такое используем уже много лет.

Бенчмарки: https://github.com/poppinss/intl-formatter?tab=readme-ov-file#benchmarks

👉 @BackendPortal

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

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

Разработчик выложил проект ShadowStream, систему отслеживания изменений в базе данных (CDC), построенную на PostgreSQL logical replication.

Цель проекта — ловить любые изменения в реальном времени и передавать их в потоковую инфраструктуру.

Как это работает:

- изменения в базе (INSERT, UPDATE, DELETE) сразу перехватываются через logical replication
- события сериализуются в Protobuf и отправляются в Redis Streams для быстрого доступа
- параллельно те же данные архивируются в Kafka для надежного хранения
- Kafka использует grouped consumer'ов: два обработчика работают параллельно, плюс резервная группа с отдельным offset
- поверх всего в Django Admin добавлена визуализация gRPC-вызовов

Исходники открыты на GitHub

Проект может пригодиться тем, кто работает с потоковой обработкой данных, аналитикой, репликацией или интеграцией микросервисов. 🙂

👉 @BackendPortal

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

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

Курс по git на русском прямо в браузере

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

👉 @BackendPortal

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

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

Изоляция рунета ближе, чем ты думаешь

Loading

██████████████] 99%


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

Чтобы в одночасье не лишиться доступа к свободному Интернету, просто сохрани Only Hack.

Тут профессиональный хакер делится фишками, с которыми доступ к глобальной сети у тебя будет даже в случае ядерного апокалипсиса.

Не жди момента «Х». Перестрахуйся подпиской.

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

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

Бэкпрешер — ключевая вещь для нормально работающей инфраструктуры.

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

Некоторые продукты просто дают ресурсам выгореть до нуля и в итоге падают в креш или фейл-состояние (OOM и так далее). Реализовать такое поведение проще всего, но дальше начинаются каскадные проблемы, которые могут уложить всю систему и даже привести к потере данных. Так себе вариант.

Подход получше — когда каждый компонент сам отдаёт бэкпрешер своим клиентам. Смысл в том, что если сервис видит, что работает на пределе (лимит подключений, забиты все буферы памяти и прочее), он сообщает об этом клиентам: через явные сигналы или, например, отклоняя новые подключения. То есть он сохраняет своё здоровье ценой того, что часть запросов будет замедлена или отклонена.

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

👉 @BackendPortal

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

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

Go-разработчики обсуждают экспериментальный акторный рантайм, через который прогнали 10 млн сообщений и получили около 30 млн операций в секунду. Проект пока не готов для продакшена, но показал, что базовый паттерн работает эффективно.

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

Схема проста:
один актор = горутина + mailbox, состояния — приватные, остальная программа общается только через Send(msg), а сам актор крутится в цикле обработки входящих сообщений.

https://github.com/anthdm/hollywood

👉 @BackendPortal

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

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

Крыса следит за твоими эндпоинтами, чтобы тебе не пришлось 🐁

statui — TUI-дашборд для проверки здоровья API.

Следи за эндпоинтами, латентностью и фейлами в реальном времени прямо из терминала.

Написан на Rust и собран с помощью ratatui

Тестим здесь: https://github.com/Mohamed-Badry/statui

👉 @BackendPortal

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

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

Анатомия фрейма WebSockets

Максимальный размер заголовка всего 14 байт, что делает WebSockets более эффективным для двунаправленных сценариев (например, чаты, игры) по сравнению с long polling, где есть накладные расходы из-за HTTP-заголовков.

Максимальный размер сообщения может достигать 2^63 байт.

Разумеется, поскольку WebSockets работает поверх TCP, мы сталкиваемся с проблемой head-of-line blocking.

👉 @BackendPortal

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

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

Добавление индексов критично для производительности базы, но не всегда есть смысл индексировать вообще все строки.

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

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

👉 @BackendPortal

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

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

⚡️ ВАЙБ-КОДИНГ теперь в Telegram!

Ребята сделали крутейший канал, где на наглядных примерах и понятном языке рассказывают как войти в новую эру разработки с ИИ, делятся полезными фишками и инструментами

Подписывайтесь: @vibecoding_tg

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

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

Ты реально можешь превратить свой терминал в текстовый редактор.

Есть open-source тулза под названием Fresh. Ставишь один npm-пакет, запускаешь команду fresh и твой терминал мгновенно превращается в современный редактор.

Можно открывать файлы.

Редактировать папки.

Использовать командную палитру.

И даже получать фичи, очень похожие на VS Code, но прямо внутри окна терминала.

Проект просто дикий. Об этом явно должны знать больше людей.

Пользуемся

👉 @BackendPortal

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

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

DDD — это концепция, которую я часто вижу недооценённой, хотя по моему опыту она оказалась реально полезной.

Часто, когда говорят про DDD, сразу думают про bounded contexts, aggregates, сущности, value objects.

И это нормально. Но я считаю, что сердце DDD не в архитектуре, а в языке.

Единый (Ubiquitous) язык — это не красивый словарик и не набор умных терминов.
Это семантическое соглашение между бизнесом и технологиями.

Живой контракт, который определяет, как мы думаем, как называем вещи и как решаем проблемы.

Что такое Единый язык на самом деле

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

Не в теории, не на стикерах, а в коде, в разговорах и в документации.

Например:

Если бизнес говорит «подписка», а в коде у тебя «membership».
Если бизнес говорит «фактическая отмена», а в коде используется «softDelete».
Если бизнес различает «клиента» и «потребителя», а в модели у тебя везде просто «User».

Значит, у тебя нет Единого языка.

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

Как ни крути, софт — это отражение бизнеса.

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

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

Единый язык как раз и пытается убрать этот разрыв.

Он делает так, чтобы домен существовал и в голове у бизнес-эксперта, и в твоём редакторе кода.

Как это выглядит в реальном проекте


Например, если бизнес говорит:

«Заказ может перейти в статус “Одобрен”, только если платёж подтверждён».

Твоя модель должна отражать это напрямую:

order.approve(paymentConfirmation);


А не вот так:

order.validate();
order.setStatus(3);


Единый язык можно проверять так:

Код выражает смысл?
Или он выражает только реализацию?

Почему его так сложно внедрять

Честно, точно сказать сложно. Из того, что я видел, — это сильно бьёт по многим разработчикам.

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

И ещё важный момент

Единый язык — это не религия.

Его не обязательно применять в каждом проекте и в каждой команде.

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

И это нормально.

DDD — это не догма, это инструмент.

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

Важно не «делать DDD», а моделировать софт так, чтобы команда могла лучше думать и лучше строить.

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

👉 @BackendPortal

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

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

Когда между идеей и продом — преград нет!


В VK любят решать сложные и масштабные задачи, а ещё — быстро реализовывать идеи. Компания рассказала, каких принципов придерживается команда в работе и какими результатами гордится. Переходите по ссылке, там много интересного!

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

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

Практический Docker Roadmap

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

- Как запускать разные типы контейнеров (веб-приложения, CLI-утилиты, базы данных и т.д.)
- Как перечислять, инспектировать и управлять локальными контейнерами
- Как выполнять команды внутри контейнеров и отлаживать простые проблемы
- Как обновлять контейнерные образы для stateless и stateful приложений
- Как собирать контейнерные образы как профи
...и несколько других тем

https://labs.iximiuz.com/roadmaps/docker

👉 @BackendPortal

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

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

Проверяет наличие электронной почты без отправки письма.

https://github.com/reacherhq/check-if-email-exists/

👉 @BackendPortal

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

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

Представь, ты стримишь изменения из Postgres в Elasticsearch на Go. В деве всё работает стабильно. Потом растёт трафик, и внезапно сервис перестаёт вывозить…

Профилируешь и упираешься в JSON-сериализацию.

Каждый документ, который уходит в Elasticsearch, нужно закодировать. Когда событий тысячи в секунду, эти микросекунды начинают быстро накапливаться. Стандартная encoding/json удобная, но она сильно завязана на рефлексии.

Рефлексия удобна, потому что универсальна, но за неё платишь скоростью. Это почти всегда медленнее, чем когда структура известна на этапе компиляции.

И да, в любом языке почти никогда нет “одной библиотеки на задачу”. Люди постоянно переписывают одно и то же, и нередко делают быстрее, чем дефолт из коробки.

Так что вместо стандартной encoding/json можно взять пакет jsoniter. По бенчмаркам: декодирование среднего payload у стандартной либы занимает 35 510 ns/op и делает 99 аллокаций. У jsoniter это 5 623 ns/op и всего 3 аллокации. То есть больше чем в 6 раз быстрее и на 97% меньше аллокаций.

Дичь.

Это не значит, что надо срочно переписывать код. Но если у тебя JSON-сериализация в топе на пламеграфе :) переход на jsoniter (или на то, что в текущий момент самое эффективное) может дать ощутимый прирост

И такое есть вообще в каждом языке и почти под любую работу. Пусть этот пост будет напоминалкой: иногда стоит смотреть дальше дефолтов :)

Надеюсь, пригодится. 👍

👉 @BackendPortal

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

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

Акторная модель это, по сути, подход, где между процессами/потоками (или акторами) нет общей памяти.

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

Rust красиво ложится на это через один только трейт Send в трейте актора.

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

👉 @BackendPortal

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

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

Этот инструмент экономит время на ручном прописывании API.
Вставляешь JSON — на выходе сразу получаешь TypeScript-код.

http://app.quicktype.io

👉 @BackendPortal

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

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

Команды lsof в Linux, которые реально экономят девопсам часы отладки:

🔸Кто держит порт

lsof -i :5000

Показывает процесс, слушающий порт 5000.

🔸Все сетевые подключения
lsof -i

Выводит процессы с активными коннектами.

🔸Все открытые файлы пользователя
lsof -u username

Показывает всё, что открыл указанный юзер.

🔸Какие файлы использует процесс
lsof -p 1234

Выводит все файлы, открытые PID 1234.

🔸Какой процесс держит файл
lsof /var/log/syslog

Показывает, кто именно держит этот файл.

🔸Все TCP-подключения
lsof -i TCP


🔸Все UDP-подключения
lsof -i UDP


🔸Что открывает конкретная команда
lsof -c nginx

Список файлов, которые держат процессы nginx.

🔸Удалённые файлы, которые всё ещё занимают место
lsof | grep deleted

Находит файлы, удалённые с диска, но всё ещё открытые процессами.

🔸Только IPv4
lsof -i 4


🔸Кто лезет в директорию
lsof +D /var/log

Показывает процессы, которые обращаются к файлам внутри.

🔸Мониторинг сетевой активности в реальном времени
lsof -i -r 2

Обновление каждые две секунды.

🔸Про-фича: комбинируй флаги для точечной диагностики:
lsof -u root -i TCP:80

Покажет все подключения к порту 80 от root.

👉 @BackendPortal

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

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

Заказчик кинул с деньгами? Отправьте его в суд.

Чаще из-за ошибок в договоре правда может быть не на вашей стороне. 8 пунктов для безопасного договора — проверьте прямо сейчас.

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

Подписывайтесь на LAWLEGKO — канал практикующего юриста Инны Вялковой. Новости от государства и юридические тонкости простым языком.

Или передайте всё юристам: договоры, налоги, реклама — юридическое абонентское сопровождение.

Вы занимаетесь работой, юристы LAWLEGKO — вашим спокойствием.

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

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

Подожди, так есть децентрализованная альтернатива GitHub? 😲😲😲

Проект называется Tangled, и его идея в том, чтобы дать тебе полное владение своим кодом, без привязки к центральной платформе.

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

Функционал привычный: git-воркфлоу, issues, pull requests, комментарии. Но при этом ты контролируешь инфраструктуру и данные.

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

ЗАТЕСТИТЬ

👉 @BackendPortal

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

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

Интерактивный гайд о шардировании баз данных, как это работает для реляционных баз.

Каждому инженеру стоит понимать базовые принципы и основные сложности шардирования. Эта статья как раз про это и предназначена.

Читаем здесь

👉 @BackendPortal

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

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

Вот так обычно выглядит мой эндпоинт /health

👉 @BackendPortal

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

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

freeCodeCamp выкатили бесплатный курс по Git и GitHub для новичков. За 1 час разберёшь базу: ветки, слияния, pull request’ы и базовую командную работу. Отличный быстрый вход для тех, кто откладывал Git «на потом».

Git-курс тут

👉 @BackendPortal

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

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

Одна вещь, о которой почти каждый из нас задумывается в какой-то момент карьеры в техе:

Лучше быть дженералистом?
Или лучше быть специалистом?

Правда в том, что ни одна из этих позиций, доведённая до крайности, нормально не работает в реальных командах.

Быть только дженералистом может быть опасно: ты знаешь по чуть-чуть про всё, но не можешь копнуть глубже там, где это реально важно.

Быть только специалистом тоже риск: ты держишь одну область с хирургической точностью, но слишком зависишь от команды во всём остальном.

Вот тут как раз появляется концепция T-образного профиля.

Что такое T-образный профиль?

Буква T описывает две оси.

Горизонтальная перекладина.
Широкий кругозор. Скиллы, которые позволяют тебе ходить по разным областям и не стопориться.
Знать достаточно про frontend, devops, тестирование, архитектуру, базы данных и так далее.

Вертикальная ножка.
Глубина в какой-то конкретной области.
Твоя специализация: например Java, безопасность, базы данных, оптимизация, cloud, предметная область и так далее.

T-образный профиль комбинирует оба измерения.
Достаточная широта, чтобы работать в команде.
Реальная глубина, чтобы давать ощутимую добавочную ценность.

Почему это вообще так важно?

Потому что сейчас системы сложные.

Есть микросервисы, которые завязаны на пайплайны.
Есть frontend, который влияет на решения в backend.
Есть архитектура данных, которая влияет на каждую фичу.
Есть инфраструктурные решения, которые меняют дизайн.

Разработчик, который знает только своё, очень быстро выпадает из общего контекста.

А разработчик, который по верхам про всё, в итоге почти ни на что важное не влияет.

T-образный профиль это как раз точка баланса.

Как T-образный профиль выглядит на практике?

Чистый дженералист говорит:

Я умею пользоваться Spring, NestJS, GitHub Actions, Docker, ну плюс-минус.

Чистый специалист говорит:

Я знаю всё про Spring Boot, но не спрашивай меня про API Gateway или React.

А человек с T-образным профилем говорит:

Моя сильная сторона это backend на Java и Spring. Но я достаточно понимаю во frontend, devops, системном дизайне и observability, чтобы нормально сотрудничать, интегрироваться и принимать более взвешенные решения.

В этом разница между девом, который просто пишет код, и девом, который приносит решения.

Самая частая ошибка, я сам так делал:

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

Или путать быть специалистом с вообще не смотреть за пределы своего стека.

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

И широту даёт не установка новых тулз,
а способность понимать систему целиком.

Мой взгляд на то, как этим путём идти.

Как всегда, всё зависит от твоего контекста и целей.

Но в реальности я чаще вижу вот что:

Почти все стартуют как дженералисты.
Потом находят для себя какую-то специализацию.
К моменту, когда становимся сеньорами, как правило уже есть T-образный профиль.
Если идёшь в архитектуру или в tech lead, там уже ждут расширенную T: большая широта и со временем несколько глубин.

Важно вот что.

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

Старайся потихоньку собирать T-образный профиль:
здоровый микс между широкой картиной и реальной глубиной.

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

👉 @BackendPortal

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

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

GitHub теперь в Telegram!

Самый прогерский канал, где за 10 минут ты научишься:

/ Пробив по фото и номеру в ТГ
// Как взломать вебку подруги
/// Мануал по OSINT разведке


Подписывайся, нас уже сотни тысяч: >@GitHub

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

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

Этот трюк с GitHub PR надо знать

Просто добавь “0” перед словом “github” в URL любого Pull Request, и у тебя откроется полноценный PR-вьювер, который подсвечивает каждую строку diff’а цветом в зависимости от того, сколько внимания от человека она, скорее всего, требует.

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

Очень полезный способ быстрее проводить code review и находить то, что обычно легко пропустить.

👉 @BackendPortal

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

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

Раньше у GitHub была монолитная база данных, которая держала 950 000 транзакций в секунду 🤯

Но по мере роста компании эта база превратилась в... сами понимаете что. Логичное решение = развалить монолит на несколько меньших баз. На деле все оказалось гораздо сложнее, чем они думали.

Я как раз нашёл видео, где разбирают весь их процесс: какие шаги они предпринимали, как сделали миграцию без даунтайма и при этом ничего не сломали в существующем функционале.

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

👉 @BackendPortal

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