Присоединяйтесь к нашему каналу и погрузитесь в мир Backend-разработки Связь: @devmangx РКН: https://clck.ru/3FobxK
Docker 101: запуск контейнеров в фоновом режиме, чтение логов и повторное подключение
Практическое задание для отработки навыков:
> Запустить контейнер в фоновом режиме
> Получить доступ к логам контейнера
> Повторно подключиться к контейнеру, запущенному в фоне
Сможешь справиться? 😂
👉 @BackendPortal
Годный сервис для быстрого тест-драйва Linux-дистров прямо в браузере — Distrosea
За пару кликов можно глянуть на интерфейсы и пощупать терминал более чем 70 дистрибутивов с разными DE
Удобный способ протестить перед установкой ✌️
👉 @BackendPortal
В чём разница между аутентификацией на сессиях и JWT?
Я заметил, что многие инженеры не до конца понимают это различие, хотя оно критически важно.
Большинство веб-приложений выбирают один из двух подходов к авторизации: сессии (состояние хранится на сервере) или JWT (состояние передаётся вместе с клиентом).
1. Аутентификация на основе сессий
После входа пользователя бэкенд создаёт случайный session ID, сохраняет его в кэше или базе данных и отправляет браузеру в виде HttpOnly cookie. При каждом запросе браузер отправляет эту cookie; сервер находит соответствующую сессию и восстанавливает контекст пользователя. Все чувствительные данные остаются на сервере, а сессию можно немедленно завершить, удалив запись.
Почему стоит выбрать сессии:
🔹Мгновенная аннуляция доступа (например, «выйти из всех устройств») — это просто удаление строки из Redis или SQL.
🔹Секреты никогда не покидают бэкенд → ниже риск утечки.
🔹Подходит для малых и средних систем, где общий кэш не становится узким местом.
Но будь осторожен: при горизонтальном масштабировании понадобятся sticky-сессии или реплицируемый кэш, что может увеличить задержки и усложнить инфраструктуру.
2. Аутентификация через JWT
После входа сервер подписывает JSON Web Token, содержащий:
> заголовок (alg, typ)
> полезную нагрузку (sub, role, и др.)
> подпись
JWT — это base64-кодированный, но не зашифрованный токен: любой может прочитать payload, но только владелец секрета может подделать подпись. Сервер не хранит состояние: любая нода может локально проверить подпись и доверять токену.
Почему можно выбрать JWT:
🔸каждый микросервис или edge-нода может верифицировать токен без общей базы или кэша.
🔸Отлично работает с SPA и мобильными приложениями, которые делают прямые запросы к множеству бэкендов.
🔸удобно передаётся в Authorization-заголовке или cookie.
Однако после выдачи JWT остаётся валидным до истечения срока — его нельзя отозвать без дополнительной инфраструктуры. Это усложняет блокировку аккаунта или экстренный выход.
Вывод:
Если для вас важна возможность немедленно отзывать доступ — используйте сессии.
Если приоритет масштабирование без состояния — используйте подписанные JWT, но учитывайте, что отозвать их нельзя. ✌️
👉 @BackendPortal
Переинжиниринг это как прикрутить ракетные ускорители к велосипеду.
Звучит круто. Бесполезно на практике. И скорее всего — приведёт к аварии.
– Тебе не нужны микросервисы для обычного CRUD-приложения.
– Тебе не нужны event-driven пайплайны ради формы обратной связи.
– Тебе не нужно 12 слоёв абстракции, чтобы вывести “Hello, world”.
Решай ту проблему, которая есть, а не ту, которой хочешь впечатлить.
Простое — масштабируется. Сложное — ломается. 🤵
👉 @BackendPortal
VK Weekend Offer: отправьте заявку, пройдите интервью и получите офер!
28–29 июня VK проведёт Weekend Offer для бэкендеров с опытом от трёх лет. Участников со знанием Java, Go, Python или C++ ждут технические собеседования, знакомство с продуктами и, если всё сложится, офер уже в конце выходных.
Ребята много лет создают облачные решения, системы рекомендаций и поисковые движки — всё с миллионами пользователей в проде — и сейчас ищут новых коллег. Поэтому оставляйте заявку до 25 июня, чтобы попасть в команду за выходные!
Подробности — на сайте.
Знаете ли вы, что можно запускать удалённые виртуальные машины (или даже мини-сети из ВМ) прямо из CLI так просто?
Каждое окружение запускается всего за несколько секунд и полностью бесплатно в течение одного часа в день (а платный тариф тоже довольно доступен).
Тестируйте свой следующий MCP, агент, контейнер и т.д. в безопасной и изолированной среде - https://github.com/iximiuz/labctl 🥰
👉 @BackendPortal
Концепции моделирования данных, которые должен знать каждый разработчик
1. Сущность — Объект реального мира или концепт, о котором вы хотите хранить данные (например, пользователь, заказ).
2. Атрибут — Свойство или поле сущности (например, имя, email, цена).
3. Первичный ключ — Уникальный идентификатор для каждой строки в таблице (например, user_id
).
4. Внешний ключ — Ссылка на первичный ключ в другой таблице; используется для связывания сущностей.
5. Связь "один к одному" — Каждая строка в одной таблице связана с одной строкой в другой.
6. Связь "один ко многим" — Одна строка в таблице связана с несколькими строками в другой (например, пользователь → посты).
7. Связь "многие ко многим" — Несколько строк в одной таблице связаны с несколькими строками в другой (требуется таблица-связка).
8. Нормализация — Организация данных с целью уменьшения дублирования и повышения целостности.
9. Денормализация — Добавление избыточных (дублированных) данных для повышения скорости чтения.
10. Первая нормальная форма (1NF) — Устранение повторяющихся групп; каждая ячейка содержит атомарное значение.
11. Вторая нормальная форма (2NF) — Устранение частичных зависимостей от составного ключа.
12. Третья нормальная форма (3NF) — Устранение транзитивных зависимостей (неключевые столбцы не зависят от других неключевых столбцов).
13. Суррогатный ключ — Системно-сгенерированный идентификатор (например, UUID или auto-increment ID).
14. Естественный ключ — Уникальный идентификатор из реального мира (например, email или номер паспорта).
15. Составной ключ — Первичный ключ, состоящий из нескольких столбцов.
16. Уникальное ограничение — Обеспечивает уникальность значений в столбце (или группе столбцов).
17. Допустимость NULL — Возможность хранить в столбце NULL (т.е. отсутствие значения).
18. Ограничение по значению — Проверяет значения в столбце на соответствие условиям (например, age > 0
).
19. Индекс — Повышает производительность поиска за счёт ускоренного доступа к данным.
20. Схема — Структура/определение таблиц, полей, типов и связей в базе данных.
21. ERD (диаграмма "сущность-связь") — Визуальное представление сущностей и их связей.
22. Кардинальность — Количество строк, которое может быть связано в рамках связи.
23. Тип данных — Определяет, какие значения может хранить столбец (например, INT, VARCHAR, DATE
).
24. Перечисление — Поле, значение которого ограничено предопределённым набором (например, status = [pending, complete]
).
25. Мягкое удаление — Пометка записи как удалённой без фактического удаления (например, deleted_at
).
|👉 @BackendPortal
🌐 WAICORE — хостинг, за который не надо переживать
Устали от лагов, сложных панелей и переплат? Переходите на VPS с AMD Ryzen 9 — быстро, просто, без нервов.
💬 Почему клиенты выбирают нас:
— Цена начинается от 2€
— Скорость канала до 10 Гбит/с
— Поддержка 24/7 — отвечаем быстро и без шаблонов
☀Приятный бонус: Бесплатный VPN — расширение для браузера в подарок каждому нашему юзеру
VPN | Расширение для браузера
📍 Локации: Германия (Франкфурт), Москва, Нидерланды (уже скоро) — стабильный пинг, DDoS-защита.
🔥 Успейте сегодня
⤵ Выбрать сервер | 💬 Наш канал
Жизнь слишком коротка для неправильных ответов от API.
Вот 14 типичных ошибок при работе с HTTP, которые я до сих пор вижу в 2025 году:
🔸Возврат 200 OK, даже если запрос фактически завершился с ошибкой
🔸Неиспользование 202 Accepted для асинхронных операций
🔸Применение 500 Internal Server Error для любой неизвестной ошибки
🔸Игнорирование 429 Too Many Requests при превышении лимитов
🔸Пропуск 422 Unprocessable Entity для ошибок валидации
🔸Неиспользование 304 Not Modified для кэшированных ответов
🔸Возврат 200 OK при успешном DELETE (следует использовать 204 No Content)
🔸Отправка 201 Created без заголовка Location
🔸Использование 500 для обозначения устаревшего API (следует 410 Gone)
🔸Возврат 403 Forbidden при отсутствии авторизации (нужно 401 Unauthorized)
🔸Пропуск 409 Conflict при наличии дубликатов ресурса
🔸Возврат 404 Not Found для неподдерживаемого метода (должно быть 405 Method Not Allowed)
🔸Отсутствие 415 Unsupported Media Type при неправильном Content-Type
🔸Неуказание Retry-After при ответах 429 или 503
Статусы ответов — это не просто технические детали. Это часть контракта с пользователем.
> Они направляют клиента
> Передают намерение
> Формируют доверие
Перестаньте воспринимать их как второстепенные — они часть дизайна. 😨
👉 @BackendPortal
Создание гибкого движка шаблонов в Go
Стандартный пакет html/template в Go предоставляет метод ParseGlob, но он поддерживает только один glob-шаблон.
Если ваши шаблоны разбросаны по нескольким директориям — придётся объединять их вручную.
Вот как можно реализовать простой NewEngine()
, который принимает несколько шаблонных паттернов и загружает их в один экземпляр *template.Template
👉 @BackendPortal
Можно изучать системное проектирование, ожидая свой кофе.
Серьёзно. Кофейня это живая демонстрация распределённых систем:
Кассир = API-шлюз (API Gateway)
Заказы = Очередь сообщений (Message Queue)
Бариста = Потребители событий (Event-Driven Consumers)
Кофемашина = Общий ресурс (Shared Resource)
Готово! = Push-уведомление (Push Notification)
Многие инженеры испытывают трудности с системным проектированием, потому что думают, что оно начинается в облаке.
Но оно начинается в реальном мире, с наблюдения за потоками работы, точками отказа и масштабированием асинхронных систем.
Рауль Дж. разложил всё по шагам, с визуализациями, компромиссами и уроками из практики. 🤵
👉 @BackendPortal
Как работает Apache Spark от начала до конца
1 - Вы пишете код Spark с использованием API на Scala, Python (PySpark), Java или SQL, например:
df = spark.read.csv("file.csv").filter("age > 30").groupBy("city").count()
Как работает движок регулярных выражений
1. Вы пишете шаблон, например: ^a\d{3}b$
• (Начинается с a
, затем 3 цифры, затем b
, конец строки.)
2. Движок регулярных выражений разбирает шаблон в абстрактное синтаксическое дерево (AST) — каждый символ, квантификатор и группа становятся узлами.
3. Это AST компилируется в конечный автомат, обычно:
a. NFA (недетерминированный конечный автомат) — используется для движков с бэктрекингом (например, Python, JavaScript)
b. DFA (детерминированный конечный автомат) — используется для высокопроизводительных движков (например, RE2, Rust)
4. Движок начинает проход по входной строке с начала.
5. Он пытается сопоставить символы с автоматом, следуя:
a. Литералы (например, a, b)
b. Классы символов (\d, \w, [a-z])
c. Квантификаторы (+, *, {3} и т.д.)
d. Якоря (^, $)
e. Группы и альтернации ([abc|def])
6. Если движок использует бэктрекинг (как большинство языков):
a. Он пробует все возможные пути при неудаче сопоставления.
b. Это может вызывать проблемы с производительностью при сложных или неоднозначных шаблонах (например, катастрофический бэктрекинг).
7. Если полное совпадение найдено → возвращает успех.
• Если нет подходящего пути → возвращает неудачу.
8. Для групп захвата сохраняет начальные/конечные индексы и извлекает совпадающие подстроки.
9. После завершения возвращает:
• Булево значение (совпадение или нет)
• Объект совпадения (с захваченными группами, позициями, индексами)
👉 @BackendPortal
🔥 Интересный кейс от Яндекс Маркета по внедрению ML в продакшен
Руководитель службы ML Яндекс Маркета, Саша Воронцов, рассказал о том, как они заменили legacy-систему формализации характеристик товаров на YandexGPT. Раньше они работали с «Формализатором» — эффективным, но громоздким инструментом, требовавшим тонны ресурсов и ручной поддержки, а теперь поручили всё нейросети.
В статье вы найдёте:
- Реальную история миграции с legacy-решения на ML-модель
- Детальный разбор разных подходов к обучению
- Конкретные метрики
- Практические сложности и их решения
👉 Особенно полезно будет тем, кто сталкивается с задачами обработки больших массивов текстовых данных и внедрением моделей в продакшен.
Читать статью здесь
Использование dbx в Go для чистых и гибких SQL-запросов
Если вам нужен лёгкий и гибкий конструктор запросов в Go без глубокой зависимости от магии ORM, dbx — отличный выбор. Он позволяет писать SQL-подобные запросы с привязкой параметров, сохраняя полный контроль.
👉 @BackendPortal
Как хеширование работает внутри
1. Вы начинаете с некоторого ввода, например "hello123".
2. Этот ввод сначала преобразуется в двоичный формат, поскольку хеш-функции работают только с битами (0 и 1).
3. Алгоритм должен обрабатывать данные фиксированными блоками (в данном случае по 512 бит), поэтому сообщение дополняется (padding), чтобы соответствовать размеру блока.
Дополнение включает:
> добавление одного бита 1, затем набора 0
> затем добавляется длина исходного сообщения (в двоичном виде)
4. После дополнения сообщение разбивается на блоки, и каждый блок обрабатывается хеш-функцией.
5. SHA-256 использует 8 предопределённых начальных значений (можно представить как 8 чаш, в которых будет происходить смешивание).
6. Также используется 64 предопределённых "константы" (представьте их как жёстко зашитые значения или "магические числа", которые алгоритм использует для перемешивания данных — аналогично фиксированным сольям в безопасных функциях).
7. Для каждого 512-битного блока:
i. Из этого блока готовятся 64 маленьких фрагмента (называемых словами).
ii. Эти фрагменты смешиваются с константами при помощи:
1. Побитовых сдвигов
2. Ротаций
3. Операций AND, OR, XOR
4. Модульного сложения (добавление с переполнением, которое оборачивается)
Как получить образование бесплатно с дальнейшим трудоустройством.
МТС и НИУ ВШЭ открывают набор на второй поток магистратуры по искусственному интеллекту. Подача документов стартует 20 июня. Еще можно успеть оказаться в числе 30 счастливчиков, которые получат знания бесплатно.
Что внутри:
🔸 70% курсов ведут специалисты МТС Web Services и MWS AI — никакой оторванной от жизни теории;
🔸 Реальные кейсы вместо синтетических задачек из учебника;
🔸 Доступ к GPU-ресурсам MWS Cloud для ваших проектов;
🔸 Офферы на стажировку и трудоустройство прямо во время учебы.
Новые дисциплины по программе «Исследования и предпринимательство в искусственном интеллекте» включают:
— адаптацию больших языковых моделей под задачи бизнеса,
— продвинутую видеоаналитику,
— распознавание и синтез речи,
— обучение на конечных устройствах,
— технологическое предпринимательство и машинное обучение в бизнесе.
Диплом топового вуза + реальный опыт = идеальное комбо для старта в ИИ.
👉 @BackendPortal
📚 Продвинутые методы архивации: LZ77/78
Приглашаем на открытый урок.
🗓 25 июня в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Алгоритмы и структуры данных».
✔️ На этом вебинаре мы завершим создание архиватора, добавив алгоритм LZ77/78. Разберем принцип словарного сжатия, механизм поиска повторяющихся последовательностей и формат их кодирования.
✔️ Имплементируем выбранный алгоритм и проведем финальное сравнение всех трех методов сжатия (RLE, Huffman, LZ77/78). Определим, какие алгоритмы лучше работают для различных типов файлов и почему.
Завершающее практическое занятие для тех, кто хочет освоить продвинутые алгоритмы и увидеть их применение в реальном проекте.
🎁 Всем участникам вебинара дарим промокод, который дает скидку на обучение - Algo5
👉 Регистрация на вебинар: https://otus.pw/4dbaw/
#реклама
О рекламодателе
События в Kubernetes становятся шумными при масштабировании, поэтому автор написал собственный агрегатор на Go, чтобы упростить их обработку и управление.
Улучшение управления событиями в Kubernetes с помощью кастомной агрегации: читать 🍿
👉 @BackendPortal
Сетевые основы, как работает маршрутизация трафика
Знаете ли вы, что компьютеры могут обмениваться данными только с соседями (участниками одной подсети)?
Но как тогда отправляются пакеты через весь Интернет? Здесь и вступает в дело маршрутизация. 😎
▶️Узнайте больше: читать
👉 @BackendPortal
Приглашаем тебя на Just JVM Meetup для бэкенд-разработчиков 🦾
Встречаемся 20 июня, в 17:00
Где?
▪️офлайн в офисе Selectel, Цветочная, 19
▪️онлайн по всему миру, ссылка на трансляцию скоро появится на сайте
🤌В программе — экспертные доклады от Just AI, Делимобиль, Яндекс Путешествия и Магнит OMNI о корутинах и их работе на JVM, реактивных микросервисах, тестировании с Mockito и создании веб-приложений на Kotlin без Spring.
Собираемся, чтобы обсудить современные подходы в разработке JVM-приложений!
А еще вас ждет классный квиз и увлекательный нетворкинг под вкусную пиццу 🔥
🚀 Участие бесплатно, регистрация обязательна по этой ссылке 🚀
Партнеры мероприятия: Selectel и Just AI💙
Dead Letter Queue — это не страховка. Это инструмент наблюдаемости.
Большинство команд используют DLQ неправильно — и в итоге теряют данные незаметно.
Сообщение не обрабатывается.
Попадает в DLQ.
Никто не замечает.
Оно истекает.
Проблема становится перманентной.
Если вы используете DLQ как мусорку, а не как сигнал — вы работаете вслепую.
Рауль написал подробный разбор: link
> 4 самых частых ошибки при использовании DLQ
> Как тегировать сбои с полноценными метаданными
> Как безопасно переотправлять сообщения, не сломав всё снова
> И почему наблюдаемость важнее повторных попыток (retry)
Без воды. Только реальные паттерны из продакшн-систем. 😐
👉 @BackendPortal
Краткие объяснения Backend-технологий
API Gateway
↳ Используется для управления, маршрутизации, защиты и мониторинга API-вызовов централизованно в микросервисной архитектуре.
Load Balancer
↳ Применяется для равномерного распределения трафика между серверами для масштабируемости и отказоустойчивости.
Reverse Proxy
↳ Используется для перенаправления клиентских запросов на backend-серверы, часто с добавлением SSL, кеширования или сжатия.
Cache (Redis/Memcached)
↳ Применяется для ускорения отклика за счёт хранения часто запрашиваемых данных в памяти.
Message Queue (Kafka/RabbitMQ)
↳ Используется для разделения сервисов и обеспечения асинхронного взаимодействия между ними.
Object Storage (S3/MinIO)
↳ Используется для хранения больших неструктурированных данных, таких как изображения, видео или бэкапы.
CDN (Cloudflare/Akamai)
↳ Применяется для доставки статических ресурсов быстрее за счёт кеширования ближе к пользователю.
Job Scheduler (Celery/Quartz)
↳ Используется для выполнения фоновых задач или плановых заданий по расписанию (аналогично cron).
Serverless (AWS Lambda)
↳ Позволяет запускать backend-код без управления серверами; подходит для задач с низкой нагрузкой или событийно-ориентированных сценариев.
Container Orchestration (Kubernetes)
↳ Применяется при управлении контейнеризованными приложениями в масштабах, обеспечивая авто-масштабирование и устойчивость.
Web Server (Nginx/Apache)
↳ Используется для обработки HTTP-запросов, отдачи статического контента или как обратный прокси.
👉 @BackendPortal
Чем более «автономными» становятся наши программы, тем критичнее строгий контроль над их средой выполнения.
Как всегда, лучше начинать с базовых вещей.
Изучи, как управлять ресурсами CPU и памяти процесса с помощью Linux cgroup: тык
👉 @BackendPortal
Если хотите прокачаться в системном дизайне, разберитесь с этими концептами:
> API Gateway vs Load Balancer — ссылка
> Reverse Proxy vs Forward Proxy — ссылка
> Горизонтальное и вертикальное масштабирование — ссылка
> Микросервисы и монолитная архитектура — ссылка
👉 @BackendPortal
HTTP-концепции, которые должен знать каждый разработчик
> HTTP-методы — Определяют действие: GET (получить), POST (создать), PUT (заменить), PATCH (обновить), DELETE (удалить).
> Коды статуса — Сообщают, что произошло: 2xx (успех), 4xx (ошибка клиента), 5xx (ошибка сервера).
> Заголовки — Пары ключ-значение, которые передают метаинформацию (например, Content-Type, Authorization, Cache-Control).
> Тело запроса — Фактические данные, отправляемые в POST/PUT/PATCH-запросах (часто в формате JSON или form-data).
> Параметры запроса — Пары ключ-значение в URL после ?, используются для фильтрации, сортировки, поиска.
> Параметры пути — Динамические части URL (например, /user/:id), используются для идентификации ресурсов.
> Идемпотентность — Повтор одного и того же запроса (например, PUT или DELETE) приводит к одному и тому же результату.
> Безопасные методы — Методы, такие как GET и HEAD, которые не должны изменять состояние сервера.
> HTTP/1.1 vs HTTP/2 vs HTTP/3 — Новые версии ускоряют работу за счёт мультиплексирования, бинарных фреймов и протокола QUIC.
> Keep-Alive — Повторное использование TCP-соединений для нескольких запросов для снижения задержек.
> Content-Type — Указывает серверу/клиенту, в каком формате тело запроса (например, application/json).
> Accept — Указывает серверу, какие форматы ответа клиент может обрабатывать.
> Authorization — Несёт учетные данные (токены, basic auth) для аутентификации запросов.
> Кэширование — Использует заголовки вроде Cache-Control, ETag, Last-Modified для снижения нагрузки и задержек.
> ETag — Уникальный хеш для версии ресурса; помогает в условных запросах и кэшировании.
> Редиректы (3xx) — Инструктируют клиент попробовать другой URL (например, 301, 302, 307).
> CORS — Управляет тем, какие источники могут обращаться к вашему API из браузера.
> Preflight-запросы — Запросы типа OPTIONS, которые браузер отправляет перед некоторыми CORS-запросами для проверки разрешений.
> Туннелирование HTTP-методов — Некоторые прокси пропускают только GET/POST, поэтому PUT/DELETE инкапсулируются через POST + _method.
> User-Agent — Заголовок, который браузеры отправляют для идентификации (часто подделывается или изменяется).
> Referer — Заголовок, указывающий URL предыдущей страницы (используется в аналитике и безопасности).
> Host Header — Указывает домен, на который направлен запрос (важен при виртуальном хостинге).
> Connection Header — Управляет поведением соединения (например, close, keep-alive).
> HEAD-метод — Как GET, но возвращает только заголовки (без тела); полезен для проверки ресурсов.
👉 @BackendPortal
👩💻 Всем программистам посвящается!
Вот 17 авторских обучающих IT каналов по самым востребованным областям программирования:
Выбирай своё направление:
👩💻 C/C++ — /channel/cpp_ready
👩💻 C# & Unity — t.me/csharp_ready
👩💻 Python — t.me/python_ready
🤔 InfoSec & Хакинг — t.me/hacking_ready
🖥 SQL & Базы Данных — t.me/sql_ready
🤖 Нейросети — t.me/neuro_ready
👩💻 Linux — t.me/linux_ready
📖 IT Книги — t.me/books_ready
👩💻 Frontend — t.me/frontend_ready
📱 JavaScript — t.me/javascript_ready
👩💻 Backend — t.me/backend_ready
📱 GitHub & Git — t.me/github_ready
👩💻 Java — t.me/java_ready
👩💻 Весь IT — t.me/it_ready
👩💻 Bash & Shell — t.me/bash_ready
🖼️ DevOps — t.me/devops_ready
🖥 Design — t.me/design_ready
📌 Гайды, шпаргалки, задачи, ресурсы и фишки для каждого языка программирования!
Что такое MQTT?
MQTT (изначально Message Queuing Telemetry Transport)
=> легковесный протокол обмена сообщениями в стиле publish-subscribe.
=> разработан для быстрой, эффективной и надёжной коммуникации между устройствами, особенно в условиях ограниченной пропускной способности и высокой задержки.
=> использует брокер для маршрутизации сообщений от публикаторов (устройств, отправляющих данные) к подписчикам (устройствам или приложениям, которым эти данные нужны), при этом они не знают друг о друге.
Немного истории 🇮🇹
=> Придуман в 1999 году Энди Стэнфорд-Кларком (IBM) и Арленом Ниппером (Arcom) для мониторинга нефтепроводов через ненадёжные спутниковые соединения.
Главная цель => минимальное потребление трафика и энергии.
=> В 2010 году IBM открыла MQTT 3.1 как открытый протокол
=> Стандартизирован OASIS в 2013
=> MQTT 5 выпущен в 2019
Сегодня MQTT — это де-факто стандарт для обмена сообщениями в IoT и широко используется в разных отраслях.
Пример из реального мира
Умный дом / Home Automation
=> Умный термостат публикует данные о температуре в MQTT-брокер
=> Умные лампы или HVAC-система подписаны на эти данные и автоматически регулируются
=> Владелец управляет всеми устройствами из одного приложения
Другие крупные кейсы
=> Промышленный IoT
=> Управление автопарками
=> Умные энергосети
=> Здравоохранение (удалённый мониторинг)
=> Сельское хозяйство
=> Логистика
👉 @BackendPortal
Пакет fs
в Go: современная абстракция файловой системы 1/9
Пакет fs
появился в Go 1.16 и кардинально изменил подход к работе с файловой системой в Go-программах. До его появления разработчики в основном использовали пакет os
для всех операций с файлами, что приводило к сильной связке между логикой приложения и конкретной реализацией операционной системы
—> статья
👉 @BackendPortal
В этой статье подробно объясняется, как лимит в 1 МБ на объект в etcd
приводит к сбоям при деплое через Helm, когда метаданные релиза, сохраняемые в виде Secrets, превышают допустимый размер.
Также рассматриваются стратегии смягчения проблемы, такие как модульность чартов и очистка истории релизов 🐱
👉 @BackendPortal