CockroachDB обещает единый SQL-интерфейс без ручного шардирования, но эта глава хорошо показывает цену такого обещания: локальность данных, маршрутизацию и задержки никто не отменял.
В реальных системах она помогает думать о размещении диапазонов и владельцев аренды, безопасном повторе транзакций и идемпотентности как о неизбежной части строгой транзакционной модели.
В интервью и архитектурном обсуждении этот материал особенно полезен, когда нужно объяснить, почему команда готова платить дополнительной задержкой и сложностью за строгую консистентность в распределённом SQL.
Практическая польза главы
Локальность диапазонов
Продумывайте размещение диапазонов и владельцев аренды для критичных регионов, чтобы держать задержку в рамках SLO.
Сериализуемость по умолчанию
Планируйте безопасный повтор транзакций и идемпотентность на уровне приложения из-за строгой транзакционной модели.
Часы и сеть
Учитывайте неопределённость часов и влияние межрегионной сети на задержку записи и пропускную способность.
Защита решения
Объясняйте выбор CockroachDB через требования к распределённому SQL и цену строгой консистентности.
Источник
Wikipedia: CockroachDB
История CockroachDB, ключевые релизы и общий технологический контекст распределённой SQL-платформы.
Официальный сайт
CockroachDB Product Overview
Продуктовый обзор отказоустойчивости, горизонтального масштабирования, локальности данных и целевого профиля нагрузки.
CockroachDB - распределённая SQL-СУБД с фокусом на строгую консистентность, отказоустойчивость и горизонтальное масштабирование. В системном дизайне CockroachDB обычно рассматривают для критичных сервисов транзакционной обработки OLTP, где важны мультирегиональное развёртывание, автоматическое переключение на резерв и SQL-модель без ручного шардирования.
В этой главе под понимаем SQL-интерфейс поверх распределённого хранения, репликации и транзакционной координации. CockroachDB использует , и Raft, чтобы масштабировать таблицы без ручного деления данных в приложении.
В практическом дизайне важны , , , , и при конфликтах.
История и контекст
Формирование идеи проекта
Спенсер Кимбалл публикует первый проект распределённой SQL-системы, позже ставшей CockroachDB.
Основание компании
Создаётся Cockroach Labs для развития продукта как распределённой SQL платформы для отказоустойчивых приложений.
Первый релиз для промышленной эксплуатации
Линейка 1.0 фиксирует зрелый контур: SQL-интерфейс, транзакционность и кластерный режим для рабочих нагрузок.
Переход на лицензию с доступным исходным кодом
Проект меняет лицензионную модель с Apache 2.0 на Business Source License (BuSL).
Стабильная ветка 25.1
Релизная линия 25.1 усиливает фокус на корпоративной эксплуатации: производительность, масштабирование и зрелость кластера.
Ключевые архитектурные элементы
SQL-шлюз и совместимость с PostgreSQL
Любой узел может принимать SQL-запросы через сетевой протокол PostgreSQL и выступать SQL-шлюзом для распределённого выполнения.
Диапазоны ключей, владелец аренды и Raft
Пространство ключей делится на диапазоны; владелец аренды координирует доступ, а репликация и консенсус строятся на Raft.
Транзакции модели ACID и Parallel Commits
Транзакционный слой использует намерения записи и протокол атомарной фиксации, что даёт сильную консистентность в распределённой среде.
Локальность данных и автоматический ребаланс
Кластер поддерживает размещение по регионам, автоматический ребаланс данных и масштабирование без ручного шардирования.
Модель данных и транзакционный контур
Интерактивный блок показывает, как CockroachDB соединяет SQL-модель и распределённый KV-слой: диапазоны ключей, реплики, намерения записи, изоляцию и настройки локальности.
Модель данных CockroachDB: диапазоны, реплики, транзакции
CockroachDB строит SQL поверх распределённого KV-движка: данные делятся на диапазоны ключей и реплицируются через Raft.
Чем CockroachDB отличается от классической SQL-СУБД на одном узле
- Таблицы и индексы отображаются в распределённое пространство ключей KV, которое автоматически делится на диапазоны.
- У каждого диапазона есть реплики; владелец аренды координирует чтения и записи.
- Транзакции используют намерения записи, таблицу блокировок и протокол атомарной фиксации Parallel Commits.
- Настройки локальности помогают размещать данные по регионам и снижать задержку для чувствительных сценариев.
SQL -> пространство ключей KV
Строки таблиц и записи вторичных индексов хранятся как пары ключ-значение в едином глобальном пространстве ключей.
Ключевые элементы
Типичные сценарии
- Горизонтальный рост
- Изоляция горячих ключей
- Разбиение больших таблиц
Пример
CREATE TABLE orders (
id UUID PRIMARY KEY,
tenant_id UUID,
status STRING,
created_at TIMESTAMPTZ
);Архитектура CockroachDB по слоям
Ниже показан контур CockroachDB по слоям: SQL-шлюз, транзакционный слой, распределение диапазонов, репликация через Raft и механики хранения с учётом локальности.
Системный контур
Профиль нагрузки
Эксплуатационная цена
Пути чтения и записи через компоненты
Диаграмма объединяет пути записи и чтения: как запрос проходит через SQL-шлюз, маршрутизацию по диапазонам, владельца аренды, консенсус Raft и фиксацию транзакции.
Путь чтения и записи
Интерактивный разбор прохождения CockroachDB-запросов через SQL-шлюз, владельца аренды, Raft и транзакционный слой.
Путь записи
- Таблицы и индексы разбиваются на диапазоны; ключи транзакции определяют, потребуется ли один диапазон или несколько.
- Записи сначала оформляются как намерения записи: предварительные значения с семантикой блокировки.
- Фиксация требует большинства Raft-реплик для каждого затронутого диапазона и координации в транзакционном слое.
- При конкуренции за одни и те же данные возникают ошибки для повтора; приложение должно корректно повторять транзакции.
Когда выбирать CockroachDB
Хорошо подходит
- Критичные системы транзакционной обработки OLTP, где нужны строгая консистентность, модель ACID и отказоустойчивость между зонами или регионами.
- Продукты с ростом нагрузки, где важно масштабировать чтение и запись добавлением узлов без ручного шардирования.
- Глобальные SaaS- и финтех-сценарии с требованиями к локальности данных, устойчивости между регионами и непрерывной доступности.
- Команды, готовые инвестировать в проектирование схемы, индексов, ключей и эксплуатацию распределённого SQL-кластера.
Стоит избегать
- Простые приложения на одном узле, где дешевле и проще классическая локальная SQL-СУБД.
- Нагрузки с тяжёлыми аналитическими сканами, где нужен специализированный движок аналитической обработки OLAP.
- Сценарии, где приложение не готово повторять транзакции при конкуренции за одни и те же данные.
- Команды без ресурсов на эксплуатацию многоузловой инфраструктуры и наблюдаемость распределённого слоя.
Практика: DDL и DML
Ниже примеры SQL-операций для CockroachDB: DDL для схемы, индексов и мультирегиональных настроек, DML для транзакций, UPSERT и конкурентного доступа к данным.
Примеры DDL и DML в CockroachDB
DDL управляет схемой и индексами, DML — транзакциями, чтением и записью данных.
CockroachDB поддерживает онлайн-изменения схемы и PostgreSQL-совместимый SQL DDL, но проектирование ключей и индексов критично для распределённого выполнения.
Создание таблицы с первичным ключом
CREATE TABLEПервичный ключ определяет распределение записей по пространству ключей и диапазонам.
CREATE TABLE accounts (
id UUID PRIMARY KEY,
tenant_id UUID NOT NULL,
balance DECIMAL(18,2) NOT NULL,
status STRING NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);Покрывающий вторичный индекс
CREATE INDEX ... STORINGСнижает число лишних поисков для горячих точек чтения.
CREATE INDEX idx_accounts_tenant_status
ON accounts (tenant_id, status)
STORING (balance, created_at);Региональная настройка БД
ALTER DATABASE ... REGIONМультирегиональные возможности SQL помогают управлять локальностью и устойчивостью между регионами.
ALTER DATABASE appdb PRIMARY REGION "us-east1";
ALTER DATABASE appdb ADD REGION "eu-west1";
ALTER DATABASE appdb ADD REGION "ap-southeast1";Связанные главы
- Фреймворк выбора СУБД - Как решить, когда распределённый SQL-подход CockroachDB оправдан по консистентности, масштабированию и стоимости владения.
- PostgreSQL: история и архитектура - Сравнение классического контура транзакционной обработки OLTP в PostgreSQL с распределённой SQL-моделью CockroachDB.
- YDB: распределённая SQL-СУБД и архитектура - Сопоставление двух распределённых SQL-платформ по мультирегиональным возможностям, транзакционным гарантиям и эксплуатационному профилю.
- Распределённые транзакции: 2PC и 3PC - Контекст координации распределённых транзакций и компромиссов задержки, доступности и пути записи.
- Мультирегиональные и глобальные системы - Практика геораспределённого дизайна: локальность данных, отказоустойчивость между регионами и компромиссы задержки.
- Jepsen и модели консистентности - Как тестировать и интерпретировать реальные гарантии консистентности распределённой БД под отказами сети и узлов.
