backendportal | Unsorted

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

15708

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

Subscribe to a channel

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

Kite — это современная лёгкая панель управления для Kubernetes, которая предоставляет метрики в реальном времени, поддерживает работу с несколькими кластерами, редактирование YAML и управление ресурсами через удобный интерфейс.

https://ku.bz/95jvldnx_

👉 @BackendPortal

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

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

Пользователь сообщил: "Поиск работает медленно." Результаты вернулись за 8 секунд.

Кластер Elasticsearch был в порядке. Запрос оптимизирован. Индексы — здоровые.

Я проследил весь запрос от начала до конца:

Frontend → API: 45 мс

API → Elasticsearch: 180 мс

Запрос в Elasticsearch: 220 мс

API → Frontend: 7 480 мс

API сериализовал 50 000 результатов в JSON до пагинации.

Забирал все результаты

Конвертировал в JSON

Отправлял всё на фронт

Фронт показывал 10 элементов

Фикс: делать пагинацию на уровне Elasticsearch, а не в API.

Новый отклик: 312 мс.

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

👉 @BackendPortal

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

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

#вакансия #удаленка #fulltime #backend
Backend Engineer (Nodejs + Python) — сначала быстро, потом

Мы делаем продукт для BTC-майнинга. Пишем веб-бэкенды на Node.js + Python, гоняем клиентский трафик и телеметрию, храним метрики в Clickhouse, биллинг в Postgres. Нам нужен человек, который быстро доставляет ценность, не боится грязных MVP и умеет превращать их в чистые, наблюдаемые сервисы.

Формат:
- Full-time, remote-friendly (UTC±2 ок).
- Язык: RU на уровне команды.
- Техническая команда: веб-фулстэк, Rust-бэкенд, CTO.
- Решения принимаем быстро, мерджим часто, катим сразу, рефакторим планово.
- Вилка: $3000-$6000

Чем заниматься:
- Проектировать и делать веб-API (REST/WebSocket) для кабинета и админки: биллинг, выплаты, нотификации, вспомогательные сервисы.
- Интеграции: Clerk (auth, impersonation), Postgres (RLS, миграции), ClickHouse (агрегаты статистики), Redis (кэш/lock), R2/S3 (CDN).
- Наблюдаемость: метрики/логи/трейсинг, дашборды и алерты (Prometheus/Grafana/Loki).
- Производительность: индексы, EXPLAIN, профилирование, backpressure.

Технологии (основное):
- Node.js (TypeScript, Express/Nest/Fastify), Python (FastAPI/aiohttp), async I/O.
- Postgres (SQL, триггеры и хранимки, индексы, планировщик), ClickHouse, Redis
- Docker, GitHub Actions.
- Линтеры/тайпчекеры: ESLint/Prettier, ruff/black/mypy, pyright.

Как мы работаем («быстро на костылях → потом нормально»):
- Спринт 1–3 дня: узкий MVP, минимум слоёв, прямые SQL/SDK, фича-флаг, happy-path e2e.
- Дожим после релиза: типизация, валидация (Pydantic/Zod), идемпотентность, ретраи с backoff, метрики, алерты, интеграционные тесты, миграции и docs (короткие ADR).
- В PR ждём: чёткие таймауты, поведение при ошибках, метрики и лог-ключи для дебага.

Требования (must-have):
- 4+ лет в бэкенде, реально продуктивен в Node.js и/или Python, готов работать в обоих.
- Сильный SQL/Postgres: индексы, EXPLAIN, блокировки, миграции; понимаешь, где узкие места.
- Асинхронщина, очереди, кэш, идемпотентные API, ретраи/таймауты/backoff, at-least-once/дедуп.
- Наблюдаемость как привычка: метрики до кода, лог-корреляция, дешёвые SLO.
- Умение быстро «прибить костыль» и потом довести до прод-качества.

Будет плюсом:
- ClickHouse, высоконагруженная телеметрия.
- Понимание домена: финтех, крипто.
- Pulumi, Prometheus/Grafana/Loki.
- Supabase (RLS), Clerk, R2/S3.

Что считаем успехом (30/60/90):
- 30 дней: 3–4 фичи в проде, метрики/алерты на свои сервисы, первое снятие узкого места (индекс/кэш).
- 60 дней: закрыт e2e «регистрация → начисления → баланс», выплаты в sandbox, стабилизирован оффлайн-детект.
- 90 дней: берёшь end-to-end зону (Billing или Notifications), выжигаешь технический долг v0, покрытие интеграционными тестами ≥60% на своём коде, минус 3 главных перф-бутылочных горлышка.

Кому точно к намЖ
- Ты делаешь PR в тот же день, не ждёшь идеального ТЗ.
- Тебя не пугает переписывать свой код через неделю, если так быстрее для бизнеса.
- Любишь цифры: latency, error-rate, p95, RPS — не «где-то там», а в твоём дашборде.

Кому лучше не к нам:
- Нужен «архсовет на 6 встреч» перед Hello World.
- Болит от временных решений и фича-флагов.
- Не готов брать на себя поддержку того, что выкатил.


Процесс найма:
- Выполнение тестового задания.
-60 мин созвон: разбираем тестовое задание, короткий deep-dive по одному твоему проекту (где ты сначала сделал «как попало», а потом правильно).

Финальное собеседование с CEO.

-Как откликнуться: пришлите 1–2 ссылки на репо/PR + 3–5 предложений про ваш «костыль → нормальное решение» (какие компромиссы, какие метрики улучшили).

— Готовы «возить углём» и шипить быстро? Поговорим.

Telegram: @dishsh

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

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

Docker это не мини-виртуальные машины

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

1. Docker — это не виртуалка

Когда ты запускаешь docker run ubuntu, ты не создаешь «мини-компьютер».

Никакого нового ядра нет.
Контейнер использует то же ядро, что и хост — просто в изоляции.

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

2. Изоляция достигается через namespaces

Namespace говорит системе:
«Этот процесс видит только вот этот кусочек мира».

Примеры:

PID namespace — контейнер думает, что его процесс 1 — единственный.

NET namespace — у контейнера своя сеть и интерфейсы.

MNT namespace — своя файловая система с примонтированными ресурсами.

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

3. Cgroups ограничивают ресурсы

Контейнер может считать, что владеет всей машиной…
но control groups (cgroups) ставят реальные лимиты:

- максимум CPU (--cpus=2)
- максимум памяти (--memory=1g)
- лимиты на I/O или количество процессов

Если контейнер пытается выйти за рамки, ядро его просто отрубает 😅

4. Файловая система и слои (UnionFS)

Образ это не один файл, а набор слоев.
Каждая инструкция RUN, COPY или ADD в Dockerfile создает новый слой.

Когда контейнер запускается, поверх монтируется временный слой для записи.

Вот почему все изменения исчезают после удаления контейнера —
временный слой просто выкидывается.

5. Как контейнеры общаются между собой

Docker создает виртуальные сети внутри хоста.
Каждый контейнер получает свой внутренний IP.

Когда ты используешь --link или docker-compose,
ты просто задаешь внутренние DNS-имена.

Во внешний мир трафик не выходит,
пока ты сам не пробросишь порт через -p 8080:80.

6. Безопасность -изоляция не идеальна

Поскольку ядро общее, защита не такая жесткая, как у виртуалки.

Для этого и придуманы штуки вроде:

gVisor — песочница для системных вызовов
SELinux или AppArmor
rootless Docker

Если запускаешь сторонние контейнеры — лучше использовать их.

Так что же такое Docker на самом деле?

Это оркестратор изоляции:

- прячет ресурсы через namespaces
- ограничивает их через cgroups
- управляет файловой системой через UnionFS
- эмулирует сеть через network namespaces

Он ничего не эмулирует по-настоящему,
он просто создает очень правдоподобную иллюзию 👏

Понимание этого полностью меняет подход к дебагу и оптимизации.

Контейнер жрет всю оперативку? → смотри cgroups.
Не может подключиться к сети? → проверь network namespace.
Билды весят по 5 ГБ? → разбери слои образа.

👉 @BackendPortal

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

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

Паттерны микросервисов для Backend-разработчиков

Для backend-разработчика знание паттернов микросервисов — это базовый навык.
Он делает тебя сильнее как инженера и помогает уверенно проходить собеседования.
Сохрани, выучи и применяй, и ты будешь на шаг впереди остальных.

🔸Application Architecture Patterns
Высокоуровневые схемы структуры систем:
- Monolithic architecture
- Microservice architecture

🔸 External API Patterns
Подходы к проектированию API для сторонних разработчиков:
- API Gateway
- Backends for Frontend (BFF)

🔸Decomposition Patterns
Как разделить большую систему на независимые сервисы:
- Decompose by business capability
- Decompose by subdomain

🔸Testing Patterns
Подходы к проверке корректности микросервисов:
- Consumer-driven contract test
- Consumer-side contract test
- Service component test

🔸Messaging Style Patterns
Схемы асинхронного взаимодействия сервисов:
- Messaging
- Remote Procedure Invocation (RPI)

🔸Security Patterns
Решения для аутентификации и авторизации:
- Access Token

🔸Reliable Communication Patterns
Техники обработки сбоев при взаимодействии сервисов:
- Circuit Breaker

🔸Cross-cutting Concerns Patterns
Обработка общих функций вроде логирования и метрик:
- Externalized Configuration
- Microservice Chassis

🔸 Service Discovery Patterns
Как сервисы находят друг друга в сети:
- 3rd Party Registration
- Client-side Discovery
- Self-registration
- Server-side Discovery

🔸Observability Patterns
Как понять, что происходит внутри системы:
- Application Metrics
- Audit Logging
- Distributed Tracing
- Exception Tracking
- Health Check API
- Log Aggregation

🔸Transactional Messaging Patterns
Обеспечение согласованности данных между сервисами:
- Polling Publisher
- Transaction Log Tailing
- Transactional Outbox

🔸Deployment Patterns
Подходы к безопасному релизу новых версий сервисов:
- Deploy as Container
- Deploy as VM
- Language-specific Packaging
- Service Mesh
- Serverless Deployment
- Sidecar

🔸Data Consistency Patterns
Как управлять целостностью данных в распределённых БД:
- Saga

🔸Business Logic Design Patterns
Как организовать доменную модель и бизнес-логику:
- Aggregate
- Domain Event
- Domain Model
- Event Sourcing
- Transaction Script

🔸Refactoring to Microservices Patterns
Как поэтапно мигрировать монолит в микросервисы:
- Transaction Script
- Strangler Application

🔸Querying Patterns
Как извлекать данные из нескольких сервисов:
- API Composition
- CQRS (Command Query Responsibility Segregation)


Освой эти паттерны и ты поймёшь, как проектировать надёжные, масштабируемые и поддерживаемые системы.

👉 @BackendPortal

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

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

30 октября приглашаем на MWS Cloud Day: первую технологическую конференцию MWS про облака.

Вас ждёт:

• Премьера MWS Cloud Platform — нового облака собственной разработки от MWS
• Доклады о технологиях и архитектурных решениях под капотом нового облака
• Выставочная зона с демостендами и кастомным мерчом
• Панельная дискуссия с ведущими экспертами отрасли
• Афтепати и неформальное общение вечером

📍Где и когда:
30 октября
Москва, кинотеатр «Художественный» + онлайн

Участие бесплатное, но нужно зарегистрироваться

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

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

Лёгкий сервер, мониторинг Docker и система алертов

https://github.com/henrygd/beszel/

👉 @BackendPortal

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

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

На одном собеседовании по системному дизайну я использовал Kafka.
На другом — Redis.
На третьем — S3.

Но на всех собеседованиях я использовал базы данных.

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

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

Не отвлекайся на блестящие новые компоненты. Очереди, кэши и оркестраторы приходят и уходят.
А базы данных остаются.

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

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

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

Изучи базы данных глубоко.
Всё остальное просто оптимизация.

👉 @BackendPortal

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

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

Бэкэнд Go с открытым исходным кодом, подписками в реальном времени, встроенной базой данных, пользовательским интерфейсом администратора

https://github.com/pocketbase/pocketbase/

👉 @BackendPortal

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

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

Как пишет автор: «...эта статья лишь поверхностно касается темы кеширования...». И правда, кеширование — тема интересная и глубокая.

Советую почитать эту интерактивную статью, а потом кейсы в конце. Они хорошо показывают, как кеширование применяется на практике.

planetscale.com/blog/caching

👉 @BackendPortal

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

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

В это репо собраны клоны 100+ популярных приложений вроде Netflix, Airbnb, Spotify, Amazon и других — вместе с исходниками и туториалами.

Отличный способ учиться, повторяя реальные проекты, и прокачивать скилл разработки через практику :)

👉 @BackendPortal

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

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

На GitHub появился gocraft от telman03 — инструмент, который генерирует полноценный Go-бэкенд с уже настроенной авторизацией, базой данных, gRPC, Docker, Swagger и мониторингом. Проект создан, чтобы ускорить старт разработки и избавить от рутины при создании сервисов.

gocraft позволяет собрать структуру проекта под себя: выбрать фреймворк (Gin, Echo или Fiber), нужные БД (PostgreSQL, MySQL, SQLite, MongoDB, Redis) и сразу получить рабочее окружение. Безопасность тоже продумана — есть JWT, валидация, защита от SQL-инъекций и rate limiting.

Проект поддерживает REST, WebSocket и gRPC, умеет генерировать Swagger-документацию и контейнеризируется через Docker. Всё с открытым кодом и MIT-лицензией.

Репозиторий: github.com/telman03/gocraft

👉 @BackendPortal

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

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

Почему Google хранит миллиарды строк кода в одном репозитории

В Google используется монорепозиторий — единый источник правды для десятков тысяч разработчиков по всему миру. В нём лежит около 95% всего исходного кода компании. Исключения — только проекты вроде Chrome и Android, у которых свои репозитории.

Изначально Google пользовались CVS, потом перешли на Perforce, а позже заменили его на собственную систему Piper. По данным 2016 года, репозиторий содержал более 2 миллиардов строк кода и получал около 40 000 коммитов в день от более чем 10 000 инженеров.

Разработка ведётся по trunk-based модели, то есть все изменения интегрируются прямо в основную ветку после ревью. Такой подход помогает избежать адского merge hell и держит код синхронизированным.

Перед коммитом система Tricorder автоматически проверяет код и выдаёт первый фидбэк. А для ручного ревью используется инструмент Critique.

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

Преимущества такого подхода:

единая версия для всего кода

простое и безопасное шаринг кода между командами

упрощённое управление зависимостями

атомарные коммиты

возможность делать масштабные рефакторинги

прозрачность и гибкость в распределении ответственности

высокая видимость кода и сотрудничество между командами


Минусы:

нужно разрабатывать и масштабировать собственные инструменты, следить за “health” кодовой базы и бороться с её растущей сложностью — например, с неочевидными зависимостями.


👉 @BackendPortal

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

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

Эволюция менеджера буферов в PostgreSQL

Буферный менеджер PostgreSQL отвечает за кэширование 8KB страниц с диска в общем пуле памяти. Для поиска используется хеш-таблица (через BufferTag → buffer ID), а для вытеснения страниц — алгоритм clock-sweep.

Ранние версии делались с прицелом на простоту в многопроцессной архитектуре, но страдали от грубой системы блокировок — один глобальный лок быстро становился узким местом под нагрузкой.

За 30 лет модель конкурентного доступа сильно изменилась:
от глобального мьютекса → к локам на каждый буфер → затем к разделённым (partitioned) локам → и, наконец, к атомарным операциям, которые позволяют большинству структур работать вообще без блокировок.

Это кардинально снизило конкуренцию за ресурсы и дало PostgreSQL отличную масштабируемость под OLTP-нагрузками, при этом сохранив надёжность при доступе к shared memory.

Философия дизайна проста:

- держать локи как можно меньше по времени
-абстрагировать различия железа через атомики
- устранять реальные bottleneck’и с помощью профилирования и точечных патчей

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

👉 @BackendPortal

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

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

👨‍💻 Продуктивный вайб-кодинг

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

Павел Федотовский, руководитель разработки low-code решений в Яндекс Go, делится в своей статье системным подходом, как превратить AI в действительно полезный инструмент, а не просто модную игрушку.

Что внутри:
🔹 Как с помощью метапромптинга научить модель следовать вашим правилам код-ревью.
🔹 Способ заставить AI самому вести и постоянно обновлять документацию по проекту.
🔹 Модель «Архитектор-Исполнитель» для написания целых сервисов с нуля.

Логичный, инженерный подход к работе с LLM. Рекомендуем.

➡️ Прочитать статью можно здесь

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

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

⚡️ На Stepik вышел курс по Linux

Ребята сделали крутейший курс по Linux, где понятным языком, шаг за шагом, на реальных примерах и с наглядными схемами обучают работе с этой ОС

Внутри 20+ модулей: от установки Linux и работы с файлами до сетей, прав, дисков, процессов, автоматизации на Bash и многого другого. Всё сразу закрепляется на практике (200+ заданий с автопроверкой).

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

Есть бесплатные демо-уроки для ознакомления. В ближайшие 48ч курс доступен со скидкой 25% по промокоду «25LINUX»: открыть курс на Stepik

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

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

Вчера пробовал cloudflared от Cloudflare, чтобы пробросить локально запущенное API для теста интеграции с GitHub — честно, 10/10.

Даже аккаунт Cloudflare не нужен.

Установил пакет и запустил:

cloudflared tunnel --url http://localhost:8000


И всё.

Раньше всегда пользовался ngrok, но решил попробовать это — понравилось, что для теста не нужен аккаунт.

👉 @BackendPortal

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

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

Когда backend dev сделал frontend

- он отзывчивый из коробки
- загружается за 0,00004 секунды

👉 @BackendPortal

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

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

Оптимизировали Docker-образ: минус 540 МБ!

Ужали размер образа с 588 МБ до 47.7 МБ — почти в 12 раз меньше.

Что сделали:

- Перешли на Python 3.9-alpine — лёгкий и быстрый базовый образ.
- Объединили RUN-инструкции, чтобы не плодить лишние слои.
- Добавили .dockerignore, чтобы не тянуть в сборку кеши и временные файлы.
- Перешли на multi-stage build: на выходе только то, что реально нужно в проде.

Результат:

Образ стал на 91.89% меньше
Контейнеры стартуют быстрее
Деплой стал легче, а сборка — быстрее

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

👉 @BackendPortal

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

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

Здесь разбирают, как работают key-value базы данных и как можно сделать свою с нуля. (на Go)

👉 @BackendPortal

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

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

Парень реализовал свой аналог Redis на Go 👍

Фичи:

- Асинхронный (на epoll) и синхронный (на goroutine) серверы
- Полная поддержка протокола RESP
- Базовые команды: PING, SET, GET, DEL, TTL
- Готов к запуску в Docker для удобного деплоя

👉 @BackendPortal

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

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

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

Недавно нашёл Tiny RDM — лёгкое и удобное десктоп-приложение для работы с Redis. Построено на WebView2, не тянет встроенный браузер, интерфейс чистый и понятный. Все операции с ключами: добавление, удаление, просмотр, редактирование

Поддерживает SSH, SSL, HTTP, SOCKS5, встроен редактор Monaco, как в VS Code. Есть разные форматы просмотра данных, мониторинг команд в реальном времени и slow logs для анализа производительности.

Работает на Windows, macOS и Linux, есть светлая и тёмная тема.

👉 @BackendPortal

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

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

У больших компаний десятки сервисов, сотни сотрудников и свои правила безопасности. Каждый новый аккаунт в облаке — это лишний пароль, риск и головная боль для IT-отдела. Чтобы от этого избавиться, мы реализовали федеративный вход в MWS Cloud Platform.

В новой статье рассказываем:

⏺️как работает федерация в MWS и причём здесь SSO;
⏺️почему мы выбрали модель syncless, а не синхронизацию пользователей;
⏺️как маппинг атрибутов позволяет гибко настраивать права доступа пользователей в MWS Cloud Platform;
⏺️зачем это бизнесу.

Федерация превращает облако в естественное продолжение вашей IT-инфраструктуры без лишних логинов и с полным доверием к вашему IdP.

⏩Читать статью

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

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

Используем insteadOf в Git для Замены HTTPS-адресов на SSH

При работе с Git-репозиториями вы часто сталкиваетесь с URL-адресами в формате HTTPS, особенно при клонировании из GitHub, GitLab или других хостинг-провайдеров. Однако, если вы предпочитаете использовать SSH для аутентификации (что часто удобнее с аутентификацией по ключам), ручное изменение URL-адресов может быть утомительным. Кроме того, это может быть ещё сложнее при работе с субмодулями.

Конфигурационная опция Git insteadOf предлагает элегантное решение, автоматически переписывая URL-адреса «на лету»:

git config --global url."git@github.com:".insteadOf "https://github.com/"
git config --global url."git@gitlab.com:".insteadOf "https://gitlab.com/"
git config --global url."git@bitbucket.org:".insteadOf "https://bitbucket.org/"


Вы также можете настроить более конкретную проверку и выбрать только определённые репозитории или сервисы. Например, если вы хотите заменить HTTPS-адреса некоторых репозиториев, вы можете сделать следующее:

git config --global url."git@github.com:username/".insteadOf "https://github.com/username/"


После настройки Git будет автоматически переписывать URL:

# Следующая команда
git clone https://github.com/user/repo.git

# Станет эквивалентной
git clone git@github.com:user/repo.git


Перезапись происходит прозрачно. Вы по-прежнему можете использовать HTTPS-адреса в командах, документации или при копировании из веб-интерфейсов.

Ещё один вариант использования insteadOf — добавление аутентификации к URL. Например, если вы хотите использовать определённого пользователя для всех запросов Git, вы можете сделать следующее:

git config --global url."https://<token>@github.com/".insteadOf "https://github.com/"


👉 @BackendPortal

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

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

Нашёл классную альтернативу Postman и Insomnia — Yaak.

Это лёгкий и быстрый инструмент для тестирования API, написанный на Tauri, Rust и React. Работает офлайн, не сливает данные и поддерживает REST, GraphQL, gRPC, WebSocket и другие протоколы.

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

Репозиторий: github.com/mountain-loop/yaak

👉 @BackendPortal

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

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

Вышел свежий эпизод шоу Backend Engineering, посвящённый теме HTTP Graceful Shutdown (корректному завершению соединений на сервере.)

Автор объясняет, почему иногда бэкенд должен закрывать соединения: чтобы избежать сбоев, ограничить недобросовестных клиентов или освободить системные ресурсы. В выпуске разбираются механизмы плавного завершения работы соединений в HTTP/1.1 (через заголовок Connection) и HTTP/2 (через фрейм GOAWAY), а также обсуждается, сколько это стоит с точки зрения производительности и архитектуры.

Кратко по эпизоду:

Зачем вообще завершать соединение
Как работает graceful shutdown в HTTP/1.1
Издержки HTTP/2
Что делает фрейм GOAWAY
Выводы и лучшие практики


👉 @BackendPortal

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

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

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

Как при этом вообще общаться между компонентами, если всё вокруг ненадёжно? Это реально непросто.

Классический пример такой ситуации — проблема двух генералов. Она отлично иллюстрирует трудности коммуникации через ненадёжные каналы.

Представь: генерал А и генерал B стоят в разных лагерях со своими армиями и должны согласовать время атаки, передавая сообщения только пешими гонцами.
А отправляет сообщение «атакуем на рассвете!», но ответа не получает. Что произошло — неизвестно. Гонец мог погибнуть по пути к B, или B получил послание, но ответный гонец пропал на обратной дороге.

Эта задача доказано неразрешима. Звучит как байка, но суть та же самая, когда серверы в дата-центре пытаются договориться между собой по TCP.

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

И вот это одно из главных умений инженера по распределённым системам: строить надёжные системы поверх ненадёжных компонентов.

👉 @BackendPortal

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

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

Вот 20 проверенных техник, которые я регулярно использую для оптимизации SQL-запросов: 😊

• Грамотно используйте индексы:
Индексируйте критически важные столбцы, используемые в WHERE, JOIN, ORDER BY и GROUP BY.

• Избегайте SELECT *:
Выбирайте только необходимые столбцы, чтобы сократить объём передаваемых данных и время обработки.

• Реализуйте пагинацию корректно:
Используйте OFFSET и FETCH NEXT или пагинацию методом поиска (seek method) для эффективного постраничного вывода.

• Ограничивайте количество строк как можно раньше:
Применяйте фильтрацию на ранних этапах, чтобы максимально сократить размер выборки.

• Избегайте функций в WHERE:
Функции над столбцами блокируют использование индексов — переписывайте условия, используя «сырые» столбцы.

• Упрощайте JOIN:
Минимизируйте количество соединений и избегайте избыточных JOIN-ов.

• Выбирайте правильные типы JOIN:
Используйте INNER JOIN, LEFT JOIN или EXISTS там, где это уместно, чтобы избежать лишней обработки данных.

• Используйте корректные типы данных:
Сопоставляйте типы данных в JOIN и WHERE, чтобы обеспечить эффективное использование индексов.

• Запрашивайте только изменённые данные:
Реализуйте инкрементальную обработку, а не полный повторный запрос таблиц.

• Группируйте операции:
Пакетная вставка, обновление или удаление снижают накладные расходы на транзакции.

• Исключайте избыточные подзапросы:
Используйте JOIN или CTE вместо повторяющихся подзапросов.

• Используйте EXISTS вместо IN:
EXISTS часто работает быстрее, чем IN, особенно на больших объёмах данных.

• Нормализуйте с умом:
Балансируйте между нормализацией и денормализацией в производительно критичных запросах.

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

• Анализируйте планы выполнения:
Регулярно проверяйте execution plan, чтобы находить и устранять ресурсоёмкие операции.

• Избегайте подстановок с начальным %:
LIKE '%abc' не использует индексы эффективно.

• Делайте транзакции короткими:
Сокращайте время выполнения транзакций, чтобы уменьшить блокировки и конфликты.

• Регулярно обновляйте статистику:
Актуальные статистики обеспечивают точное планирование запросов СУБД.

• Используйте подсказки (query hints) с осторожностью:
Применяйте только после тестирования и при необходимости конкретной оптимизации.

• Постоянно отслеживайте и настраивайте:
Регулярно анализируйте производительность запросов и проактивно оптимизируйте медленные запросы.


👉 @BackendPortal

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

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

Есть опенсорсный проект под названием Redka. Его цель — переосмыслить основные части Redis, реализовав их на SQL (SQLite/PostgreSQL), при этом сохранив совместимость с API Redis (протокол RESP).

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


Думаю, причина в том, что кэш или сервер структур данных, работающий поверх реляционной базы, не особо полезен. Гораздо логичнее просто использовать Redis (и, может быть, моки для тестов).

Что ты об этом думаешь? 🚬

👉 @BackendPortal

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

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

Лучшая альтернатива Postman

Apidog — мощный инструмент для работы с API.

✓ Создавай, проектируй и документируй эндпоинты за пару минут
✓ Мокай данные и запускай тесты на лету
✓ Подключай и проверяй ИИ вроде ChatGPT

Доступен в вебе и как приложение, есть бесплатный план.

https://apidog.com/

👉 @BackendPortal

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