System Design Space
Граф знанийНастройки

Обновлено: 3 мая 2026 г. в 22:07

CockroachDB: распределённая SQL-СУБД и архитектура

средний

Распределённая SQL-СУБД CockroachDB: SQL поверх распределённого KV-слоя, диапазоны ключей, владельцы аренды, Raft-репликация, мультирегиональная локальность и автоматический ребаланс.

CockroachDB обещает единый SQL-интерфейс без ручного шардирования, но эта глава хорошо показывает цену такого обещания: локальность данных, маршрутизацию и задержки никто не отменял.

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

В интервью и архитектурном обсуждении этот материал особенно полезен, когда нужно объяснить, почему команда готова платить дополнительной задержкой и сложностью за строгую консистентность в распределённом SQL.

Практическая польза главы

Локальность диапазонов

Продумывайте размещение диапазонов и владельцев аренды для критичных регионов, чтобы держать задержку в рамках SLO.

Сериализуемость по умолчанию

Планируйте безопасный повтор транзакций и идемпотентность на уровне приложения из-за строгой транзакционной модели.

Часы и сеть

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

Защита решения

Объясняйте выбор CockroachDB через требования к распределённому SQL и цену строгой консистентности.

Источник

Wikipedia: CockroachDB

История CockroachDB, ключевые релизы и общий технологический контекст распределённой SQL-платформы.

Открыть статью

Официальный сайт

CockroachDB Product Overview

Продуктовый обзор отказоустойчивости, горизонтального масштабирования, локальности данных и целевого профиля нагрузки.

Открыть страницу

CockroachDB - распределённая SQL-СУБД с фокусом на строгую консистентность, отказоустойчивость и горизонтальное масштабирование. В системном дизайне CockroachDB обычно рассматривают для критичных сервисов транзакционной обработки OLTP, где важны мультирегиональное развёртывание, автоматическое переключение на резерв и SQL-модель без ручного шардирования.

В этой главе под понимаем SQL-интерфейс поверх распределённого хранения, репликации и транзакционной координации. CockroachDB использует , и Raft, чтобы масштабировать таблицы без ручного деления данных в приложении.

В практическом дизайне важны , , , , и при конфликтах.

История и контекст

2014проектный набросок

Формирование идеи проекта

Спенсер Кимбалл публикует первый проект распределённой SQL-системы, позже ставшей CockroachDB.

2015Cockroach Labs

Основание компании

Создаётся Cockroach Labs для развития продукта как распределённой SQL платформы для отказоустойчивых приложений.

2017v1.0.0

Первый релиз для промышленной эксплуатации

Линейка 1.0 фиксирует зрелый контур: SQL-интерфейс, транзакционность и кластерный режим для рабочих нагрузок.

2019Business Source License

Переход на лицензию с доступным исходным кодом

Проект меняет лицензионную модель с Apache 2.0 на Business Source License (BuSL).

2025v25.1.4

Стабильная ветка 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-доступ
сетевой протокол PostgreSQLдрайверы и ORMSQL shellоблако / свой кластер
переход слоя
SQL и транзакционный слой
стоимостной оптимизаторкоординатор транзакцийSerializable / Read CommittedParallel Commits
переход слоя
Диапазоны и реплики
пространство ключей KVразбиение / слияние диапазоноввладелец арендыавтоматический ребаланс
переход слоя
Консенсус и репликация
Raft на диапазонфиксация большинством3 реплики по умолчаниюкворум чтения/записи
переход слоя
Хранение и локальность
значения MVCCнамерения записиразмещение по зонам/регионамустойчивость между зонами
переход слоя
Эксплуатация
изменения схемы онлайндобавление / удаление узловрезервные копиинаблюдаемость

Системный контур

распределённый SQLфокус на строгой консистентностиотказоустойчивость для облака

Профиль нагрузки

транзакционная обработка OLTPгеораспределённые сервисыограниченная операционная аналитика

Эксплуатационная цена

дороже междиапазонные транзакциикритичны схема и ключисложнее одиночной SQL-СУБД

Пути чтения и записи через компоненты

Диаграмма объединяет пути записи и чтения: как запрос проходит через SQL-шлюз, маршрутизацию по диапазонам, владельца аренды, консенсус Raft и фиксацию транзакции.

Путь чтения и записи

Интерактивный разбор прохождения CockroachDB-запросов через SQL-шлюз, владельца аренды, Raft и транзакционный слой.

1
Транзакция клиента
INSERT UPDATE UPSERT
2
Маршрутизация
по диапазонам
3
Намерения записи
предварительные значения
4
Репликация Raft
кворум большинства
5
Фиксация и очистка
запись транзакции
Путь записи: транзакция создаёт намерения записи у владельца аренды, реплицируется через кворум Raft и фиксируется через запись транзакции / Parallel Commits.

Путь записи

  1. Таблицы и индексы разбиваются на диапазоны; ключи транзакции определяют, потребуется ли один диапазон или несколько.
  2. Записи сначала оформляются как намерения записи: предварительные значения с семантикой блокировки.
  3. Фиксация требует большинства Raft-реплик для каждого затронутого диапазона и координации в транзакционном слое.
  4. При конкуренции за одни и те же данные возникают ошибки для повтора; приложение должно корректно повторять транзакции.

Когда выбирать 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";

Связанные главы

Чтобы отмечать прохождение, включи трекинг в Настройки