раздел 09
Backend
REST, RPC, слои, границы, кеши, очереди. Всё, из чего состоит серверная часть.
Начать раздел
Хочу пройти
Не получилось изменить список. Попробуй ещё раз.
Без входа у каждого урока видно начало. Войди, чтобы читать целиком, отмечать пройденное и решать задачи. войти
Уроки раздела
- Кеширование: что класть, что нет и как решать
- Functional Core, Imperative Shell: где решение, где действие
- Структура приложения: клиент, сервер и слои
- REST на практике: ресурсы, версии, пагинация
- GraphQL, gRPC и кодогенерация
- Коммуникация и realtime: что выбрать в API
- Слои, гексагон и Clean: стрелки внутрь
- DDD: стратегия и тактика
- Прагматичные альтернативы DDD · часть 1
- Прагматичные альтернативы DDD · часть 2
- Философия границ: линзы · часть 1
- Философия границ: линзы · часть 2
- DI и слои данных: кто собирает граф и сколько нужно моделей
- CAP и PACELC: распределённые системы без магии
- CQRS и Event Sourcing: всерьёз и без фанатизма
- Serverless и два кейса системного дизайна
- Микросервисы: когда они оправданы
- Паттерны отказоустойчивости
- Надёжная доставка: outbox, inbox и саги
- Паттерны очередей и интеграции
- Топология микросервисов: gateway, discovery, mesh
- Multi-tenancy: изоляция данных и provisioning тенанта
- SaaS и деньги: платежи, webhooks, подписки, metering
- SaaS для enterprise: квоты, фичефлаги, SSO, audit log
- Лестница моделирования: онтологии, C4, Event Storming, FSM
- Процессы и формальные методы: BPMN, workflow engines, TLA+
Понятия курса
Понятия разобраны внутри уроков. Нажми на понятие, чтобы открыть урок, где оно объясняется.
API Design
- Когда применять WebSocketBi-directional, low-latency, push. Не идеален для request-response. Гарантии порядка vs duplex.урок 6 · Коммуникация и realtime: что выбрать в API
- Обработка ошибок в GraphQLerrors массив vs typed-errors-as-data, GraphQLError, partial data, codes/extensions, маппинг в HTTP.урок 5 · GraphQL, gRPC и кодогенерация
- Проектирование REST: пример билетыUser: купить билет, список купленных, рефанд. Moderator: смена цены, удаление, создание события, отмена покупки.урок 4 · REST на практике: ресурсы, версии, пагинация
- Communication patternsSync (req-rep), async (fire-forget, pub-sub, competing consumers), streaming (SSE, WebSocket), idempotency.урок 6 · Коммуникация и realtime: что выбрать в API
- GraphQLTypes/queries/mutations/subscriptions, fragments, directives, resolvers, N+1, DataLoader.урок 5 · GraphQL, gRPC и кодогенерация
- gRPCProtobuf, unary/stream/bidi, interceptors, @grpc/grpc-js.урок 5 · GraphQL, gRPC и кодогенерация
- REST APIREST constraints, REST vs RPC, HATEOAS, resource-oriented design, версионирование.урок 4 · REST на практике: ресурсы, версии, пагинацияопираются: урок 5, урок 6
- REST: ресурсный роутингСуществительные vs глаголы, иерархия ресурсов, версионирование, пагинация, фильтры, status codes.урок 4 · REST на практике: ресурсы, версии, пагинация
- socket.io в 2026Историческая роль, fallback на polling, оверхед. Сегодня предпочитают нативный WS, GraphQL subscriptions, SSE.урок 6 · Коммуникация и realtime: что выбрать в API
Стили архитектуры
- Layered (N-Tier)Presentation -> Application -> Domain -> Infrastructure. Минусы anemic domain model.урок 7 · Слои, гексагон и Clean: стрелки внутрьопираются: урок 8
- Clean (Onion)Entities -> Use Cases -> Adapters -> Frameworks. Правило: стрелки внутрь.урок 7 · Слои, гексагон и Clean: стрелки внутрьопираются: урок 9
- Domain-Driven DesignСтратегический (BC, ubiquitous language, context map, subdomain) и тактический (Entity, VO, Aggregate, Domain Event, Service, Repository, Factory).урок 8 · DDD: стратегия и тактикаопираются: урок 9, урок 11, урок 13, урок 15, урок 25
- Hexagonal (Ports & Adapters)Driving/driven ports, adapters. Сменить транспорт/БД: один адаптер.урок 7 · Слои, гексагон и Clean: стрелки внутрьопираются: урок 13
Прагматичные альтернативы DDD
- "Rails Way" / Convention over ConfigurationНе архитектура, а культура. Соглашения вместо абстракций. Один официальный путь решения типовой задачи. Magic > explicit. GitLab, GitHub, Shopify, Basecamp.урок 10 · Прагматичные альтернативы DDD · часть 2
- Choose Boring Technology (McKinley)Мета-принцип. У команды конечное число "innovation tokens", каждая нестандартная технология тратит токен. По умолчанию выбирай скучную, проверенную.урок 10 · Прагматичные альтернативы DDD · часть 2
- Transaction Script (Fowler, PoEAA)Прямолинейный процедурный подход: запрос -> SQL -> ответ. Никаких агрегатов, репозиториев, мапперов. Идеален для CRUD, админок, batch-скриптов.урок 9 · Прагматичные альтернативы DDD · часть 1
- Прагматичные альтернативы DDD: обзорDDD/Clean мощные, но дорогие. 80-90% продакшн-кода в индустрии написан проще: Transaction Script, Active Record, modular monolith. Сначала спроси, окупится ли инвестиция.урок 9 · Прагматичные альтернативы DDD · часть 1опираются: урок 10
- CQRS без DDDRead и Write модели разделены, без агрегатов и event sourcing. Команды пишут SQL напрямую, queries читают view/projection. Простой пайплайн без церемоний.урок 9 · Прагматичные альтернативы DDD · часть 1
- Modular Monolith / Package by FeatureГруппировка по фичам, а не по слоям. modules/users/, modules/billing/, у каждого явные границы и публичный API через index.ts. DHH и Shopify это активно продвигают.урок 10 · Прагматичные альтернативы DDD · часть 2опираются: урок 17
- Vertical Slice Architecture (Bogard)Фичи как вертикальные срезы вместо горизонтальных слоёв. Простая фича = 50 строк, сложная = модуль. Дублирование лучше ложных абстракций.урок 9 · Прагматичные альтернативы DDD · часть 1
- Data-Oriented Design (DOD)"Данные первичны, поведение вторично". Вместо user.calculateScore() массивы данных и функции над ними. Cache-friendly, SIMD-friendly, противоположность ООП-DDD.урок 10 · Прагматичные альтернативы DDD · часть 2
- Relational-First / Database-DrivenБД это и есть модель. Postgres с views, materialized views, triggers, RLS, generated columns делает 70% работы, которую DDD-проекты пишут в коде.урок 10 · Прагматичные альтернативы DDD · часть 2
Философия границ
- Линза: Data Ownership / Source of TruthКто пишет в эту таблицу. Если двум сервисам нужна одна сущность, владелец должен быть ровно один (через outbox/events отдаёт остальным). Без этого двойные записи и конфликты.урок 11 · Философия границ: линзы · часть 1
- Линза: Deployment CadenceЧто деплоится вместе. Если две части системы всегда деплоятся одной транзакцией, они принадлежат одному модулю. Если разделены, независимый деплой обязан работать.урок 12 · Философия границ: линзы · часть 2
- Линза: Domain Language (DDD Bounded Context)Где меняется смысл слова. Customer в биллинге это запись с tax ID и payment method, в маркетинге это lead с trackable interactions. Один термин, две модели, разные инварианты.урок 11 · Философия границ: линзы · часть 1
- Линза: Failure / Blast RadiusЧто не должно валиться вместе. Если падение notifications валит payments, граница нарисована неправильно. Bulkhead-паттерн это техническая реализация.урок 11 · Философия границ: линзы · часть 1
- Линза: Lifecycle / ReplaceabilityЧто мы планируем переписать через год. Изолируй уже сейчас. Strangler Fig работает только если граница вокруг "к удалению" части проведена заранее.урок 12 · Философия границ: линзы · часть 2
- Линза: Performance / Scaling ProfileЧто нужно масштабировать независимо. Read-heavy vs write-heavy, CPU-bound vs I/O-bound, latency-sensitive vs batch. Если в одном сервисе живут разные профили, они мешают друг другу.урок 12 · Философия границ: линзы · часть 2
- Линза: Rate of ChangeЧто меняется раз в неделю vs раз в год. Часто меняющийся код стоит изолировать от стабильного: иначе rebuild/redeploy/regression-tests стабильной части идут впустую.урок 11 · Философия границ: линзы · часть 1
- Линза: Security / Trust BoundaryКто кому доверяет. Internal API vs public API, admin zone vs user zone, multi-tenant isolation. Trust boundary всегда требует жёсткой проверки на границе, естественное место для шва.урок 12 · Философия границ: линзы · часть 2
- Линза: Team Topologies (закон Конвея)Кто этим владеет. Системы повторяют структуру коммуникации команд. Если граница модуля не совпадает с границей команды, получаешь гонки на code review или параллельные теневые реализации.урок 11 · Философия границ: линзы · часть 1
- Линза: Compliance / RegulationPII vs non-PII, PCI-DSS зона vs всё остальное, GDPR vs обычные данные. Регуляторные границы часто обязывают изоляцию, даже если по другим линзам она не нужна.урок 12 · Философия границ: линзы · часть 2
- Философия линз: как проводить границыГраница в системе это проекция на конкретную ось. Bounded Context из DDD это лишь одна линза (через язык домена). Есть ~10 других линз, и хороший шов совпадает по большинству.урок 11 · Философия границ: линзы · часть 1опираются: урок 12, урок 17
- Convergence: качество шва = число совпадающих линзШов хороший, если совпадает по большинству линз сразу. Если совпадает по 1-2 (пример: только техно-стек), получаем distributed monolith. Главная эвристика проектирования швов.урок 12 · Философия границ: линзы · часть 2
DI и слои
- Data Access patternsRepository, Unit of Work, Active Record vs Data Mapper, DAO, Query Object, Transaction Manager.урок 13 · DI и слои данных: кто собирает граф и сколько нужно моделей
- DI и IoC: глубжеDI vs Service Locator. Constructor/property/method injection. Lifecycle (singleton/transient/scoped).урок 13 · DI и слои данных: кто собирает граф и сколько нужно моделей
- DTO / Domain / Entity / PersistenceПочему 3-4 модели, не одна. Мапперы на границах. Антипаттерны: anemic, exposing entity в API.урок 13 · DI и слои данных: кто собирает граф и сколько нужно моделей
Distributed
- Гарантия доставки emailOutbox pattern, retries с экспоненциальным backoff, idempotency key, deduplication, bounce/complaint, провайдер.урок 16 · Serverless и два кейса системного дизайна
- Топологии распределённых системЗвезда, шина, кольцо, конвейер, fully connected.урок 14 · CAP и PACELC: распределённые системы без магии
- CAP, ACID, BASE, PACELCСвойства одиночной БД и распределённой. Когда что выбирать.урок 14 · CAP и PACELC: распределённые системы без магииопираются: урок 16, урок 18
- Consistency modelsLinearizable / Sequential / Causal / Read-your-writes / Monotonic / Eventual. CRDTs.урок 14 · CAP и PACELC: распределённые системы без магииопираются: урок 15
- ESB vs MQ vs Event StreamКорпоративные шины, MQ, event streaming (Kafka).урок 15 · CQRS и Event Sourcing: всерьёз и без фанатизмаопираются: урок 20
- Serverless (FaaS)AWS Lambda, прогрев, triggers, лимиты, sandboxes.урок 16 · Serverless и два кейса системного дизайна
- Система рейтинга в нагруженном приложенииWrite-heavy, sharding by user, eventual consistency, snapshot+delta, антифрод, ETL в OLAP.урок 16 · Serverless и два кейса системного дизайна
- CQRS / Event SourcingEvent store, projections, snapshots, Saga.урок 15 · CQRS и Event Sourcing: всерьёз и без фанатизмаопираются: урок 19
Microservices patterns
- Idempotency keysAt-least-once delivery -> дубли -> Idempotency key обязателен.урок 18 · Паттерны отказоустойчивостиопираются: урок 19, урок 23
- Retry + exponential backoff + jitterБез jitter: thundering herd. Идемпотентность обязательна.урок 18 · Паттерны отказоустойчивости
- Anti-Corruption LayerАдаптер к legacy/external системам: защищает домен от чужих моделей.урок 17 · Микросервисы: когда они оправданы
- API Gateway / BFFЕдиная точка входа: auth, rate limit, агрегация. BFF: отдельный слой под клиента.урок 21 · Топология микросервисов: gateway, discovery, mesh
- Bulkhead isolationИзоляция пулов ресурсов: один tанущий downstream не съедает всё.урок 18 · Паттерны отказоустойчивости
- Circuit BreakerЗащита от каскадных падений (Hystrix, resilience4j). Half-open, трёхкомпонентный FSM.урок 18 · Паттерны отказоустойчивостиопираются: урок 21
- Distributed tracingOpenTelemetry, trace_id через цепочку. Jaeger, Zipkin.урок 21 · Топология микросервисов: gateway, discovery, mesh
- Event-driven architectureAsync события вместо sync RPC. Когда уместно, когда хаос.урок 19 · Надёжная доставка: outbox, inbox и сагиопираются: урок 16
- Inbox / dedupЗащита consumer от дублей. Хранение processed event id.урок 19 · Надёжная доставка: outbox, inbox и саги
- Microservices: когда и зачемTrade-off между monolith и MS. Modular monolith: недооценённая середина. Когда МС оправданы.урок 17 · Микросервисы: когда они оправданыопираются: урок 11, урок 18, урок 21
- Outbox patternАтомарная запись в БД + event в одной транзакции. Отдельный процесс читает outbox и публикует.урок 19 · Надёжная доставка: outbox, inbox и сагиопираются: урок 20, урок 23
- Saga: orchestration vs choreographyДлинные бизнес-процессы с компенсациями. Orchestrator vs event-driven choreography.урок 19 · Надёжная доставка: outbox, inbox и сагиопираются: урок 22, урок 26
- Service DiscoveryConsul, Eureka, K8s Service DNS. Client-side vs server-side discovery.урок 21 · Топология микросервисов: gateway, discovery, mesh
- Strangler FigМиграция legacy monolith постепенно: новые фичи на новой системе.урок 17 · Микросервисы: когда они оправданы
- Timeout & deadline propagationКаждый RPC имеет timeout, и он прокидывается по цепочке.урок 18 · Паттерны отказоустойчивости
- Антипаттерн: Distributed MonolithМС, которые обязательно деплоить вместе: худшее из обоих миров.урок 17 · Микросервисы: когда они оправданы
- Sidecar / Service MeshIstio, Linkerd. mTLS, retries, traffic shifting на уровне инфраструктуры.урок 21 · Топология микросервисов: gateway, discovery, mesh
Messaging
- Enterprise Integration PatternsP2P vs Pub-Sub, content-based router, message filter, recipient list, splitter/aggregator.урок 20 · Паттерны очередей и интеграции
- Reliability: DLQ, poison, TTLGuaranteed delivery, persistent messages, ack, dead letter queue.урок 20 · Паттерны очередей и интеграции
- Advanced MQ patternsPriority queue, delay queue, claim check, competing consumers, saga.урок 20 · Паттерны очередей и интеграции
Web architecture
- Подписки на события в реальном времениWebSocket vs SSE vs long-polling. Реконнекты, authn для WS, offline-сценарии.урок 6 · Коммуникация и realtime: что выбрать в API
- Async-запросы в React-приложенииГде лежит fetch (hook, RTK Query, React Query), отмена при unmount, race-conditions, throttling, error UX.тема без урока
- HTTP-кешированиеCache-Control (max-age, s-maxage, private vs public, no-store vs no-cache), ETag и If-None-Match, условный GET и 304, stale-while-revalidate, слои браузер -> CDN -> прокси.урок 1 · Кеширование: что класть, что нет и как решать
- MPA / SPA / SSR / SSG / ISR / RSC / IslandsСпектр web-архитектур и когда что выбирать.тема без урока
- UI patterns: MVC/MVP/MVVM/Flux/Redux/MVI/ElmТиповые UI-архитектуры, эволюция от MVC к unidirectional flow.тема без урока
- Feature-Sliced Design (FSD)app / processes / pages / widgets / features / entities / shared. Public API через index.ts.тема без урока
- Functional Core / Imperative ShellPure ядро + thin shell с I/O. Тесты на core без mocks.урок 2 · Functional Core, Imperative Shell: где решение, где действие
- Кеширование: что класть, что нетКвадрант стоимость на частоту изменения, что нельзя кешировать (утечки, stale денег), дизайн ключа, кардинальность, cache-aside, negative caching, TTL и инвалидация связанных ключей.урок 1 · Кеширование: что класть, что нет и как решать
- Слои кеша, вытеснение, stampedeЛесенка CDN / Redis / in-process, почему Map в памяти не масштабируется, политики вытеснения (LRU, LFU, 2Q, SLRU, Belady), cache stampede и single-flight через Promise, TTL jitter, refresh-ahead.урок 1 · Кеширование: что класть, что нет и как решать
Парадигмы и codegen
- Metaprogramming & Code GenerationAPI client из OpenAPI/Protobuf, type generation, ORM migrations, fluent DSL, decorators, reflect-metadata.урок 5 · GraphQL, gRPC и кодогенерация
- Multi-Paradigm ProgrammingImperative/procedural/OOP/FP/declarative/reactive/logic. Под задачу: свою парадигму.урок 10 · Прагматичные альтернативы DDD · часть 2
Application structure
- Антипаттерн толстый контроллерЧем плох, разделение слоёв (controller, service, repository), когда тонкий контроллер избыточен.урок 3 · Структура приложения: клиент, сервер и слоиопираются: урок 7
- Клиент-серверная модельРазделение ролей, тонкий vs толстый клиент, где живёт state.урок 3 · Структура приложения: клиент, сервер и слоиопираются: урок 4
- Separation of concerns vs SRPЧто такое SoC, как соотносится с SRP, минусы SRP в формулировке Мартина, переосмысление через Cohesion.урок 3 · Структура приложения: клиент, сервер и слоиопираются: урок 7
- Stateful vs Stateless для NodeГде живёт сессия, sticky sessions, JWT vs server session, последствия для масштабирования.урок 3 · Структура приложения: клиент, сервер и слои
- Application Structure & ModularityPackage by layer / by feature / vertical slice / modular monolith / microservices / micro-frontends.урок 10 · Прагматичные альтернативы DDD · часть 2
Моделирование (9-bis)
- C4, UML, ArchiMate, DFDVisual notations. Diagrams as Code: Mermaid, PlantUML, Structurizr, D2.урок 25 · Лестница моделирования: онтологии, C4, Event Storming, FSM
- Лестница уровней моделированияGlossary -> ER -> Event Storming -> C4 -> State diagrams -> BPMN -> DMN -> TLA+. Выбор уровня под задачу.урок 25 · Лестница моделирования: онтологии, C4, Event Storming, FSMопираются: урок 26
- CDM / LDM / PDMConceptual / Logical / Physical Data Models. ER, IDEF1X. MDA: CIM/PIM/PSM.урок 25 · Лестница моделирования: онтологии, C4, Event Storming, FSM
- Event StormingWorkshop-формат discovery. Big Picture / Process / Design level.урок 25 · Лестница моделирования: онтологии, C4, Event Storming, FSM
- FSM, Statecharts (Harel)Mealy vs Moore. Hierarchical/parallel states. XState, Robot, fsmoothy.урок 25 · Лестница моделирования: онтологии, C4, Event Storming, FSM
- Концептуальные модели и онтологииЛестница reality -> conceptualization -> ontology -> conceptual -> logical -> physical.урок 25 · Лестница моделирования: онтологии, C4, Event Storming, FSM
- BPMN / CMMN / DMN: Triple CrownBPMN: структурированные процессы, CMMN: case management, DMN: правила. Camunda, Signavio.урок 26 · Процессы и формальные методы: BPMN, workflow engines, TLA+
- Petri NetsМеста + переходы + токены. Concurrent / distributed моделирование, формальный анализ.урок 26 · Процессы и формальные методы: BPMN, workflow engines, TLA+
- Workflow Engines: Temporal, Camunda, RestateDurable execution. Temporal (workflow as code), Camunda 8 (BPMN-нативный), Restate.урок 26 · Процессы и формальные методы: BPMN, workflow engines, TLA+
- Формальные методы liteTLA+, Alloy, P, Coq/Lean/Agda/Idris. Где это окупается.урок 26 · Процессы и формальные методы: BPMN, workflow engines, TLA+
- Process Calculi: CSP, π-calculusФормальные алгебры процессов. CSP живёт в Go channels, π: в академии.урок 26 · Процессы и формальные методы: BPMN, workflow engines, TLA+
SaaS-паттерны
- Интеграция с платёжными провайдерамиStripe, Adyen, ЮKassa: PaymentIntent vs SetupIntent, hosted checkout vs Elements, 3DS / SCA, refund vs dispute, PCI scope (SAQ-A через iframe-токенизацию).урок 23 · SaaS и деньги: платежи, webhooks, подписки, metering
- Feature flags и постепенный выкатKill-switch, gradual rollout по %, per-tenant overrides, A/B-эксперименты. LaunchDarkly, Unleash, GrowthBook, Flagsmith. Каждый flag с дедлайном на удаление.урок 24 · SaaS для enterprise: квоты, фичефлаги, SSO, audit log
- Подписочная модель и billingPlans, trial, proration при апгрейде/даунгрейде, invoicing, dunning (повторные попытки списания), grace period, cancellation flow, MRR/ARR/churn.урок 23 · SaaS и деньги: платежи, webhooks, подписки, metering
- Приём webhooks от провайдеровSignature verification, replay protection (timestamp + nonce), быстрый ACK <2s + воркер для бизнес-логики, idempotency по event.id, reconcile через GET /events.урок 23 · SaaS и деньги: платежи, webhooks, подписки, metering
- Audit log и complianceКто, что, когда, с какого IP, на какой ресурс. Append-only, hash-chain для tamper evidence, отдельный store. Retention под GDPR/SOC2, экспорт по запросу аудитора.урок 24 · SaaS для enterprise: квоты, фичефлаги, SSO, audit log
- Data export, GDPR / CCPADSAR (data subject access request), право на экспорт, право на удаление, retention policies. Async job, e-mail со ссылкой на zip/json, типовой SLA 30 дней.урок 24 · SaaS для enterprise: квоты, фичефлаги, SSO, audit log
- Multi-tenancy: режимы изоляцииPool / bridge / silo: shared-DB shared-schema, shared-DB per-schema, per-tenant DB. Trade-off между ops cost, blast radius, noisy neighbour и compliance.урок 22 · Multi-tenancy: изоляция данных и provisioning тенантаопираются: урок 24
- Provisioning тенанта: signup-flowSignup -> создание организации, billing customer, seed-данные, дефолтные роли, выбор региона. Saga с компенсацией при частичном падении, прогресс по WebSocket.урок 22 · Multi-tenancy: изоляция данных и provisioning тенанта
- Quotas и entitlements per planHard vs soft limits, token bucket per tenant, fair-use потолок поверх плана, overage биллинг. Entitlements как декларация "что можно", а не "что нельзя".урок 24 · SaaS для enterprise: квоты, фичефлаги, SSO, audit log
- Enterprise SSO: SAML, OIDC, SCIMSAML 2.0 для legacy-IdP, OIDC для современных, SCIM 2.0 для автоматического provisioning/deprovisioning. JIT-provisioning, IdP discovery по домену email.урок 24 · SaaS для enterprise: квоты, фичефлаги, SSO, audit log
- Tenant isolation: RLS и query guardsPostgres RLS, tenant_id в каждом запросе, обёртка ORM/репозитория, контекст в AsyncLocalStorage. Cross-tenant обращение трактуется как инцидент.урок 22 · Multi-tenancy: изоляция данных и provisioning тенанта
- Usage-based pricing и meteringСчётчик billable-событий (API calls, GB, seats), агрегация по периоду, idempotency на запись, late-events окно, freeze + invoice. Stripe Meters, OpenMeter, Lago.урок 23 · SaaS и деньги: платежи, webhooks, подписки, metering