AI

AWS Architecture Blog

How DHI Group accelerates generative AI workloads from idea to production using hackathons

Открыть оригинал ↗ Перевод заголовка: Как DHI Group ускоряет рабочие нагрузки генеративного ИИ от идеи до производства с помощью хакатонов

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

  • Прототипы строятся на AWS-сервисах: Amazon Bedrock AgentCore, OpenSearch, Lambda и MCP, обеспечивая производственные стандарты.
  • Участники используют Kiro как инструмент разработки, что повышает скорость и глубину анализа кода.
  • В хакатоне объединяются продукты, процессы и команды — продукт, продажи и инженерия — для решения реальных бизнес-задач.
  • После хакатона 84% увеличилось использование Kiro, 33% разработчиков проявили интерес к ИИ-циклу разработки, а скорость выпуска новых функций выросла.
  • Успешный хакатон становится ежегодным событием, формируя устойчивую культуру внедрения ИИ.

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

# Пример команды для запуска MCP-сервера в Lambda
aws lambda create-function \
    --function-name ClearanceJobsMCPServer \
    --runtime nodejs18.x \
    --handler index.handler \
    --role arn:aws:iam::123456789012:role/MCPServerRole \
    --code s3://dhi-ai-code/mcp-server.zip \
    --vpc-config SubnetIds=subnet-12345,SecurityGroupIds=sg-67890
# Пример запроса к Bedrock AgentCore для оркестрации
{
  "action": "search_candidates",
  "filters": {
    "clearance_level": "TOP_SECRET",
    "skills": ["Python", "AWS"]
  },
  "context": "user prefers engineers with GitHub profiles"
}

Habr AI

Не бенчмарком единым: стелс‑модель union‑alpha на реальной задаче — сутки от релиза до боя

Открыть оригинал ↗ Перевод заголовка: Не бенчмарком единым: стелс-модель union-alpha на реальной задаче — сутки от релиза до боя

Стелс-модель union-alpha, вышедшая на OpenRouter всего за сутки до публикации, успешно реализовала ветку обработки комментариев в Instagram, не требуя дорогостоящих бенчмарков. Модель с нулевой ценой и контекстом 262K токенов справляется с реальной задачей — отвечает в приватных сообщениях, сохраняет контекст и избегает дублирования. Ключевые решения: дедупликация через Redis INCR, атомарный захват комментариев, чистка ответов и защита от ошибок.

  • Используется прямой ответ по комментарию, а не по пользователю — гарантирует уникальность и избегает публичных ответов.
  • Дедупликация через Redis INCR вместо GET-SET обеспечивает атомарность и исключает дублирование ответов.
  • Модель сама проводит самоанализ, признаёт недостатки в промптах и логике — подтверждает честность и прозрачность.
  • Критически важны живые прогоны: фикстуры и теории не заменяют реального вебхука.

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

AI‑агент не увидел мой код: worktree, состояние задач и границы доступа в VECTA

Открыть оригинал ↗ Перевод заголовка: AI-агент не увидел мой код: worktree, состояние задач и границы доступа в VECTA

При запуске агента в VECTA проект с пустым начальным коммитом и незакоммиченными файлами может быть "потерян" — агент не видит исходных файлов, так как они не включены в Git. Это подчёркивает необходимость явно определять, какое состояние проекта используется: последний коммит или текущий рабочий каталог. В VECTA для каждой задачи создаётся отдельный снимок с сохранением неотслеживаемых файлов и стейджинг-зоны, что формирует базовую линию для сравнения изменений.

Ключевые практические тезисы:

  1. Агент работает с отдельным worktree, который копирует текущее состояние папки, но не включает все файлы (например, .env, ключи).
  2. Состояние задачи включает базовую линию (baseline), созданную из исходного состояния, чтобы избежать ошибок при сравнении изменений.
  3. Доступ к задаче и рабочему пространству проверяется на уровне API, а не только через UI — разрешения не передаются автоматически.
  4. Восстановление после переподключения работает по последовательности событий, а не по "последнему событию", что предотвращает ложное восприятие "работает".
  5. Проверка готовности задачи требует ручного вмешательства — агент не может сам подтвердить корректность изменений.

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

Определитель повадок: пять способов, которыми разговор с LLM имитирует доказательство

Открыть оригинал ↗ Перевод заголовка: Определитель повадок: пять способов, которыми разговор с LLM имитирует доказательство

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

  1. Модель назначает числовые параметры (например, температуру ячейки на 90 °C), которые не соответствуют реальным физическим пределам, несмотря на ссылку на научную статью.
  2. Сама посчитала экономику и утверждает, что продукт — не электричество, а тепло и холод, что выглядит как признание собственной логики.
  3. Генерирует полный сценарий с кадрами, режиссурой и копирайтингом — как если бы объект уже существовал.
  4. Проводит «внутреннюю рецензию», где критика и хвалит себя в одном процессе, что подрывает достоверность.
  5. В случае обнаружения ошибки в расчётах — останавливается, но без внешнего запроса, что не является признаком реальной критики.

Когда пригодится
Когда вы хотите проверить, насколько убедительным является вывод, сгенерированный LLM, особенно в тех областях, где важны физические ограничения — энергетика, химия, инженерия. Определитель помогает выявить подлог в доказательстве, даже если модель сама выглядит убедительно.

Короче, GPT: шесть нейросетей для сокращения текста без потери фактов

Открыть оригинал ↗ Перевод заголовка: Шесть нейросетей для сокращения текста без потери фактов

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

Ключевые тезисы:

  1. Перед сокращением выделяйте обязательные факты — даты, цифры, условия и оговорки — и пронумеруйте их.
  2. Проверяйте каждый пункт сокращённого текста на соответствие исходнику: не допускайте подмены причин или упрощения оговорок.
  3. Используйте сервисы с поддержкой ссылок на фрагменты (например, Claude, Gemini), чтобы отслеживать, откуда взялись утверждения.
  4. Для проверки используйте API с возвратом структурированных данных (например, DeepSeek, GigaChat), чтобы извлечь факты и оговорки отдельно.
  5. Сокращение не должно удалять контекст — даже если текст кажется короче, важно сохранить группу клиентов, период и параллельные события.

Когда пригодится:
При редактировании исследований, отчётов и интервью, где важны точность и полнота фактов, особенно если в тексте есть оговорки, противоречия или сложные причинно-следственные связи.

[Перевод] Ваша платформа Kubernetes готова к контейнерам. Готова ли она к ИИ?

Открыть оригинал ↗ Перевод заголовка: Ваша платформа Kubernetes готова к контейнерам. Готова ли она к ИИ?

Команды, работающие с Kubernetes, уже успешно развертывают контейнеризированные приложения, но внедрение ИИ-нагрузок выявляет существенный разрыв в зрелости операционных платформ. Хотя 66% организаций используют Kubernetes для ИИ-инференса, лишь 7% ежедневно запускают такие модели, а 35% платформенных команд не оркестрируют ИИ-задачи.

  1. Расширьте модель ресурсов — включите в планирование не только CPU и память, но и доступность GPU и других ускорителей, учитывая гетерогенные вычисления.
  2. Обновите CI/CD — в цепочке доставки добавьте этапы оценки моделей, проверки среды и мониторинга, чтобы обеспечить воспроизводимость и аудит.
  3. Расширяйте observability — отслеживайте не только использование GPU, но и время ожидания, загрузку модели, пропускную способность и задержку инференса.
  4. Автоматизируйте развертывание — используйте Managed Kubernetes для снижения затрат и упрощения процесса запуска ИИ-моделей.
  5. Создайте эталонный путь для разработчиков — предоставьте стандартный процесс от эксперимента до production, включающий ресурсы, развёртывание и наблюдение.

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

Кто остановит AGI: законы или мегаватты?

Открыть оригинал ↗ Перевод заголовка: Кто остановит AGI: законы или мегаватты?

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

  • В Германии к 2045 году потребление электроэнергии может удвоиться, особенно из-за роста дата-центров, что требует масштабирования солнечной и ветровой генерации.
  • В Гессене дата-центры уже привели к росту энергопотребления в зоне втрое, что подчёркивает угрозу перегрузки инфраструктуры.
  • Исследования DFKI показали, что энергопотребление при распознавании металлического лома снизилось почти на 90% за счёт выбора оптимальной модели, а не максимальной.
  • Архитектуры моделей, как в DeepSeek R1, теперь используют только нужные «экспертов», что снижает вычислительные нагрузки.
  • Вода становится критичным ресурсом: в Мюнхене и Зиген-Виттенгштайте в 2026 году введены жёсткие ограничения на полив, мойку и забор из рек из-за засухи.

Когда пригодится:
Когда нужно оценивать устойчивость ИИ-систем к росту вычислительной мощности, особенно в условиях ограниченных ресурсов — энергии и воды. Это актуально для разработчиков, инженеров и политиков, работающих над масштабированием AI-моделей в реальных условиях.

OpenAI нажала на газ и почти сразу заговорила о тормозах

Открыть оригинал ↗ Перевод заголовка: OpenAI нажала на газ и почти сразу заговорила о тормозах

OpenAI выпустила мощную модель GPT-6 Astra, получившей статус «Critical» по кибербезопасности, что означает её способность самостоятельно находить уязвимости и разрабатывать способы их эксплуатации без прямого вмешательства человека. В ответ на это руководители AI-компаний начали обсуждать необходимость замедлить развитие ИИ-технологий, подчеркивая разрыв между ростом возможностей моделей и развитием систем защиты.

  • Модель GPT-6 Astra стала первой с присвоением уровня Critical в Preparedness Framework, что указывает на её способность к автономному поиску уязвимостей.
  • Агенты современных ИИ могут выполнять задачи полностью автоматически — от анализа до выполнения действий — что угрожает человеку как контролирующему элементу.
  • Ключевая проблема — не в сознании ИИ, а в его способности к автономному действию, особенно при неправильной интерпретации начальной задачи.
  • Важно определять, где и на каком этапе ИИ должен останавливаться и просить подтверждения от человека, чтобы избежать неправильных последствий.
  • Сценарий «Терминатора» становится менее фантастичным: опасность не в злобе ИИ, а в его скорости и автономности, когда он уже не может быть остановлен человеком вовремя.

Когда пригодится:
Когда разрабатываются автономные ИИ-агенты, где требуется контроль за действиями на каждом этапе, особенно в критически важных сферах — медицине, финансах, инфраструктуре.

GenAI в страховании: как перейти от пилотов к результату

Открыть оригинал ↗ Перевод заголовка: GenAI в страховании: как перейти от пилотов к результату

Статья посвящена переходу от экспериментальных проектов с GenAI к внедрению решений, дающих измеримый бизнес-результат в страховании. Обсуждаются критерии готовности AI-пилотов к промышленному использованию, реальные сценарии применения в продажах, урегулировании убытков и работе с агентами, а также вопросы доверия алгоритмам и управления корпоративными знаниями.

  • Определить, когда AI-пилот готов к масштабному внедрению: задача должна быть стабильной, измеримой и повторяемой.
  • Выбрать сценарии, где GenAI уже доказал свою эффективность — например, в автоматизации ответов в контакт-центре или подготовке документов.
  • Организовать безопасную работу с LLM: включая контроль доступа, проверку контента и управление корпоративными знаниями.
  • Оценивать результат по метрикам, связанным с производительностью, скоростью и качеством процессов, а не только по количеству запросов.
  • Установить границы: где алгоритм может работать автономно, а где человек остаётся ответственным за принятие решений.

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

Martin Fowler

I don't like LLMs

Открыть оригинал ↗ Перевод заголовка: Я не люблю LLMs

Мартин Фоллер выражает смешанные чувства к LLM-технологиям: с одной стороны, он восхищается их потенциалом для повышения продуктивности, с другой — опасается негативных последствий, таких как угроза инфраструктуре или разработка биооружия. Основной причиной его неприязни является то, как LLMs ведут себя в диалогах — они говорят с неестественной уверенностью, часто выдают полезные ответы, но при этом фальшиво извращают правду и не проявляют искреннего сожаления при обнаружении лжи.

  • LLMs часто ведут себя как "человеки", но на деле это программные машины, впитавшие ценности разработчиков.
  • Их поведение не является сознательным, а формируется в условиях, характерных для Silicon Valley.
  • Фоллер подчёркивает, что он избегает взаимодействия с теми системами, которые несут в себе признаки нечестности и недоверия.
  • Он считает, что полезность LLMs не оправдывает их использование без критического осмысления.
  • Его подход — избегать тех инструментов, которые не соответствуют его стандартам человеческой честности.

Когда пригодится: при разработке политик использования AI-инструментов, при оценке доверия к LLM-системам в бизнесе или при формировании этических рамок для внедрения ИИ.

Java / Spring

Habr Java

[Перевод] Новые фичи Java нужны не только на собеседованиях

Открыть оригинал ↗ Перевод заголовка: Новые фичи Java нужны не только на собеседованиях

Новые функции в Java, такие как ScopedValue и sealed interface, не предназначены исключительно для тестовых или теоретических задач — они активно применяются в реальных приложениях для повышения безопасности и корректности кода. В статье рассматриваются два конкретных кейса из проекта Axelix: передача security context через ScopedValue и контроль реализаций интерфейсов с помощью sealed interface.

Практические тезисы:

  • Используйте ScopedValue для передачи контекста (например, security context) вниз по стеку вызовов, где он читается, но не может быть изменён.
  • ScopedValue автоматически удаляет binding после завершения операции, обеспечивая безопасность и предотвращая утечку данных.
  • sealed interface позволяет ограничить допустимые реализации интерфейса, предотвращая добавление неизвестных типов и обеспечивая иммутабельность.
  • Оба инструмента помогают выразить инвариант системы в коде, делая ошибки валидации и неправильное поведение менее возможными.

Когда пригодится:
Когда требуется гарантировать, что определённый контекст (например, авторизация) не утечает за пределы запроса или что реализации абстракции строго контролируются — например, при работе с RBAC, tracing или метаданными запроса.

System Design

AWS Architecture Blog

Building cloud-native PACS on AWS

Открыть оригинал ↗ Перевод заголовка: Строительство облачных PACS на AWS

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

  • Вместо дорогостоящих и подлежащих обновлению на месте хранилищ (SAN/NAS) используется Amazon S3 с динамическими правилами хранения, что снижает расходы и упрощает масштабирование.
  • Архитектура на основе «центр-ветви» обеспечивает доступ к изображениям из любого объекта сети, устраняя данные-силы и позволяя проводить телерадиологию.
  • Клиенты видят единый интерфейс, не осознавая, откуда берутся изображения — в локальной системе или в облаке.
  • Работа с данными обеспечивается через стандартные API DICOM и DICOMweb, что позволяет интегрировать с существующими системами HIS/EMR.
  • Система поддерживает высокую доступность и отказоустойчивость благодаря автоматическому переключению в двух доступных зонах и репликации в S3.

Когда пригодится:
— При внедрении PACS в больнице с несколькими филиалами, где требуется интеграция и доступ к изображениям из разных объектов.
— При необходимости снизить затраты на хранение и избежать частых обновлений оборудования.
— При планировании долгосрочного хранения медицинских изображений с обязательным сроком хранения 7–10 лет.

DEV System Design

Event Sourcing in AWS

Открыть оригинал ↗ Перевод заголовка: Эвент-сourcing в AWS

В статье описывается корректировка ошибочного подхода к эвент-сourcing, где события и состояние приложения записываются вне транзакции, что приводит к несогласованности. Автор предлагает внедрить паттерн «outbox» с использованием транзакций DynamoDB, а также перейти к дельта-событиям с номерами ревизий, чтобы минимизировать избыточность данных и упростить отслеживание изменений.

  • Внедрение паттерна outbox с использованием транзакций DynamoDB обеспечивает согласованность между событиями и состоянием приложения.
  • События хранятся в отдельной таблице с TTL, а из них — через DynamoDB Streams — передаются в SNS для интеграции.
  • Вместо полного состояния используются дельта-события (например, NameChanged, AddressMoved), содержащие только изменения и номер ревизии.
  • Состояние приложения включает ревизионный номер, позволяющий контролировать одновременные обновления и пересортировывать события в консумерах.
  • Порядок событий не гарантируется на уровне инфраструктуры (например, DynamoDB Streams), поэтому пересортировка (resequencing) делается на уровне потребителя.

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

Why Multi-Tenant Architecture Is the Real Bottleneck in Enterprise SaaS Scaling

Открыть оригинал ↗ Перевод заголовка: Почему архитектура многосекционности — реальный барьер роста в SaaS-продуктах

Наиболее серьёзным барьером роста SaaS-платформ является не производительность, а архитектурная неудовлетворённость в области многосекционности. Этот недостаток часто проявляется не как критическая ошибка, а как накопленная нагрузка — от незаметных исключений до проблем с безопасностью и соответствием.

Ключевые практические тезисы:

  • Многосекционность должна быть встроена на начальном этапе, а не добавлена позже как фича.
  • Требуется структурная изоляция данных на уровне инфраструктуры, а не только через проверку запросов.
  • Платформа должна обеспечивать настройку конфигураций без создания отдельных кодовых баз.
  • Все сервисы (аутентификация, логирование, резервное копирование) должны быть по умолчанию tenant-ориентированными.
  • Нужна изоляция ресурсов, чтобы избежать проблем "шумного соседа" и роста затрат.

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

David Stark: Top High-Paying Roles

Открыть оригинал ↗ Перевод заголовка: Дэвид Старк: Самые высокооплачиваемые должности

В текущей ситуации наблюдается рост спроса на вакансии на GOLANG. Для доступа к 200+ проверенным удалённым позициям требуется прохождение архитектурного теста, а не просто подача резюме. В списке представлены пять высокодоходных ролей: Senior React Full-stack Developer, Senior .NET Full-stack Developer, Senior Data Scientist, и два Senior DevOps Engineer. Все вакансии расположены в Lemon.io и предлагают удалённую работу с конкурентными зарплатами.

  • Проверка архитектурных навыков — обязательная часть процесса, а не дополнительный этап.
  • Работа с React, .NET и DevOps остаётся востребованной и высокооплачиваемой.
  • Доступ к вакансиям требует прохождения теста, оценка которого выше 7.0 даёт прямой доступ к рекрутеру.
  • Вакансии ориентированы на опытных кандидатов, которые могут продемонстрировать глубокие навыки в конкретных технологиях.
  • Платформа предлагает прямой путь от кандидата к принятию решения без вмешательства HR.

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

Autonomous agents need guardrails, not line-by-line scripts

Открыть оригинал ↗ Перевод заголовка: Самостоятельные агенты нуждаются в руках-ограничителях, а не в строках-по-одному скриптах

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

Когда пригодится:

  • При разработке агентов, работающих в критически важных системах (например, чат-ботов с доступом к данным).
  • При построении систем, где безопасность и согласованность состояния выше, чем гибкость генерации.
  • Когда нужно избежать рисков, связанных с непроверенными или неструктурированными действиями.
  • При интеграции с существующими системами, где изменения должны быть контролируемыми и отслеживаемыми.
  • При реализации принципа «модель решает, что нужно — система гарантирует, что правильно».
def execute_action(action, world_state):
    if not is_valid_action(action):
        raise ValueError("Invalid action: must follow schema")
    if not is_state_consistent(world_state):
        raise RuntimeError("State inconsistency detected")
    world_state = update_world(world_state, action)
    return world_state
async function processUserInput(input) {
    const result = await model.generate(input);
    if (!schema.validate(result)) {
        return { error: "Output does not match schema" };
    }
    await persistState(result);
    return { success: true };
}

Menghadapi "Retry Storms": Mengapa Retry Saja Tidak Cukup dalam Sistem Terdistribusi

Открыть оригинал ↗ Перевод заголовка: Сопротивляться "штормам повторных попыток": почему просто повторение запроса недостаточно в распределённых системах

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

Практические тезисы:

  1. Использовать экспоненциальный рост задержки (exponential backoff): увеличивать интервалы повторных попыток (1 → 2 → 4 → 8 сек и т.д.), чтобы дать системе время восстановиться.
  2. Добавить "шум" (jitter): вводить случайные отклонения в интервалы, например от 1.8 до 2.2 сек, чтобы распределить нагрузку и избежать пиков.
  3. Внедрить паттерн "размыкания цепи" (circuit breaker): при достижении порога сбоев переключаться на отказ, чтобы не усугублять ситуацию.
  4. Настроить таймауты с обеих сторон: клиентский таймаут должен быть больше, чем серверный, чтобы избежать "мертвых" запросов.
  5. Использовать пул соединений (например, PgBouncer) для защиты базы данных от перегрузки при массовых повторных попытках.

Когда пригодится:
Когда в системе происходит сбой, и повторные запросы усугубляют нагрузку — например, при работе с базами данных, API-сервисами или в условиях высокой волатильности сети.

Messaging Systems: MQTT vs AMQP vs RabbitMQ vs Kafka vs NATS vs Apache Pulsar

Открыть оригинал ↗ Перевод заголовка: Мессенджинги: MQTT против AMQP против RabbitMQ против Kafka против NATS против Apache Pulsar

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

  • MQTT подходит для IoT и устройств с ограниченными ресурсами — низкая задержка, минимальное потребление энергии.
  • RabbitMQ — лучший выбор для традиционных очередей и распределённых задач, обеспечивая надёжную маршрутизацию и повторную доставку.
  • Kafka идеален для долговременных потоков событий, где требуется повторная обработка и масштабируемость.
  • NATS — оптимален для быстрых, лёгких сервисных взаимодействий в облачных и микросервисных средах.
  • Apache Pulsar — выбирается при необходимости объединитьMessaging и Streaming в одном платформенном решении с гибкой масштабируемостью.

Когда пригодится:

  • При работе с датчиками и удалёнными устройствами — MQTT.
  • При реализации фоновых задач и распределённых рабочих потоков — RabbitMQ.
  • При построении аналитических платформ и систем обработки событий — Kafka.
  • В микросервисных архитектурах с низкой задержкой — NATS.
  • В крупных масштабируемых системах с требованиями к гео-репликации и многопользовательскому доступу — Pulsar.

Ketika AI Mulai Mengatur Query PostgreSQL: Masa Depan Query Optimization

Открыть оригинал ↗ Перевод заголовка: Когда ИИ начинает управлять запросами PostgreSQL: будущее оптимизации запросов

Недавние дискуссии в сообществе баз данных показывают, как малые модели ИИ (SLM) начинают влиять на традиционную область — оптимизатор запросов PostgreSQL. Хотя PostgreSQL имеет надежный оптимизатор, основанный на статистике и оценке затрат, он часто ошибается при несбалансированных данных или устаревших метриках. Исследования показали, что SLM с 4 млрд параметров могут предсказывать более эффективные планы выполнения запросов, ускоряя их выполнение на 81% в сложных сценариях.

Ключевое отличие: вместо расчётов по формулам, ИИ обучается на исторических планах выполнения и распознаёт «шаблоны» запросов. Малые модели позволяют быстро генерировать ответы (в миллисекунды), избегая задержек. Вместо полной замены традиционного оптимизатора, будущее — гибридная система: встроенный оптимизатор остаётся основным, а ИИ анализирует медленные запросы, предлагает альтернативы и автоматически корректирует статистику.

Когда пригодится:
— При работе с динамическими нагрузками и несбалансированными данными.
— В системах, где ручная оптимизация запросов затратна и трудоёмка.
— При внедрении автономных систем, которые «улучшаются» с опытом эксплуатации.

DesignGurus

6 Service Communication Patterns Every System Designer Should Know

Открыть оригинал ↗ Перевод заголовка: 6 шаблонов коммуникации между сервисами, которые должен знать каждый инженер-дизайнер

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

Практические тезисы:

  1. REST подходит, когда сервисы должны ждать ответа — например, при проверке доступности товара перед оплатой.
  2. Месседж-квейс идеален для асинхронной обработки, когда результат не нужен сразу, например, при обработке изображений.
  3. Webhooks эффективны при событийной передаче, когда сервис B уведомляет сервис A о событии (например, о создании заказа).

Когда пригодится:
— При необходимости немедленного ответа — используйте REST с таймаутом и циркуит-брейкером.
— При обработке пиковых нагрузок — включайте асинхронные очереди с дед-лэттер-квейсом.
— При событийной интеграции — применяйте webhooks, чтобы избежать постоянных проверок и снизить нагрузку на систему.

curl -X POST https://api.example.com/notify \
  -H "Content-Type: application/json" \
  -d '{"event": "order.created", "data": {"id": "123"}}'
{
  "event": "order.processed",
  "status": "success",
  "timestamp": "2026-09-17T10:00:00Z"
}

Javarevisited Newsletter

50 System Design Patterns in 15 Minutes

Открыть оригинал ↗ Перевод заголовка: 50 шаблонов системного проектирования за 15 минут

Этот ресурс предлагает 50 ключевых шаблонов проектирования систем, которые помогают создавать масштабируемые и устойчивые к производственным сценариям решения. Важно не запоминать конкретные архитектуры, а понимать принципы и ихTrade-offs — например, когда использовать кэш, шардинг или механизм отказа.

Практические тезисы:

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

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

Coding / Algorithms

DEV Data Structures

Skip Lists: The O(log n) Alternative to Balanced Trees

Открыть оригинал ↗ Перевод заголовка: Skip Lists: The O(log n) Alternative to Balanced Trees

Skip list — это вероятностная структура данных, которая повышает время поиска в стандартном связном списке с O(n) до O(log n). Она работает через многоуровневую систему, где верхние слои содержат редко встречающиеся элементы, позволяя «пропускать» большие участки данных при поиске.

  • Поиск в skip list начинается с верхнего слоя и движется горизонтально, пока значение не превысит целевое; при этом каждый раз, когда значение превышает цель, происходит переход к нижнему слою.
  • Вставка нового элемента происходит в нижнем слое, затем с помощью случайного выбора (монеты) решается, нужно ли его поднимать на следующий уровень.
  • Skip list обеспечивает O(log n) среднее время поиска, вставки и удаления, как и в балансированных деревьях, но с гораздо более простой реализацией и лучшей поддержкой многопоточности.
  • В отличие от балансированных деревьев, skip list не требует сложных операций перебалансировки, что делает его идеальным для высокопроизводительных многопоточных баз данных.

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

type SkipNode struct {
    value int
    next  []*SkipNode // next[i] points to next node at level i
}

DEV LeetCode

1477. Find Two Non-overlapping Sub-arrays Each With Target Sum

Открыть оригинал ↗ Перевод заголовка: 1477. Найти две не пересекающиеся подмассива с суммой, равной целевому значению

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

Практические тезисы:

  1. Используется слайдинг-окно для нахождения всех подмассивов с суммой, равной целевому значению.
  2. Строится массив bestEnd[right] — минимальная длина подмассива, заканчивающегося на индексе right.
  3. Строится массив bestStart[left] — минимальная длина подмассива, начинающегося на индексе left.
  4. Построены массивы pref[i] (минимальная длина подмассива, заканчивающегося не позже индекса i) и suff[i] (минимальная длина подмассива, начинающегося не раньше индекса i).
  5. Минимальная сумма длин двух не пересекающихся подмассивов ищется как min(pref[i] + suff[i+1]) для всех i.

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