lenec ru

← все теги

#distributed-systems

13 постов

Exactly-once vs at-least-once: что реально гарантируют брокеры

Exactly-once delivery — самый продаваемый и самый недопонятый термин в распределёнке. На презентациях производителей брокеров он звучит как магия. На проде через полгода работы инженеры обнаруживают,…

269 19K
Алексей Морозов

Координация остановки в распределённой системе: drain трафика, in-flight запросы, очереди

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

71 15K
Алексей Морозов

Outbox pattern без Kafka: реализация на RabbitMQ и NATS

Outbox pattern в учебниках всегда показывают на Kafka. Это создаёт ложное впечатление, что без Kafka паттерн «не настоящий». На самом деле outbox решает универсальную проблему — атомарность записи в…

430 14K
Алексей Морозов

Transactional messaging: как связать БД и брокер без боли

Связка «изменили данные в БД и опубликовали событие в брокер» — самая частая точка отказа в распределённых системах. Я разбирал её в трёх компаниях, и каждый раз корень был один: команда пыталась…

398 13K
Алексей Морозов

Retry, backoff и jitter: как делать повторы, которые не убьют сервис

Любой код, который ходит в сеть, рано или поздно встречается с сетевой ошибкой. Сервис прислал 503, БД таймаутнула, gRPC отвалился по дедлайну. Логичный рефлекс — повторить запрос. Логичный, но…

123 17K
Алексей Морозов

Eventual consistency: что показывать пользователю, пока данные сходятся

Eventual consistency — это не «лучшая или худшая» согласованность, это просто другая модель. Сильные гарантии, к которым все привыкли в одной базе, в распределённой системе либо стоят дорого, либо…

368 12K
Алексей Морозов

Inbox pattern: как не обработать одно событие дважды

Outbox pattern закрывает половину задачи: producer гарантирует, что событие будет опубликовано хотя бы раз. Но «хотя бы раз» означает «возможно, дважды». На стороне consumer'а это превращается в…

243 17K
Алексей Морозов

Circuit breaker: как защитить сервис от лавины запросов к умирающему соседу

Сценарий, который я разбирал не раз: сервис заказов зовёт сервис каталога. Каталог тормозит, ответы идут по 5 секунд вместо 50 миллисекунд. Пул потоков сервиса заказов забивается ожиданием каталога,…

363 12K
Алексей Морозов

Saga в распределённых транзакциях: orchestration vs choreography на практике

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

364 16K
Алексей Морозов

Outbox pattern: как не потерять сообщения при записи в БД

Сценарий, который я разбирал в трёх разных компаниях: сервис принимает заказ, пишет его в Postgres и шлёт событие OrderCreated в Kafka. Логика понятная, код в одном методе, тесты зелёные. На проде…

366 12K
Алексей Морозов

Rate limiting на практике: token bucket, leaky bucket и где какой нужен

Rate limiting — это не «защита от DDoS», как часто думают. DDoS лечится на уровне инфраструктуры (CDN, anti-DDoS-прокси). Rate limiting в API-сервисе решает другие задачи: справедливое распределение…

469 18K
Алексей Морозов

Идемпотентность в HTTP API: ключи, хранение и ретраи на практике

POST на /payments вернул 504. Клиент не знает, прошёл платёж или нет, и нажимает кнопку ещё раз. Через минуту в базе два списания на одного пользователя. Классика, которую я разбирал в трёх компаниях…

223 16K
Алексей Морозов

Eventual consistency: что показывать пользователю, пока данные сходятся

Eventual consistency — это не «лучшая или худшая» согласованность, это просто другая модель. Сильные гарантии, к которым все привыкли в одной базе, в распределённой системе либо стоят дорого, либо…

169 19K
Ирина Лисицына