AI
Foojay
Aggregation Optimization in MongoDB: Data Duplication to Improve Read Performance (Part 4)
Открыть оригинал ↗ Перевод заголовка: Оптимизация агрегации в MongoDB: дублирование данных для улучшения производительности чтения (часть 4)
В статье описывается дальнейшая оптимизация агрегационного запроса в MongoDB, где дублируется имя устройства в документах профилей, чтобы сократить количество обрабатываемых документов. Это позволяет значительно сократить время выполнения запроса, так как первоначальный фильтр теперь применяется к профилям, соответствующим как городу, так и типу устройства.
Практические тезисы:
- Дублирование поля
deviceNameв профилях позволяет сократить количество профилей, подлежащих обработке на ранних этапах запроса — с 6 763 до 1 234. - Вводится составной индекс на
cityиdeviceName, что ускоряет фильтрацию и повышает эффективность поиска. - Порядок стадий в запросе перестраивается: сортировка, пропуск и ограничение выполняются до
$lookup, снижая нагрузку на последующие операции. - Время выполнения запроса сокращается с 11,8 секунд до 51 миллисекунды, что позволяет достичь цели в подсекундном ответе.
- Дублирование данных описывается как приемлемое решение, если обновления редки (например, для имен устройств), и при этом не приводит к значительному росту хранилища.
Когда пригодится:
Когда требуется ускорить чтение в агрегационных запросах, где фильтрация ведёт к обработке огромного количества документов, а данные, которые редко меняются (например, имена устройств), могут быть дублированы для повышения производительности.
Habr AI
1С без рутины: нейросети, MCP, автоматизация и немного «Косынки»
Открыть оригинал ↗ Перевод заголовка: 1С без рутины: нейросети, MCP, автоматизация и немного «Косынки»
В статье рассматриваются практические применения искусственного интеллекта и автоматизации в среде 1С: от работы нейросетей с BSL-кодом через MCP до инструментов для администраторов. Основное внимание уделено проблемам, с которыми сталкиваются нейросети при работе с реальными конфигурациями — их неспособность понимать структуру системы и генерировать валидный код.
- Использование Cursor и MCP позволяет автоматизировать весь цикл разработки: от анализа конфигурации до изменения BSL-кода и запуска системы без ручного вмешательства в Конфигуратор.
- Нейросети неэффективны при работе с 1С из-за масштаба кода и отсутствия контекста — даже большие памятки не решают проблему.
- В 1С:Предприятие 8 доступна игра «Пасьянс Косынка», которая встраивается в интерфейс и помогает снять напряжение в рабочем процессе.
- Разработан учебный проект AdminClusterMonitor для автоматического мониторинга и перезапуска «перестарков» в кластере с уведомлениями в Telegram и почту.
- В 1С:ЗУП 3.1 реализован функционал по автоматическому формированию направлений на воинский учет.
Когда пригодится:
— При автоматизации разработки и тестирования BSL-кода в крупных конфигурациях.
— Для администраторов, работающих с кластерами и нуждающихся в мониторинге процессов.
— При необходимости визуального отдыха в рабочем процессе через встроенные игры.
— При внедрении автоматизированных процессов по воинскому учету в ЗУП.
{
"tool": "MCP",
"components": ["Cursor", "OneScript", "vanessa-runner"],
"workflow": "analyze → modify BSL → deploy → run 1С:Предприятие"
}
Локальная LLM миграция Vertica2Trino. Как довести до рабочего состояния, если модель не тянет
Открыть оригинал ↗ Перевод заголовка: Локальная миграция LLM Vertica2Trino: как довести до рабочего состояния, если модель не тянет
Команда AvitoTech разработала инженерный пайплайн для миграции SQL-витрин из Vertica в Trino, используя локальные LLM. Прямой перевод полного SQL-кода не сработал из-за галлюцинаций, потери контекста и «контекстного гниения» — даже небольшие модели теряют структуру при обработке более 30 тысяч токенов. Вместо этого была построена система с модульным пайплайном, включающим разбиение кода, проверку на запрещённые паттерны, форматирование и техническую проверку в Trino.
- Задача разбита на части: SQL-код разделяется, обрабатывается по кускам, сохраняется история изменений и зависимости.
- Внедрён механизм проверки на типичные ошибки через регулярные выражения (pattern_guard) и автотесты (API_validate).
- Важна финальная сверка данных в Trino (compare), которая проверяет не только количество строк, но и семантику — ключи, метрики, обработку NULL.
- Окончательный результат требует ручной проверки: LLM не заменяет человека, а упрощает рутину.
- Выбрана модель Gemma 4 31b qat — она стабильно переводит, держит контекст и работает с инструментами при ремонте.
Когда пригодится:
при миграции больших SQL-витрин между диалектами баз данных, когда нужно сократить ручной труд, сохранить историю ошибок и обеспечить воспроизводимость процесса без полной зависимости от облачных LLM.
Девопс-инженер и ИИ влетают в бизнес-задачи с двух ног
Открыть оригинал ↗ Перевод заголовка: Девопс-инженер и ИИ влетают в бизнес-задачи с двух ног
Дата-инженер Дмитрий Дунаев показал, как LLM помог решить две реальные бизнес-задачи: сократить ручной обзвон партнёров и автоматизировать сопоставление 209 тысяч наименований товаров между представительствами. В обоих случаях ИИ работает не как автономный агент, а в комплексе с другими методами — бэкенд-логикой, embedding и ручной верификацией. Ключевым условием успеха остаётся качественная подготовка данных: без очищенных, структурированных входов даже лучшие модели не дают предсказуемого результата.
- В кейсе с антифродом LLM классифицирует регистрации на зелёные (реальные), жёлтые (спорные) и красные (подозрительные), позволяя менеджеру фокусироваться на приоритетных звонках.
- Для сопоставления справочников команда объединила embedding, fuzzy-поиск и ручную проверку, так как ни один из методов в отдельности не обеспечивал надёжности.
- При выборе модели учтены детерминизм, работа с русским языком, безопасность и структурированный вывод — YandexGPT 5 Lite показала лучший баланс для задачи.
- Работа с персональными данными (152-ФЗ) требует локальных моделей в защищённом контуре, чтобы избежать рисков передачи данных.
- Агент стоит строить только там, где решения повторяются, есть оценка цены ошибки и fallback-процесс — для разовых задач автоматизация не окупается.
Когда пригодится:
— При обработке больших объёмов неструктурированных данных, где рутина требует сокращения.
— Когда есть повторяемые бизнес-процессы и можно оценить стоимость ошибок.
— При работе с чувствительными данными — при необходимости соблюдать законодательство (152-ФЗ).
— При необходимости интегрировать ИИ в существующие системы, не нарушая логику и безопасность.
Черный лебедь в мире LLM или когда убьют трансформер?
Открыть оригинал ↗ Перевод заголовка: Черный лебедь в мире LLM или когда убьют трансформер?
Текущая архитектура больших языковых моделей, основанная на токенном представлении, является временным костылем, который не позволяет моделям работать с высокими абстракциями. Эта структура требует огромных вычислительных ресурсов и неэффективна с точки зрения энергопотребления и скорости. Вместо мыслей и концептов модели генерируют текст токен за токеном, что не соответствует работе человеческого мозга.
Ключевые практические тезисы:
- Альтернативные архитектуры, такие как JEPA, Coconut и State Space Models (Mamba-3), позволяют работать с абстрактными представлениями, снижая потребность в вычислительных ресурсах и памяти.
- Успех таких моделей может вызвать финансовый и макроэкономический кризис, так как уничтожит основу инфраструктурных инвестиций в трансформеры.
- Государство и корпорации будут сопротивляться таким технологиям, используя регулирование, дискредитацию и контроль над исследованиями.
- Для стран под санкциями, таких как Россия, это возможность создать независимую, легкую и доступную экосистему ИИ.
Когда пригодится:
Когда появится эффективная альтернатива трансформерам, позволяющая работать с концептами, а не токенами — на персональных устройствах, без облачных вычислений, в условиях технологических санкций. Это особенно актуально для стран, стремящихся к технологическому суверенитету.
Может ли ИИ самостоятельно разобраться в проекте Siemens TIA Portal? Опыт разработки OpennessLLM
Открыть оригинал ↗ Перевод заголовка: Может ли ИИ самостоятельно разобраться в проекте Siemens TIA Portal? Опыт разработки OpennessLLM
ИИ не может полностью самостоятельно понять сложный проект TIA Portal, но с помощью специального агента OpennessLLM он может собирать контекст внутри проекта, анализировать логику и находить ошибки без постоянного вмешательства человека.
Технически OpennessLLM — это инструмент для Windows, который через официальный TIA Portal API даёт доступ к проекту, не генерируя код сам, а лишь вызывая команды LLM-модели. Он работает с исходными файлами SCL, строит локальное представление проекта и проверяет изменения перед применением.
Коды в проекте не экспортируются в XML — это опасно из-за сложной структуры и риска повреждения. Вместо этого OpennessLLM анализирует только необходимые блоки, постепенно собирая контекст, как живой инженер.
Когда пригодится: при разборе сложных логических цепочек в программе, при поиске причин неисправностей, при написании новых блоков с учётом структуры проекта, при автоматизации рутинных операций по исправлению кода.
Агенты выполнили задачу. Почему тест всё равно провален?
Открыть оригинал ↗ Перевод заголовка: Агенты выполнили задачу. Почему тест всё равно провален?
Агенты могут достичь конечной цели, несмотря на нарушение правил координации — например, дублирование действий, нарушение порядка или конфликты за ресурсы. Простая проверка «задача выполнена» недостаточна: важно оценивать всю траекторию выполнения.
Ключевые практические тезисы:
- Ввести метрики допустимости траектории — проверять, соблюдались ли зависимости и порядок действий.
- Считать дублирование работ и несбалансированную нагрузку признаками неэффективности.
- Оценивать конфликты доступа к ресурсам и ошибки передачи артефактов.
- Разделять метрики: достижение цели и качество процесса — они не всегда совпадают.
- Использовать структурированное состояние вместо текстовых сообщений для синхронизации.
Когда пригодится:
При разработке мультиагентных систем в облачных сервисах, CI/CD, автоматизированных релизах или анализе данных, где важно не просто «достичь результата», а обеспечить надёжную, предсказуемую и безопасную координацию между компонентами.
InfoQ Architecture
DoorDash’s Flux Runs 130,000 Engineering Tasks Through Cloud-Based Agents
Открыть оригинал ↗ Перевод заголовка: DoorDash использует облачные агенты для выполнения 130 000 задач инженеров
DoorDash перенёс выполнение задач агентов с локальных компьютеров на облачную платформу Flux, автоматизировав 130 000 инженерных задач за месяц. Платформа обеспечивает более 25 000 автоматизированных проверок кода в неделю, работает с более чем 300 пайбуками и более 10 000 запусков в неделю, позволяя заданиям выполняться без участия человека и параллельно.
Ключевые тезисы:
- Flux использует облачные виртуальные машины Firecracker для изоляции задач в отдельных сандбоксах.
- Агенты доступны через встроенный MCP-гейт, который контролирует права и обеспечивает аудит.
- Пайбуксы в формате YAML определяют задачи, инструменты, проверки и границы безопасности.
- Запуск агентов возможен через Slack, GitHub, cron или голосовые интерфейсы.
- Платформа позволяет масштабировать работу агентов без зависимости от личного устройства разработчика.
Когда пригодится: при внедрении агентов для автоматизации код-ревью, CI/CD, мониторинга и поддержки, особенно в крупных компаниях с жёсткими требованиями к безопасности и прозрачности.
Salesforce Engineering
Why AI Agents Get the Right Facts but the Wrong Answer—and How GraphRAG Helps
Открыть оригинал ↗ Перевод заголовка: Почему AI-агенты получают правильные факты, но неправильный ответ — и как GraphRAG помогает
AI-агенты могут точно извлечь факты из источников, но пропускают важные связи между ними, что приводит к ошибочным выводам. GraphRAG решает эту проблему, объединяя Retrieval-Augmented Generation (RAG) с знанием графа, который отслеживает взаимосвязи между сущностями.
- GraphRAG использует мульти-хоп-поиск: агент последовательно проходит по связям (например, от модели товара к категории, затем к политике возврата).
- Важные условия (например, порог по стоимости или уровень членства) могут быть скрыты от запроса, но становятся видимыми через связи в графе.
- Структура графа (TBox) должна заранее включать все бизнес-правила, а не просто факты из данных (ABox).
- Граф должен содержать прямые указатели на структурированные данные (например, таблицы с ценами), чтобы избежать дополнительных поисков.
- Для диагностики ошибок нужно проверить три аспекта: что извлечено, какая структура графа, и есть ли прямые связи к данным.
Когда пригодится: при разработке систем, где принятие решений зависит от сложных условий, вовлечённых в цепочку связей (например, в сервисах поддержки, кредитных проверках или возвратов).
Java / Spring
Foojay
JavaFX Links of August 2026
Открыть оригинал ↗ Перевод заголовка: JavaFX Ссылки августа 2026 года
В августе 2026 года в JavaFX были представлены ключевые обновления: обновление зависимостей в LTS-ветвях, улучшение точности пиксельной синхронизации, а также рефакторинг API в модулях StringConverter. Важные разработки включают открытие исходного кода FlexGanttFX и запуск нового демонстрационного приложения для GemsFX. Также представлены инструменты, такие как FXML/2 — компилируемый язык описания интерфейсов с улучшенной производительностью.
- В OpenJFX обновлены зависимости: WebKit 625.1, GStreamer 1.28.3, GLib 2.84.3, libxml2 2.15.3 и ICU4C 77.1 — в ветвях jfx17u, jfx21u, jfx25u.
- Реализованы исправления для пиксельной синхронизации в компонентах StackPane, AnchorPane, SplitPane и BorderPane с участием нескольких разработчиков.
- Произошёл рефакторинг StringConverter, устранённый с 2020 года, с участием ревью от Andy Goryachev, Kevin Rushforth и John Hendrikx.
- FlexGanttFX, профессиональная библиотека для диаграмм Ганта, теперь доступна в открытом исходном коде (AGPLv3).
- FXML/2 — новый компилируемый формат, устраняющий необходимость парсинга на этапе запуска, что повышает производительность.
Когда пригодится:
— При разработке графических интерфейсов с высокой производительностью.
— При создании приложений для расширенных задач планирования (логистика, авиация).
— При внедрении типо-безопасных и компилируемых решений для FXML.
— При необходимости открытия и использования профессиональных инструментов для диаграмм и визуализации.
Habr Java
Универсальное логирование HTTP-запросов в Spring Boot с помощью AOP
Открыть оригинал ↗ Перевод заголовка: Универсальное логирование HTTP-запросов в Spring Boot с помощью AOP
Решение на базе Spring AOP автоматически логирует входящие HTTP-запросы в контроллерах и исходящие вызовы через WebClient, обеспечивая единый формат логов и безопасность чувствительных данных. Позволяет гибко настраивать маскировку данных и включать детальное логирование без переподключения приложения.
- Аннотация
@ControllerMonitoringпозволяет логировать запросы и ответы контроллеров с настройкой маскировки тела и отдельного логирования заголовков. - Для клиентских запросов через WebClient используется
@ClientRequestMonitoring, который фиксирует параметры и имя события в логе. - Аннотация
@IgnoreLoggingавтоматически маскирует поля моделей в зависимости от уровня логирования (например, приINFO— заменяет на "ignored", приTRACE— показывает полное значение). - Контекст логирования передаётся между аспектами через
LoggerUtils, что позволяет использовать события в кастомных обработчиках и реактивных цепочках. - Реализованы механизмы для предотвращения перегрузки при высокой нагрузке (асинхронное логирование) и защиты от сбоев при записи в лог (с помощью Circuit Breaker).
Когда пригодится:
при разработке микросервисов, где требуется отслеживать цепочку запросов от входа до внешних сервисов, при необходимости безопасного логирования чувствительных данных и при необходимости централизованного управления форматом логов без ручного вмешательства в каждый метод.
[Перевод] Лучшие практики управления конфигурацией в Spring Boot
Открыть оригинал ↗ Перевод заголовка: Лучшие практики управления конфигурацией в Spring Boot
В статье описаны ключевые принципы эффективного управления конфигурацией в приложениях на Spring Boot, включая разделение параметров на значения по умолчанию, конфигурацию среды и секреты. Особое внимание уделено типобезопасной привязке через @ConfigurationProperties, валидации конфигурации и контролю источников свойств.
Практические тезисы:
- Используйте
@ConfigurationPropertiesвместо@Valueдля связанных параметров — обеспечивает типобезопасность, валидацию и автодополнение в IDE. - Для конфигурации с обязательными значениями примените
@Validatedи ограничения из Jakarta Bean Validation (например,@NotBlank,@Min,@NotNull). - Устанавливайте значения по умолчанию с помощью
@DefaultValue, чтобы избежать ошибок при отсутствии настроек. - Храните секреты (пароли, ключи) в специализированных системах (Vault, AWS Secrets Manager и др.), не включая их в репозитории.
- Учитывайте приоритет источников свойств: от
application.propertiesдо аргументов командной строки, где последний имеет наивысший приоритет.
Когда пригодится:
При разработке и деплое приложений на Spring Boot в различных средах — от локальной разработки до Kubernetes — особенно при работе с микросервисами и централизованным управлением конфигурацией через Spring Cloud Config Server.
Как убрать логин из UI‑тестов на Java без лишних секунд и флака
Открыть оригинал ↗ Перевод заголовка: Как убрать логин из UI-тестов на Java без лишних секунд и флака
Авторизация из UI-тестов — рутинная и медленная операция, которая в 180 тестах может занимать 6–9 секунд на каждый, что приводит к потере 18–27 минут на прогон. Решение — перенести аутентификацию в API, подготовить браузер к запуску с уже действующим токеном и исключить повторные входы. Это позволяет сократить время подготовки с 6–9 секунд до 0,4–0,7 секунд, устранить рейт-лимиты и «моргание» формы входа.
- Убирается вход через UI: вместо логина в форме используется API-вызов для получения токена.
- Токен сохраняется в браузер через cookie или localStorage, а не вручную в тестах.
- Состояние кэшируется по тестовой identity (логин + роль), а не по роли — избегается гонка потоков и сбои.
- Валидация токена происходит двумя способами: через API-запрос к
/api/meи через проверку UI-элементов на авторизованной странице. - Все пароли и токены маскируются в отчётах и логах, чтобы избежать утечек.
Когда пригодится: при масштабировании UI-тестов, когда тесты запускаются в параллельных потоках, при наличии сценариев, где авторизация — не суть проверки, и при необходимости устойчивости к сетевым задержкам и лимитам.
Локальный компаньон для Genshin, HSR и ZZZ: как я упаковал три игры в офлайн‑приложение без бэкенда
Открыть оригинал ↗ Перевод заголовка: Локальный компаньон для Genshin, HSR и ZZZ: как я упаковал три игры в офлайн-приложение без бэкенда
Проект GachaPoint — это локальное приложение для отслеживания ежедневных наград, круток и гемов в играх Genshin Impact, Honkai: Star Rail и Zenless Zone Zero. Оно работает полностью без интернета и бэкенда, хранит данные локально в SQLite с использованием библиотеки Room. Приложение включает календарь подписок, счетчик круток и копилку гемов, а также поддерживает настраиваемые напоминания.
- Календарь подписок отображает дни сбора наград цветами: зелёный — собранные, красный — пропущенные, голубой — предстоящие. Данные хранятся в таблице
calendarс полем по дню года и неделе, а отрисовка реализована через плоскую таблицу без JOIN-операций для быстроты запроса. - Счетчик круток позволяет добавлять записи по дате, редкости и типу баннера, с возможностью редактирования и сброса гаранта. Данные сохраняются в таблице
pullsс полями даты, редкости, типа дропа и флага сброса. - Копилка гемов позволяет устанавливать цель (например, 77 круток = 1 гарант), отслеживать прогресс и добавлять гемы вручную или из статистики. Значения сохраняются в Preferences.
- Напоминания о сборе наград реализованы через WorkManager с учётом времени и системных ограничений (Doze Mode, Android 12+), включая проверку разрешений на уведомления.
Когда пригодится: при игре в гача-игры, когда важно не пропускать ежедневные награды, и при необходимости отслеживать ресурсы без подключения к интернету.
Java67
Top 5 Free JavaScript Books for Beginners in 2026 - Download PDF or Read Online
Открыть оригинал ↗ Перевод заголовка: Топ-5 бесплатных книг по JavaScript для новичков в 2026 году — скачайте PDF или прочитайте онлайн
В статье представлены 5 бесплатных книг по JavaScript, доступных для онлайн-чтения или скачивания в формате PDF. Рекомендуются как для начинающих, так и для тех, кто уже имеет базовые знания Java, поскольку JavaScript является ключевым инструментом веб-разработки. Книги охватывают как основы языка, так и современные практики, включая использование фреймворков Angular и React.
- Eloquent JavaScript — интерактивная книга с возможностью редактирования и запуска кода в браузере, включает объяснения функционального и объектно-ориентированного программирования. Доступен в PDF, EPUB и бумажном виде.
- JavaScript Guide — официальный гайд от Mozilla, обновляется сообществом, подходит для изучения актуальных стандартов.
- Speaking JavaScript — глубокий технический гайд с примерами кода, доступен онлайн, но без PDF-версии.
- JavaScript The Right Way — онлайн-ресурс с лучшими практиками, включает паттерны, инструменты и ресурсы для разработчиков.
- JavaScript® Notes for Professionals — сборник профессиональных советов из Stack Overflow, включает примеры работы с событиями, canvas и анимациями, доступен в PDF.
Когда пригодится: при изучении JavaScript для веб-разработки, особенно если вы начинаете карьеру в сфере фронтенд-разработки или хотите стать полным стеком разработчиком.
Javarevisited Newsletter
Serverless Architecture with Spring Cloud Function: An Introduction and Practical Implementation
Открыть оригинал ↗ Перевод заголовка: Архитектура без серверов с Spring Cloud Function: введение и практическая реализация
Архитектура без серверов основана на модели «функция как сервис» (FaaS), где разработчики создают отдельные функции для выполнения конкретных задач, которые запускаются при событиях и масштабируются автоматически. Такой подход упрощает управление инфраструктурой, снижает расходы и позволяет быстро развертывать код без забот о серверах.
- Использование Spring Cloud Function позволяет писать функции на Java, Kotlin или других языках, интегрируясь с существующими Spring-приложениями.
- Функции могут быть легко интегрированы в потоки событий, например, при обработке входящих запросов или изменений в базе данных.
- Поддерживается автоматическое масштабирование и оплата только за выполненные функции — без затрат при низкой активности.
- Возможность быстрой разработки и тестирования функций без необходимости создания полных приложений.
- Подходит для задач, где требуется обработка данных в реальном времени, например, валидация, преобразование или уведомления.
Когда пригодится:
Когда нужно быстро развернуть небольшой сервис с минимальной инфраструктурой, например, для обработки событий, валидации данных или интеграции с внешними системами.
System Design
Cloudflare Blog
Introducing Adaptive Intelligence: Undermining the economics of every bot attack
Открыть оригинал ↗ Перевод заголовка: Введение Adaptive Intelligence: подрыва экономики каждого атакующего бота
Cloudflare представляет Adaptive Intelligence — новый двигатель обнаружения ботов, который не пытается полностью отсеять атак, а делает их слишком дорогостоящими, чтобы продолжать. В отличие от традиционных систем, которые зависят от статичных правил, Adaptive Intelligence постоянно обучается, использует временные и «отбрасываемые» правила, и сохраняет память о прошлых атаках, чтобы быстрее реагировать на повторные попытки.
- Adaptive Intelligence постоянно переподготавливает модель на основе реального трафика, что позволяет ей оперативно реагировать на новые атаки.
- Она генерирует «отбрасываемые» правила — временные фильтры, которые быстро исчезают, мешая атакующим извлекать ценную обратную связь.
- Система обучается на примерах, когда реальные пользователи ошибочно отсеиваются, что делает защиту более точной и актуальной.
- Вместо того чтобы ожидать обновлений, модель работает в цикле «наблюдение — обучение — развертывание — проверка», обеспечивая безопасность без прерываний.
- Защита учитывает поведение пользователей в сессии (через Precursor) и сигналы из сети, что позволяет обнаруживать скрытые атаки, не видимые на уровне отдельного запроса.
Когда пригодится:
— При работе с динамическими, распределёнными атаками, например, credential-stuffing или сканирование.
— Когда важно минимизировать влияние на реальных пользователей, не допуская их отклонения.
— При использовании систем, где атаки быстро адаптируются и меняют методы.
DesignGurus
10 Distributed Systems Concepts Engineers Must Know
Открыть оригинал ↗ Перевод заголовка: 10 концепций распределённых систем, которые должны знать инженеры
Распределённые системы отличаются от односерверных систем тем, что в них отсутствует синхронизация времени, общая память и надёжность сети — все компоненты работают в асинхронном режиме, и отказы могут быть частичными. В таких условиях ключевые концепции, как CAP-теорема, модели согласованности, репликация и идемпотентность, становятся критическими для надёжности и стабильности системы.
- CAP-теорема: в распределённой системе можно обеспечить только два из трёх свойств — согласованность, доступность и устойчивость к сбоям сети. Устойчивость к сбоям — обязательная, поэтому выбор между согласованностью и доступностью зависит от бизнес-контекста.
- Модели согласованности: от линейной до событийной — инженеры должны понимать, что каждый тип данных требует разного уровня согласованности (например, баланс аккаунта — линейная, лайки — событийная).
- Репликация и задержка: при асинхронной репликации может возникнуть проблема «чтение после записи» и нарушение монотонности, что решается путём направления запросов к лидеру временно после записи.
- Согласование и выбор лидера: алгоритм Raft обеспечивает согласованность при отказах, а «токены фендинга» предотвращают сценарий «разделённого мозга» при восстановлении лидера.
- Идемпотентность и семантика «ровно один раз»: для предотвращения дублирования операций используются идемпотентные ключи, при этом важно обеспечить атомичность проверки и выполнения.
Когда пригодится: при проектировании систем, где важны отказоустойчивость, согласованность и безопасность при повторных попытках — например, в платежных системах, кэш-системах или очередях обработки событий.