Backend | Boost
349 subscribers
33 photos
16 links
Заявки принимаются автоматически 🤖

Сложные вещи становятся возможными, когда вы понимаете основы

@sabratito - Главный админ
Реклама: @itprice_list

Ссылка для друга - https://t.me/+Mc_D9mtxKu8zZWFi
Download Telegram
🔌 WebSockets vs SSE — что выбрать для real-time приложений

Когда нужно передавать данные в реальном времени (чаты, нотификации, трекинг заказов) — выбор часто падает на WebSockets или Server-Sent Events (SSE). Но они решают задачу по-разному 👇

WebSockets

• Двусторонняя связь — клиент и сервер могут отправлять данные друг другу.
• Подходит для интерактивных систем (чаты, онлайн-игры, торговые площадки).
• Работает поверх TCP и требует чуть больше ресурсов (поддерживает постоянное соединение).

SSE (Server-Sent Events)

• Односторонний канал: сервер → клиент.
• Идеален для нотификаций, обновлений данных, live-фидов.
• Использует обычный HTTP, проще масштабируется и поддерживается почти везде.

💡 Главное различие:

WebSocket = “двусторонний диалог”
SSE = “трансляция данных в одну сторону”

🔥 Когда выбирать:

• Реактивные чаты, игры → WebSockets
• Поток уведомлений или обновлений → SSE
🔥4
👍4
🧠 Вышел отличный курс "Тест Middle: Python, PostgreSQL, Redis, GIT" для проверки своего грейда.

Отлично подходит для тех, кто готовится к собеседованию.

⚡️ Свыше 130 вопросов, которые охватывают продвинутые знания по Python, PostgreSQL, Redis и GIT

https://stepik.org/a/254865
https://stepik.org/a/254865
https://stepik.org/a/254865

За промокодом на скидку 20%
пишите сюда
👉 @viviv891
5
Какой принцип использует RabbitMQ?
Anonymous Quiz
69%
FIFO
31%
LIFO
4
📦 Distributed Locks — как синхронизировать процессы в разных узлах?

Когда у тебя несколько инстансов сервиса (например, в Kubernetes или Docker swarm), и каждый может одновременно попытаться изменить одни и те же данные — начинается хаос 🌀

Чтобы этого не произошло, используют распределённые блокировки (Distributed Locks).

🧠 Зачем нужны?
Чтобы гарантировать, что только один процесс выполняет критическую операцию в один момент времени.

🔧 Реализации:

Redis (Redlock) — популярный вариант от автора Redis.
Работает через SET resource_name my_random_value NX PX 30000.
Если удалось поставить — ты владелец.

Etcd / Zookeeper — используют механизмы watch и lease.

PostgreSQL advisory locks — база может быть тоже “lock-сервером”.

⚠️ Главная сложность:
— Нужно учитывать задержки сети и “split brain” — когда сеть рвётся, и два узла думают, что они владеют замком 😬

Решение:
Алгоритм Redlock — требует 3–5 независимых Redis-нод.
Lock считается валидным, если получил большинство подтверждений (quorum).
👍3
Что такое распределённый монолит?

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

👍 - Знал
⚡️ - Не знал

#собес
7
📣 В чём смысл eventual consistency (финальной согласованности) для распределённых систем?

Ответ:
Eventual consistency — это подход, когда данные в разных частях системы могут отличаться “здесь и сейчас”,
но со временем все узлы приходят к единому состоянию.
Это позволяет строить высоконагруженные и устойчивые к сбоям системы, жертвуя “мгновенной точностью” ради скорости и доступности.


👍 - Знал
🔥 - Не знал

#собес
🔥4
📦 Обработка файлов: безопасный аплоад, хранение и потоковая передача

При работе с файлами на бэкенде важно не только принимать и сохранять их, но и делать это безопасно и эффективно:

🔒 Безопасный аплоад — проверяй MIME-типы, расширения и размер, чтобы не дать пользователю загрузить исполняемый код.

💾 Хранение — крупные файлы лучше сохранять вне БД (например, в S3, MinIO или локальном хранилище).

🚀 Потоковая передача (streaming) — не загружай файл полностью в память, особенно если он большой. Используй StreamingResponse (FastAPI) или send_file с генератором.
👍3
4
💬 Message Deduplication в Kafka / RabbitMQ — как бороться с дублирующимися сообщениями

В распределённых системах дубликаты сообщений — это норма, а не баг. Сеть может «повторить» запрос, брокер — переотправить сообщение, продюсер — не получить подтверждение и снова отправить.
Если не обработать дубли — бизнес-логика может «стрельнуть себе в ногу».

🧠 Основные подходы к deduplication:

1️⃣ Идемпотентные операции — самое надёжное.
Каждое сообщение обрабатывается так, что повтор не влияет на результат (пример: UPDATE balance SET amount = 100 вместо amount += 100).

2️⃣ Message ID tracking
Храним идентификаторы уже обработанных сообщений (например, в Redis или в compacted-топике Kafka). Если ID уже есть — пропускаем.

3️⃣ Exactly-once delivery (Kafka Streams)
Kafka поддерживает режим exactly-once semantics — гарантирует, что сообщение будет обработано ровно один раз, даже при сбоях.

4️⃣ TTL + Garbage Collector
Старые ID через время можно очищать, чтобы не накапливались в памяти.

⚡️ Главное — помнить:
в очередях не бывает «ровно один раз», бывает “at least once” или “at most once”.
Deduplication — это то, что делает систему надёжной, несмотря на реальность сети.
👍4
Как можно избежать ситуации, когда два клиента перезаписывают один и тот же ключ в Redis?
Anonymous Quiz
20%
Использовать команды с префиксом MULTI / EXEC
34%
Включить auto-lock
29%
Использовать TTL
17%
Запускать Redis с --atomic
5
Что из вариантов является архитектурным стилем?
Anonymous Quiz
6%
TCP
83%
REST
6%
JSON
6%
TLS
5
🔔Сервис нотификации

Сервис нотификации — это компонент микросервисной архитектуры, предназначенный для отправки уведомлений пользователям или другим системам. Он управляет процессом доставки сообщений через различные каналы, такие как электронная почта, SMS, push-уведомления и т.д.

Взаимодействие:
1⃣ Микросервисы: Работает в тесном сотрудничестве с другими микросервисами, такими как сервисы аутентификации (для отправки подтверждений) и заказов (для уведомлений о статусе выполнения).

2⃣ Базы данных: Хранит информацию о пользователях и их предпочтениях по каналам коммуникации.

3⃣ Внешние API: Может интегрироваться с внешними сервисами для отправки SMS или электронной почты.

Используются в:

- Интернет-магазинах: Уведомления о статусе заказа, акциях и скидках.

- Социальных сетях:
Уведомления о новых сообщениях, запросах и обновлениях.

- Финансовых системах: Уведомления о транзакциях, изменениях в счетах и безопасности.

Заключение:
Сервис нотификации играет важную роль в улучшении пользовательского опыта, обеспечивая своевременные оповещения и реакции на действия пользователей.
👍5
💡 Ты случайно объявил два маршрута с одинаковым путем и методом:
Redis: что происходит, если ключ истёк, а клиент пытается прочитать его в момент истечения?
Anonymous Quiz
7%
Вернётся старое значение
40%
Redis вернёт NULL
37%
Redis вернёт ошибку
16%
Значение может быть неконсистентным
👍6
🔐 Безопасность: что такое CSRF?

CSRF (Cross-Site Request Forgery) - это атака, при которой злоумышленник заставляет браузер пользователя выполнить запрос от его имени, без его ведома.

📌 Как это работает:
Пользователь уже авторизован на сайте (есть cookies).
Он заходит на вредоносную страницу → та отправляет запрос на доверенный сайт → браузер автоматически прикладывает cookies.

В итоге сервер думает, что запрос сделал сам пользователь.

🧠 Пример:
Переход по ссылке может привести к смене пароля или отправке денег, если нет защиты.

🛡 Как защищаются:
• CSRF-токены
• Проверка Origin / Referer
• SameSite cookies

CSRF - одна из классических уязвимостей веба, о которой важно помнить при разработке API и фронтенда.
4
💾 mmap: работа с большими файлами без загрузки в RAM

mmap (memory mapping) — это способ отобразить файл в виртуальную память, чтобы читать и писать в него как в обычный массив байтов, не загружая всё содержимое в оперативную память.

📌 Как это работает:
• ОС сама подгружает в RAM только те страницы файла, к которым вы обращаетесь.
• Не нужно читать файл целиком — даже гигабайтный лог можно обработать за секунды.
• Изменения можно синхронизировать с диском автоматически.

🧠 Пример: поиск строки в 10-гигабайтном файле
import mmap

with open("huge.log", "r") as f:
with mmap.mmap(f.fileno(), length=0, access=mmap.ACCESS_READ) as mm:
if b"ERROR" in mm:
print("Найдена ошибка!")

Преимущества:
• Потребление памяти не зависит от размера файла
• Очень высокая скорость случайного доступа
• Поддержка записи (с ACCESS_WRITE или ACCESS_COPY)

⚠️ Ограничения:
• Работает с бинарными файлами (для текста — декодируйте фрагменты)
• На Windows и Unix есть нюансы с блокировками
• Не подходит для потоковых данных (только для файлов на диске)
👍3