RU

Платёж списывается дважды. Найдите причину в коде, который прошёл ревью

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

идемпотентностьдвойное списаниеплатёжный сервисраспределённые системыSpring BootJavaPostgreSQLретраиконкурентные запросымикросервисная архитектура
Habr
RU

Дайте нормально поработать или я сделаю это сам

Получив на этот и остальные вопросы утвердительный ответ, я принял оффер.  Каково же было мое удивление в первый день работ…

ПроксиProxySOCKS5WebSocketмаршрутизацияраспределённые системыDockerDevOpsOpen Sourceсетевые технологии
Habr
RU

[Перевод] Компактация лога в Apache Kafka повреждала данные. Вот как мы это исправили

Компактация лога в Kafka может привести к ситуации, когда разные реплики одного топика начинают хранить разную версию данных — и расхождение сохраня…

kafkaApache Kafkaкомпактация логоврепликация данныхраспределённые системыцелостность данныхRedpanda Streamingреплики Kafka
Habr
RU

А какое у вас нишевое хобби? Я вот сделала курс по архитектуре мессенджера, пока готовилась к собесу

Этим летом я проходила собеседование на продакта в компанию, у которой есть свой мессенджер. Среди этапов был System Design, и к нему надо было подг…

system designархитектура мессенджераподготовка к собеседованиютехническое интервьюуправление продуктомсамообучениеинтерактивный тренажёрпет-проектopen sourceраспределённые системы
Habr
RU

Два человека правят один документ офлайн. Изобретаем гугл-док без сервера-арбитра

Гугл-док держится на сервере, который выстраивает все правки в один порядок. Убираем сервер: две копии правятся офлайн и обязаны сойтись символ в си…

CRDTсовместное редактированиеoffline-firstраспределённые системысинхронизацияYATAYjsLoroGolocal-first
Habr
RU

Heartbeat: как мы создали систему управления системой вместо обычных сигналов

Привет! Меня зовут Александр Илларионов, я бэкенд‑разработчик в Altenar. Мы работаем на довольно сложном и при этом очень интересном…

heartbeatмикросервисыkubernetesprobesHealth Checks.NETC#мониторинграспределённые системыспортивные данные
Habr
RU

EvertyCloud: что я сделал чтобы компании перестали арендовать емкость

Меня зовут Артур Валиев. За последнее время я сделал несколько проектов на Rust + Iced, которые со стороны действительно можно принять за отдельные…

RustIcedEvertyCloudEvertyDeskEvertyDisplayраспределённые системыоблачное хранилищеTCPUDPrclone
Habr
RU

Как защитить платежный API от двойных списаний с помощью идемпотентности

Пользователь нажал кнопку оплаты один раз, но деньги списались дважды — такой сценарий возникает не из‑за редкой ошибки, а из‑за…

идемпотентностьраспределённые системымикросервисыAPIbackendплатежные системыотказоустойчивостьPostgreSQLконкурентный доступархитектура ПО
Habr
RU

Как пережить резкий рост нагрузки в Kubernetes без надежды только на автоскейлинг

Автоскейлинг часто воспринимают как страховку от любых всплесков нагрузки: вырос CPU — появились новые поды. Но в реальных…

высоконагруженные системымасштабированиеархитектура системотказоустойчивостьавтоскейлингKubernetesбалансировка нагрузкираспределённые системыPostgreSQLпроизводительность
Habr
RU

AVM изнутри задачи, сбои и состояние виртуальных машин

В первой части мы разобрали, почему Aeza ушла со сторонней платформы и как AVM устроен в общих чертах. Здесь уровень ниже: путь запроса от вызова до…

AezaAVMвиртуализациявиртуальные машиныlibvirtgRPCраспределённые системыотказоустойчивостьидемпотентностьstate machine
Habr
RU

Распределённые вычисления: гарантия завершения на исполнителях, которые вам ничего не должны

Если вы ведете pet‑проекты, требующие большого количества вычислений, то наверняка сталкивались с проблемой их - вычислений - оркестрации. Содержать…

распределённые системыотказоустойчивостьMLOpsgpuархитектура повоспроизводимость моделейоркестрацияобучение моделейоблачные вычисленияпроектирование
Habr
RU

Мой тестовый харнесс нашёл баг в моей же реализации Raft. Рассказываю, как именно

Набор тестов, который всегда зелёный, содержит непроверяемое допущение: он может ловить ошибки, а может не смотреть вообще — по цвету это неразличим…

raftконсенсусдетерминированное тестированиераспределённые системытестированиелинеаризуемостьотказоустойчивостьtypescript
Habr
RU

Цена, которой не существовало: две недели поиска бага, который не видел мониторинг

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

кэшированиераспределённые системыконсистентность данныхмониторингнаблюдаемостьметрикиразбор инцидента
Habr
RU

[Перевод] Как потеря 17% сессий запустила цепную реакцию в инфраструктуре Discord

25 марта 2026 года голосовая и видеосвязь Discord перестала нормально работать для большинства пользователей. Причиной стал не один большой сбой, а…

распределённые системыdiscordkubernetesElixirerlangпроизводительностьмикросервисымасштабирование
Habr
RU

OpenTelemetry как единый стандарт наблюдаемости для распределённых систем

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

OpenTelemetryнаблюдаемостьраспределённые системытелеметрияметрикилогированиераспределённая трассировкаOpenTelemetry CollectorOTLPсэмплирование.
Habr
RU

Как корректно описать приём и обработку webhook

Webhook часто воспринимают как простой механизм доставки уведомлений: пришло событие — обработали — вернули 200. На практике име…

системный анализсистемный аналитиктребованияwebhookинтеграцииAPIраспределённые системыидемпотентностьобработка событийотказоустойчивость
Habr
RU

Как сделать приложение быстрым и надёжным с помощью межсервисных запросов

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

микросервисная архитектурамежсервисное взаимодействиераспределённые системыAPI Gatewayагрегатор данныхGraphQLCQRSотказоустойчивостьмасштабирование системпаттерны проектирования
Habr
RU

[Перевод] Генератор ID для микросервисной архитектуры: гайд по масштабированию целочисленных идентификаторов

В распределённых системах генерация уникальных ID быстро становится архитектурной задачей: центральная база создаёт узкое место, а переход на UUID м…

микросервисная архитектурамонолитраспределённые системыотказоустойчивостьгенерация идентификаторовмасштабирование системархитектура приложенийDynamoDBMySQL
Habr
RU

Как тестируют баги, которые невозможно воспроизвести

Редкий сбой в распределённой системе может месяцами ускользать от команды, а при попытке воспроизведения исчезать из‑за изменивш…

детерминированное тестированиераспределённые системывоспроизводимость ошибокотказоустойчивостьасинхронные системыконкурентное выполнениеfault injectionфаззингFoundationDBTigerBeetle
Habr
RU

[Перевод] 9 AI-агентов делят одну API-квоту. Почему обычные ретраи только ломают систему

Девять AI-агентов делят одну API-квоту — и один ответ 429 быстро превращается в каскадный отказ всей системы. В этой статье разбираемся, почему стан…

AI-агентымультиагентные системыrate limitingограничение запросовAPI-квотыCircuit Breakerраспределённые системыbackpressureRedis
Habr
RU

Eventual Consistency: как мы починили тормоза апрува и сломали бюджет

Мы убрали одну блокировку, чтобы апрувы перестали тормозить. Через несколько недель из-за этого клиент пробил квартальный бюджет – а наша система эт…

eventual consistencyсогласованность данныхCQRSоптимистичная блокировкаEF Coreпроекцииsagaидемпотентностьраспределённые системыread model
Habr
RU

Idempotency keys: 5 граблей, которые мы поймали на проде

Пятница, 23:47. PagerDuty: “Платёж AmEx, провайдер вернул 5xx три раза подряд, билеты не зарезервированы.” Открываю логи – действительно три ответа…

идемпотентностьidempotencyплатежираспределённые системы.NETC#APIintent-keyrace conditionграбли
Habr
RU

Репликация по DDIA: что я понял, только когда сам сломал прод

В понедельник утром бухгалтер из клиентской компании написала мне в Telegram: «У контрагента в SAP всё оплачено, а в Smartup долг 12 миллионов». Я о…

DDIAрепликацияmulti-leaderраспределённые системысинхронизация данныхSAP Business OneHANAконфликты репликацииlast-write-winsидемпотентность
Habr
RU

Cache is hard — почему инвалидация кэша — это проблема согласованности, а не производительности

Кэш часто воспринимают как простой способ ускорить систему: положили данные ближе к приложению — получили быстрый ответ. Но&nbsp…

кэшированиеинвалидация кэшасогласованность данныхраспределённые системыRedisPostgreSQLCDCKafkaTTLвысоконагруженные системы