Открыть сервис

CockroachDB

CockroachDB — это распределённая реляционная система управления базами данных (СУБД), разработанная одноимённой компанией Cockroach Labs. Система построена на архитектуре, обеспечивающей высокую отказоустойчивость, горизонтальную масштабируемость и строгую согласованность данных (ACID) в распределённой среде. CockroachDB позиционируется как облачная база данных, способная выдерживать отказы отдельных узлов, сетевые задержки и даже потерю целых центров обработки данных без потери данных и остановки обслуживания. Название происходит от таракана (cockroach), известного своей живучестью, что отражает ключевую особенность системы — способность «выживать» в условиях катастрофических сбоев.

История

Разработка CockroachDB началась в 2012 году в компании Cockroach Labs, основанной бывшими инженерами Google — Спенсером Кимбаллом (Spencer Kimball), Питером Маттисом (Peter Mattis) и Беном Дарнеллом (Ben Darnell). Идея возникла из опыта работы с внутренними распределёнными системами Google, такими как Spanner и Bigtable, а также с открытой СУБД LevelDB. Первоначально проект был полностью открытым исходным кодом под лицензией Apache 2.0.

В 2014 году Cockroach Labs привлекла первые инвестиции в размере 2 миллионов долларов от венчурных фондов. В 2015 году вышла первая публичная альфа-версия, а в 2017 году — стабильный релиз CockroachDB 1.0. В 2019 году компания выпустила коммерческую версию CockroachDB Enterprise, которая включала дополнительные функции, такие как геораспределённые транзакции и расширенное управление. В 2020 году Cockroach Labs получила статус «единорога» (оценка более 1 миллиарда долларов) после очередного раунда финансирования.

В 2021 году CockroachDB стала доступна как полностью управляемый облачный сервис (CockroachDB Serverless), что позволило разработчикам использовать её без необходимости самостоятельного администрирования инфраструктуры. В 2023 году компания объявила о переходе на модель с открытым ядром (BSL — Business Source License), что вызвало дискуссии в сообществе, но позволило защитить коммерческие интересы.

Архитектура

CockroachDB основана на архитектуре, заимствованной из Google Spanner, но с рядом упрощений и адаптаций для открытого использования. Ключевые компоненты архитектуры:

Кластер и узлы

Система состоит из множества узлов (nodes), каждый из которых является полноценным сервером, хранящим часть данных и обрабатывающим запросы. Узлы объединяются в кластер. Кластер может быть развёрнут на одном физическом сервере, на нескольких серверах в одном центре обработки данных или географически распределён по разным регионам мира.

Ранжирование (Ranges)

Данные в CockroachDB автоматически разбиваются на фрагменты, называемые ранжами (ranges). Каждый ранг хранит определённый диапазон ключей (например, строки таблицы с определённым диапазоном первичных ключей). Размер ранга по умолчанию составляет около 64 МБ. Когда ранг превышает этот размер, он автоматически разделяется на два. Ранги реплицируются на несколько узлов (по умолчанию — 3) для обеспечения отказоустойчивости.

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

Для обеспечения согласованности и отказоустойчивости CockroachDB использует протокол Raftалгоритм распределённого консенсуса. Каждый ранг имеет лидера (leader) и несколько последователей (followers). Все операции записи сначала выполняются на лидере, а затем реплицируются на последователей. Только после того, как большинство узлов (кворум) подтвердили запись, она считается завершённой. Это обеспечивает строгую согласованность (linearizability) — все узлы видят данные в одном и том же порядке.

Транзакции и изоляция

CockroachDB поддерживает полные ACID-транзакции. Для обеспечения изоляции используется механизм MVCC (Multiversion Concurrency Control) — каждая транзакция видит снимок данных на момент её начала. Для разрешения конфликтов между параллельными транзакциями применяется оптимистическая блокировка. В случае конфликта одна из транзакций откатывается и повторяется. Система поддерживает уровень изоляции Serializable — самый строгий, предотвращающий аномалии чтения, записи и фантомы.

Геораспределение

CockroachDB позволяет настраивать географическое расположение реплик. Разработчик может указать, в каких регионах или зонах доступности должны храниться копии данных. Это позволяет минимизировать задержки для пользователей в разных частях мира и обеспечивать отказоустойчивость при потере целого региона. Для оптимизации запросов используется глобальный планировщик (global planner), который учитывает задержки между узлами.

Ключевые характеристики

Отказоустойчивость

CockroachDB спроектирована так, чтобы выдерживать отказы любого количества узлов, не превышающего половину кластера. Например, в кластере из 5 узлов система продолжит работу при отказе 2 узлов. При отказе лидера ранга автоматически избирается новый лидер из числа последователей. Восстановление данных после сбоя происходит автоматически за счёт репликации.

Горизонтальная масштабируемость

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

Согласованность

В отличие от многих NoSQL-систем (например, Apache Cassandra или MongoDB), которые жертвуют согласованностью ради доступности, CockroachDB гарантирует строгую согласованность (strong consistency) в любой момент времени. Это делает её пригодной для приложений, где точность данных критична (например, финансовые системы, электронная коммерция).

Совместимость с PostgreSQL

CockroachDB поддерживает протокол проводного уровня PostgreSQL (wire protocol) и значительную часть синтаксиса SQL. Это означает, что большинство клиентских библиотек и инструментов для PostgreSQL (например, psql, pgAdmin, драйверы для Python, Java, Go) могут работать с CockroachDB без изменений. Однако не все функции PostgreSQL поддерживаются (например, триггеры, хранимые процедуры на PL/pgSQL, некоторые типы индексов).

Применение

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

  • Финансовые системы: банковские транзакции, платежные шлюзы, биржевые системы, где потеря данных или задержка недопустимы.
  • Электронная коммерция: каталоги товаров, корзины покупок, управление заказами, требующие согласованности в реальном времени.
  • SaaS-платформы: мультитенантные приложения, где данные клиентов должны быть изолированы и доступны из разных регионов.
  • Игровая индустрия: системы управления игровыми сессиями, таблицы лидеров, внутриигровые транзакции.
  • Интернет вещей (IoT): сбор и обработка данных с миллионов устройств, требующих масштабирования и отказоустойчивости.

Примеры использования

Среди известных компаний, использующих CockroachDB, — Netflix (для управления данными о стриминге), Comcast (для телекоммуникационных систем), Etsy (для платформы электронной коммерции), Baidu (для поисковых систем и облачных сервисов). В России и странах СНГ CockroachDB применяется в некоторых финтех-компаниях и стартапах, хотя её распространение ограничено из-за конкуренции с другими решениями (например, YDB, PostgreSQL с расширениями).

Критика и ограничения

Несмотря на преимущества, CockroachDB имеет ряд недостатков:

  • Сложность настройки: для достижения оптимальной производительности требуется глубокое понимание архитектуры и параметров конфигурации.
  • Производительность на одном узле: в сравнении с традиционными реляционными СУБД (например, PostgreSQL) на одном сервере CockroachDB может показывать меньшую скорость выполнения запросов из-за накладных расходов на распределённость и консенсус.
  • Ограниченная поддержка SQL: не все функции PostgreSQL реализованы, что может потребовать адаптации существующих приложений.
  • Стоимость: коммерческая версия и облачный сервис могут быть дорогими для небольших проектов.
  • Лицензионные изменения: переход на BSL в 2023 году вызвал недовольство части сообщества, так как ограничил использование в коммерческих продуктах без покупки лицензии.

Интересные факты

  • Название CockroachDB было выбрано из-за устойчивости тараканов к радиации и другим неблагоприятным условиям, что символизирует способность базы данных «выживать» при сбоях.
  • В 2020 году Cockroach Labs провела публичный тест, в ходе которого была отключена половина узлов кластера в разных регионах, и система продолжила работать без потери данных.
  • CockroachDB является одной из немногих распределённых СУБД, которая поддерживает строгую согласованность (linearizability) в глобальном масштабе.

Источники

  • Официальная документация CockroachDB (Cockroach Labs)
  • Статья «CockroachDB: The Resilient SQL Database» (ACM Queue, 2015)
  • Доклад «CockroachDB: A Distributed SQL Database» (Spencer Kimball, 2016)
  • Материалы конференций HighLoad++ и PostgreSQL Conference (2017–2023)
  • Аналитические обзоры Gartner и Forrester по распределённым базам данных (2020–2023)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →