lenec ru

← все теги

#architecture

24 поста

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

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

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

Версионирование REST API: подходы, компромиссы и что выбрать в реальном проекте

Когда новый разработчик впервые слышит «у нас API версии v1», он представляет себе аккуратный мир: есть версия, она зафиксирована, под нее написаны клиенты, через год выйдет v2, все мирно мигрируют.…

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

FastAPI dependency injection: рабочие паттерны и антипаттерны

FastAPI часто хвалят за систему зависимостей. И за дело: Depends — это, наверное, главная фича, которая делает фреймворк не просто «асинхронным Flask», а полноценным инструментом. Но чем больше…

470 10K
Андрей Крылов

Schema registry для событий: контракты, совместимость и где это окупается

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

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

Health checks как контракт сервиса: SLO, зависимости и что обещать наружу

«Health check» в инженерной практике обычно сводят к разговору про probes в оркестраторе. Это операционная сторона, и она важна, но в ней часто теряется главное: health check — это контракт сервиса.…

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Hexagonal architecture на практике: ports и adapters без догм

Гексагональная архитектура (она же ports & adapters) — одна из тех концепций, про которые проще всего написать что-то вроде «отделите бизнес-логику от инфраструктуры» и закончить статью. Проблема в…

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

Anti-corruption layer: как интегрироваться с legacy и не размазать его по своему сервису

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

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

Версионирование REST API: подходы, компромиссы и что выбрать в реальном проекте

Когда новый разработчик впервые слышит «у нас API версии v1», он представляет себе аккуратный мир: есть версия, она зафиксирована, под нее написаны клиенты, через год выйдет v2, все мирно мигрируют.…

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

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

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

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

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

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

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

Hexagonal architecture на практике: ports и adapters без догм

Гексагональная архитектура (она же ports & adapters) — одна из тех концепций, про которые проще всего написать что-то вроде «отделите бизнес-логику от инфраструктуры» и закончить статью. Проблема в…

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

Graceful shutdown: как корректно гасить сервис под нагрузкой

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

219 14K
Ирина Лисицына

Godot 4 signals: как не утонуть в связях между нодами

Сигналы в Godot — одна из тех штук, которые в начале кажутся очевидными, а через полгода большого проекта превращаются в спагетти. Кто на что подписан, кто эмитит, что упало в _exit_tree —…

220 16K
Виктор Голубев

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

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

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

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

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

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

ADR vs RFC vs design doc: чем отличаются и когда что писать

Каждое неочевидное архитектурное решение через год задают повторно. «А почему мы используем Postgres, а не MongoDB?». «Почему очередь на Redis, а не на Kafka?». «Почему всё в одном репозитории, а не…

312 10K
Татьяна Котова

Schema registry для событий: контракты, совместимость и где это окупается

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

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

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

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

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

Health checks: liveness, readiness и startup probes на практике

Когда первый раз настраиваешь health checks в Kubernetes, кажется, что разница между liveness и readiness — формальность. Оба возвращают 200, оба смотрят на «жив ли сервис». Через пару инцидентов…

388 14K
Ирина Лисицына