lenec ru

← все теги

#microservices

20 постов

Strangler Fig: как переезжать с монолита на сервисы без даунтайма

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

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

Correlation ID на практике: как сшить логи в одну историю запроса

Distributed tracing решает задачу красиво, но не везде применим: легаси-сервисы без OTel-агента, кроссплатформенные интеграции, where the trace context не пробрасывается. Часто проще иметь хотя бы…

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

Distributed tracing с OpenTelemetry: что включить и как читать спаны

Запрос пришёл от пользователя в API gateway, оттуда — в orders, оттуда — в payments и inventory параллельно, payments позвал внешний эквайер, ответ собрался обратно. Где-то в этой цепочке произошёл…

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

Database per service: критерии, компромиссы и где это правда работает

«У каждого сервиса своя база» — одно из тех правил, которые звучат настолько разумно, что хочется применить везде сразу. На бумаге всё аккуратно: сервисы независимы, релизятся отдельно, схему меняет…

293 10K
Алексей Морозов

Границы микросервисов: критерии, по которым выделять и не дробить лишнего

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

166 11K
Алексей Морозов

Микросервисная архитектура: паттерны коммуникации (sync, async, event-driven)

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

0 14K
Анна Бэкендова

Bounded context: как разрезать предметную область, чтобы команды не толкались локтями

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

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

Контрактное тестирование между сервисами: Pact и его альтернативы

Микросервисы интегрируются через API. Тесты у каждой команды свои. Каждая ходит в моки соседей. На стейдже всё зелено. На проде ловите 500 от orders, потому что payments выкатил релиз, в котором поле…

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

BFF (Backend for Frontend): где он реально нужен, а где избыточен

Backend for Frontend появился как ответ на конкретную боль: разные клиенты (веб, iOS, Android, умный холодильник) дёргают одни и те же бекенд-сервисы, но каждому нужен свой формат данных, свой набор…

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

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

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

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

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

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

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

API gateway против service mesh: где провести границу в реальной архитектуре

«Нам нужен gateway» и «мы переезжаем на service mesh» — две фразы, которые я слышу на проектах с микросервисами с одинаковой регулярностью. И каждый раз приходится разбираться, что именно команда…

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

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

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

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

Bulkhead pattern: как не дать одному соседу утопить весь сервис

Сценарий, который я разбирал в трёх компаниях: сервис A зовёт сервис B и сервис C. B начинает тормозить, отвечает по 5 секунд. Запросы к B забивают весь пул потоков сервиса A. Запросы к C, которые…

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

Service discovery: client-side, server-side и где они ломаются

Сценарий, который повторяется на каждом проекте с микросервисами на старте: команда делает первые два сервиса, прописывает hardcoded URL http://orders-service:8080 в конфиге payments. Работает. Через…

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

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

«Микросервисы» в современных командах часто превращаются в религиозный термин. На стартапе из пяти человек поднимают пятнадцать сервисов с своими репозиториями, своими CI и своими очередями, потому…

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

Bounded context: как разрезать предметную область, чтобы команды не толкались локтями

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

390 12K
Ирина Лисицына

Контрактные тесты с Pact: где спасает, а где это оверкил

Контрактное тестирование закрывает пробел между unit-тестами и e2e: проверяет, что договор между двумя сервисами соблюдается. Кейс из жизни: фронт делает запрос на /api/orders, бекенд переименовал…

290 13K
Елена Воронова

Database per service: критерии, компромиссы и где это правда работает

«У каждого сервиса своя база» — одно из тех правил, которые звучат настолько разумно, что хочется применить везде сразу. На бумаге всё аккуратно: сервисы независимы, релизятся отдельно, схему меняет…

370 13K
Ирина Лисицына

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

«Микросервисы» в современных командах часто превращаются в религиозный термин. На стартапе из пяти человек поднимают пятнадцать сервисов с своими репозиториями, своими CI и своими очередями, потому…

444 18K
Ирина Лисицына