System Design Space

    Глава 104

    Обновлено: 9 февраля 2026 г. в 20:31

    Введение в хранение данных

    Прогресс части0/12

    Конспект лекции Essential Architecture #Data: где хранить состояние, эволюция хранилищ и как данные формируют API.

    Источник

    Essential Architecture - Data

    Расшифровка лекции (4 Oct 2021) о хранении данных и влиянии на API.

    Перейти на сайт

    Данные напрямую формируют удобство API: от латентности и гарантий консистентности до ретраев, идемпотентности и границ ответственности между командами. Начнем с принципа 12-factor приложения — принципа номер 6. Его суть в том, чтобы делать stateless приложения и не хранить состояние внутри них. Если получается так спроектировать приложение, вопросы отказоустойчивости и масштабирования решаются гораздо проще, чем в случае stateful приложений. Но тогда возникает вопрос: где хранить состояние?

    Почему данные определяют API

    Связанная тема

    The Twelve-Factor App

    Stateless как фундамент масштабирования и устойчивости.

    Читать обзор

    Архитектурные решения по данным превращаются в свойства интерфейсов.

    • Скорость и латентность ответов
    • Согласованность (strong vs eventual)
    • Модель ошибок и повторов
    • Ограничения на фильтрацию/поиск/пагинацию
    • Идемпотентность, ретраи и дедупликация
    • Границы ответственности между командами

    Stateless как фундамент

    Принцип 12-factor: приложения не хранят состояние в процессе. Масштабирование становится проще, но нужно осознанно выбрать место хранения данных.

    Связанная тема: The Twelve-Factor App.

    Эволюция хранения состояния

    Файловые системы

    Форматы хранения и логика чтения легко протекают в бизнес-код.

    Реляционные БД (OLTP)

    SQL + транзакции дают сильные гарантии и выразительный API.

    OLAP и аналитика

    Кубы, модели «звезда/снежинка» и агрегаты для BI.

    Big Data / Hadoop

    MapReduce и экосистема для массовой обработки данных.

    Object Storage

    Объекты без иерархий, S3 API как де-факто стандарт.

    NoSQL

    Горизонтальное масштабирование ценой компромиссов.

    Реляционные БД: ключевые понятия

    Связанная тема

    Database Internals

    B-Trees, LSM и транзакции внутри СУБД.

    Читать обзор

    Нормализация

    Формы данных влияют на схему и поведение запросов.

    SQL

    Декларативный язык отделяет «что» от «как».

    Индексы

    Ускоряют чтение, но замедляют запись и обновления.

    Транзакции и ACID

    Атомарность, изоляция и долговечность формируют контракты.

    Репликация

    Failover и масштабирование чтений с trade-offs по консистентности.

    Шардирование

    Роутинг по shard key и распределение нагрузки.

    Интеграция между системами

    Связанная тема

    Enterprise Integration Patterns

    Файлы, RPC и messaging как паттерны интеграции.

    Читать обзор

    File transfer

    Понятный способ обмена, но со слабой инкапсуляцией.

    Shared database

    Высокая связанность и замедление развития из-за общей схемы.

    RPC

    Сильные контракты, но требует дисциплины версионирования.

    Messaging

    Асинхронные сценарии и гибкость интеграций.

    Shared database создаёт high coupling и ломает контракты между командами. Современные системы стремятся к shared-nothing.

    Data Lake vs Data Mesh

    Связанная тема

    Big Data

    Эволюция аналитики и архитектурные слои.

    Читать обзор

    Data Lake

    Централизованный сбор данных из OLTP с ETL-процессами. Масштабирование усложняет связанность и качество данных.

    Data Mesh

    • Доменно-ориентированная децентрализация
    • Данные как продукт
    • Self-service платформа
    • Federated computational governance

    DDD и границы доменов

    Связанная тема

    Learning Domain-Driven Design

    Bounded contexts и доменные контракты.

    Читать обзор

    Доменные границы и контракты между bounded contexts делают API устойчивыми. Подходы DDD помогают отделить модели данных разных команд.

    Связанная тема: Learning Domain-Driven Design.

    Как данные превращаются в удобный API

    Мостик Data -> API

    • Предсказуемые гарантии (ACID vs BASE)
    • Ясные источники истины
    • Чёткая модель ошибок и ретраев
    • Границы доменов и контрактов
    • Идемпотентность и дедупликация
    • Изоляция от shared database

    NoSQL через призму CAP/BASE

    Понимание CAP и BASE помогает объяснять клиентам eventual consistency и строить корректные ретраи.

    Связанная тема: CAP теорема.

    Мини-чеклист удобного API

    • Понятно, какие гарантии консистентности даёт система.
    • Клиент понимает, где возможна eventual consistency.
    • Идемпотентность для операций, которые могут быть повторены.
    • Ошибки, ретраи и таймауты описаны детерминированно.
    • Нет shared database как скрытого канала интеграции.
    • Доменные границы отражены в контракте API.

    Материалы из лекции

    Рекомендуемые источники и книги для углубления:

    Designing Data-Intensive ApplicationsEnterprise Integration PatternsNoSQL DistilledDatabase InternalsBig DataData Mesh Principles and Logical Architecture