🔌 WebSockets vs SSE — что выбрать для real-time приложений
Когда нужно передавать данные в реальном времени (чаты, нотификации, трекинг заказов) — выбор часто падает на WebSockets или Server-Sent Events (SSE). Но они решают задачу по-разному 👇
WebSockets
• Двусторонняя связь — клиент и сервер могут отправлять данные друг другу.
• Подходит для интерактивных систем (чаты, онлайн-игры, торговые площадки).
• Работает поверх TCP и требует чуть больше ресурсов (поддерживает постоянное соединение).
SSE (Server-Sent Events)
• Односторонний канал: сервер → клиент.
• Идеален для нотификаций, обновлений данных, live-фидов.
• Использует обычный HTTP, проще масштабируется и поддерживается почти везде.
💡 Главное различие:
WebSocket = “двусторонний диалог”
SSE = “трансляция данных в одну сторону”
🔥 Когда выбирать:
• Реактивные чаты, игры → WebSockets
• Поток уведомлений или обновлений → SSE
Когда нужно передавать данные в реальном времени (чаты, нотификации, трекинг заказов) — выбор часто падает на WebSockets или Server-Sent Events (SSE). Но они решают задачу по-разному 👇
WebSockets
• Двусторонняя связь — клиент и сервер могут отправлять данные друг другу.
• Подходит для интерактивных систем (чаты, онлайн-игры, торговые площадки).
• Работает поверх TCP и требует чуть больше ресурсов (поддерживает постоянное соединение).
SSE (Server-Sent Events)
• Односторонний канал: сервер → клиент.
• Идеален для нотификаций, обновлений данных, live-фидов.
• Использует обычный HTTP, проще масштабируется и поддерживается почти везде.
💡 Главное различие:
WebSocket = “двусторонний диалог”
SSE = “трансляция данных в одну сторону”
🔥 Когда выбирать:
• Реактивные чаты, игры → WebSockets
• Поток уведомлений или обновлений → SSE
🔥4
Что произойдёт, если внутри async def функции написать обычный time.sleep(2) вместо await asyncio.sleep(2)?
Anonymous Quiz
13%
Всё отработает быстрее, потому что time.sleep написан на C
42%
Event loop зависнет на 2 секунды
13%
Обе функции выполнятся параллельно
31%
Ошибка выполнения
👍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
Отлично подходит для тех, кто готовится к собеседованию.
⚡️ Свыше 130 вопросов, которые охватывают продвинутые знания по Python, PostgreSQL, Redis и GIT
https://stepik.org/a/254865
https://stepik.org/a/254865
https://stepik.org/a/254865
За промокодом на скидку 20%
пишите сюда 👉 @viviv891
❤5
⚡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).
Когда у тебя несколько инстансов сервиса (например, в 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
❓ Что произойдёт при CREATE INDEX без CONCURRENTLY на большой таблице в PostgreSQL?
Anonymous Quiz
21%
Индекс создастся быстрее, но без статистики
52%
Таблица будет заблокирована на операции записи
24%
Индекс создастся в фоне без блокировок
3%
Запрос автоматически уйдёт на реплику
⚡3
📦 Обработка файлов: безопасный аплоад, хранение и потоковая передача
При работе с файлами на бэкенде важно не только принимать и сохранять их, но и делать это безопасно и эффективно:
• 🔒 Безопасный аплоад — проверяй MIME-типы, расширения и размер, чтобы не дать пользователю загрузить исполняемый код.
• 💾 Хранение — крупные файлы лучше сохранять вне БД (например, в S3, MinIO или локальном хранилище).
• 🚀 Потоковая передача (streaming) — не загружай файл полностью в память, особенно если он большой. Используй StreamingResponse (FastAPI) или send_file с генератором.
При работе с файлами на бэкенде важно не только принимать и сохранять их, но и делать это безопасно и эффективно:
• 🔒 Безопасный аплоад — проверяй MIME-типы, расширения и размер, чтобы не дать пользователю загрузить исполняемый код.
• 💾 Хранение — крупные файлы лучше сохранять вне БД (например, в S3, MinIO или локальном хранилище).
• 🚀 Потоковая передача (streaming) — не загружай файл полностью в память, особенно если он большой. Используй StreamingResponse (FastAPI) или send_file с генератором.
👍3
❓ Что делает API Gateway, когда требуется аутентификация и маршрутизация запроса к внутреннему сервису?
Anonymous Quiz
0%
Выполняет физическое хранилище логов
0%
Запускает миграции базы данных
97%
Проверяет токены/авторизацию и перенаправляет запрос к нужному сервису
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 — это то, что делает систему надёжной, несмотря на реальность сети.
В распределённых системах дубликаты сообщений — это норма, а не баг. Сеть может «повторить» запрос, брокер — переотправить сообщение, продюсер — не получить подтверждение и снова отправить.
Если не обработать дубли — бизнес-логика может «стрельнуть себе в ногу».
🧠 Основные подходы к 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
❤5
🔔Сервис нотификации
Сервис нотификации — это компонент микросервисной архитектуры, предназначенный для отправки уведомлений пользователям или другим системам. Он управляет процессом доставки сообщений через различные каналы, такие как электронная почта, SMS, push-уведомления и т.д.
Взаимодействие:
1⃣ Микросервисы: Работает в тесном сотрудничестве с другими микросервисами, такими как сервисы аутентификации (для отправки подтверждений) и заказов (для уведомлений о статусе выполнения).
2⃣ Базы данных: Хранит информацию о пользователях и их предпочтениях по каналам коммуникации.
3⃣ Внешние API: Может интегрироваться с внешними сервисами для отправки SMS или электронной почты.
Используются в:
- Интернет-магазинах: Уведомления о статусе заказа, акциях и скидках.
- Социальных сетях:
Уведомления о новых сообщениях, запросах и обновлениях.
- Финансовых системах: Уведомления о транзакциях, изменениях в счетах и безопасности.
Заключение:
Сервис нотификации играет важную роль в улучшении пользовательского опыта, обеспечивая своевременные оповещения и реакции на действия пользователей.
Сервис нотификации — это компонент микросервисной архитектуры, предназначенный для отправки уведомлений пользователям или другим системам. Он управляет процессом доставки сообщений через различные каналы, такие как электронная почта, SMS, push-уведомления и т.д.
Взаимодействие:
1⃣ Микросервисы: Работает в тесном сотрудничестве с другими микросервисами, такими как сервисы аутентификации (для отправки подтверждений) и заказов (для уведомлений о статусе выполнения).
2⃣ Базы данных: Хранит информацию о пользователях и их предпочтениях по каналам коммуникации.
3⃣ Внешние API: Может интегрироваться с внешними сервисами для отправки SMS или электронной почты.
Используются в:
- Интернет-магазинах: Уведомления о статусе заказа, акциях и скидках.
- Социальных сетях:
Уведомления о новых сообщениях, запросах и обновлениях.
- Финансовых системах: Уведомления о транзакциях, изменениях в счетах и безопасности.
Заключение:
Сервис нотификации играет важную роль в улучшении пользовательского опыта, обеспечивая своевременные оповещения и реакции на действия пользователей.
👍5
Что вернёт сервер?
Anonymous Quiz
18%
Ошибка при запуске
41%
Всегда функцию first()
28%
Всегда функцию second()
13%
Каждый раз случайно A или B
🔥5
⚙️ SQL - что произойдёт при SELECT * FROM table LIMIT 1 без ORDER BY?
Anonymous Quiz
43%
Гарантированно вернётся первая вставленная строка
7%
Последняя вставленная
33%
Любая строка - порядок не гарантирован
17%
Ошибка: без ORDER BY LIMIT запрещён
👍4
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 и фронтенда.
CSRF (Cross-Site Request Forgery) - это атака, при которой злоумышленник заставляет браузер пользователя выполнить запрос от его имени, без его ведома.
📌 Как это работает:
Пользователь уже авторизован на сайте (есть cookies).
Он заходит на вредоносную страницу → та отправляет запрос на доверенный сайт → браузер автоматически прикладывает cookies.
В итоге сервер думает, что запрос сделал сам пользователь.
🧠 Пример:
Переход по ссылке может привести к смене пароля или отправке денег, если нет защиты.
🛡 Как защищаются:
• CSRF-токены
• Проверка Origin / Referer
• SameSite cookies
CSRF - одна из классических уязвимостей веба, о которой важно помнить при разработке API и фронтенда.
❤4
💾 mmap: работа с большими файлами без загрузки в RAM
mmap (memory mapping) — это способ отобразить файл в виртуальную память, чтобы читать и писать в него как в обычный массив байтов, не загружая всё содержимое в оперативную память.
📌 Как это работает:
• ОС сама подгружает в RAM только те страницы файла, к которым вы обращаетесь.
• Не нужно читать файл целиком — даже гигабайтный лог можно обработать за секунды.
• Изменения можно синхронизировать с диском автоматически.
🧠 Пример: поиск строки в 10-гигабайтном файле
✅ Преимущества:
• Потребление памяти не зависит от размера файла
• Очень высокая скорость случайного доступа
• Поддержка записи (с ACCESS_WRITE или ACCESS_COPY)
⚠️ Ограничения:
• Работает с бинарными файлами (для текста — декодируйте фрагменты)
• На Windows и Unix есть нюансы с блокировками
• Не подходит для потоковых данных (только для файлов на диске)
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