NewSQL с открытым исходным кодом — применение и практика CockroachDB в Baidu

база данных Байду SQL Открытый исходный код
NewSQL с открытым исходным кодом — применение и практика CockroachDB в Baidu



Источник контента:18 ноября 2017 г. архитектор базы данных Baidu Ян Лонг выступил с речью о «Baidu NewSQL-CockroachDB» на «7-м карнавале технологий данных». IT Big Guy Said (идентификатор WeChat: itdakashuo) в качестве эксклюзивного видео-партнера был проверен и авторизован организатором, спикером и публичной учетной записью WeChat — CockroachDB (идентификатор WeChat: CockroachDB).

Количество слов для чтения:3621 | 10 минут чтения

Видео с гостевым выступлением и обзор PPT:suo.im/5bnORh

Резюме

Этот обмен в основном включает ключевой технический анализ базы данных NewSQL с открытым исходным кодом Cockroach DB, а также применение и практику Cockroach DB в Baidu.

Происхождение NewSQL

Для одномашинных баз данных, таких как MySQL, Oracle и PostgreSQL, возникнут проблемы с вычислительной мощностью и емкостью хранилища по мере роста объема данных. Поэтому впоследствии были внедрены решения на основе промежуточного ПО или NoSQL, но они не были совершенны: например, промежуточное ПО делало определенные уступки в части распределенных транзакций, а NoSQL — в части SQL-интерфейса и поддержки транзакций.

В 2011 году аналитик Мэтью Аслетт впервые предложил концепцию NewSQL, рассчитывая объединить преимущества NoSQL и традиционных баз данных и устранить недостатки существующих баз данных в следующем поколении. И Google первым разработал концепцию, известную как Spanner. Затем этому примеру последовало сообщество открытого исходного кода.

Введение в базу данных тараканов

БД Cockroach была размещена на GitHub в 2014 году под лицензией Apache и реализована на Golang. Количество звезд — 12000+, а количество участников — 150+. Текущая версия 2.0.1. Материнская компания — Cockroach Labs. Все три основателя компании — из Google, имеют опыт работы в проектах Big Table, GFS, Colossus и Gmail. Они получили в общей сложности 53,25 миллиона долларов финансирования от Benchmark, Google Venture и т. д. Штаб-квартира находится в Нью-Йорке, в настоящее время в ней работает более 50 сотрудников.

Архитектура БД тараканов

Cockroach DB использует многоуровневую архитектуру, аналогичную Spanner, предоставляет механизм SQL для распределенного KV и вводит три собственные уникальные концепции: узел, хранилище и диапазон в распределенном KV.

Node & Store

Узел — это экземпляр процесса базы данных тараканов. Один физический сервер может запускать один узел. Один физический носитель данных (например, жесткий диск) обычно настраивается с одним хранилищем, и в одном узле имеется несколько хранилищ.

Range

Range — это наименьшая единица управления хранилищем Cockroach DB, а Range — это сегмент данных диапазона ключ-значение. В магазине есть несколько диапазонов, каждый фрагмент диапазона по умолчанию составляет 64M, и по умолчанию есть 3 копии, которые распределены по разным узлам.

Особенности БД тараканов

Стандартный SQL-интерфейс

БД Cockroach использует протокол PostgreSQL, поддерживает стандартный интерфейс SQL и совместима с экосистемой реляционных баз данных SQL. Он поддерживает функции, которых нет в NoSQL, такие как транзакции, вторичные индексы и объединения, а также предоставляет структуру распределенных запросов, подобную MPP. Он также поддерживает онлайн-изменения схемы для облегчения изменений в бизнесе.

SQL & KV

Так как нижний слой БД Таракан представляет собой распределенный KV, все SQL-операции должны быть преобразованы в KV-операции. Таким образом, он абстрагирует пять KV Get, Put, ConditionalPut, Scan и Del как примитивы на нижнем уровне.

Сопоставление модели SQL/KV

После решения проблемы работы KV необходимо решить еще одну проблему, а именно отображение схемы в модель KV. Каждая таблица базы данных тараканов должна иметь первичный ключ, каждый столбец (не каждая строка) представляет собой единицу хранения ключей/значений, а ключ состоит из ,

, , , несколько частей вместе.

уникальный индекс

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

, и в ключ, При выполнении сканирования индекса выполняется сопоставление префикса, а затем может быть получено соответствующее значение. получено. Здесь, поскольку глобально уникален, также гарантируется уникальность индекса.

неуникальный индекс

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

Column Family

Для обновления данных в системе хранения строк требуется только одна операция ввода-вывода, но поскольку БД Cockroach хранится в столбцах, данные необходимо обновлять несколько раз. С этой целью Cockroach DB предлагает концепцию семейства столбцов, которое инкапсулирует столбцы, к которым необходимо часто обращаться, и может даже превратиться в хранилище строк через семейство столбцов, что может эффективно сократить операции ввода-вывода.

Сильная масштабируемость и высокий параллелизм

Чтобы добиться возможности линейного расширения, Cockroach DB использует децентрализованную архитектуру, и любой отказ узла не влияет на кластер. Он реализует управление состоянием узлов через протокол Gossip, и теоретически один кластер поддерживает 10 000 узлов. Метод метаданных двухуровневой маршрутизации позволяет одному кластеру поддерживать до 4 ЭБ хранилища пользовательских данных. Подмодель всей архитектуры использует распределенный дизайн без единого узкого места и поддерживает одновременную запись нескольких узлов.

Эластичное масштабирование

Перед лицом проблемы масштабируемости одномашинной базы данных обычно используется метод распределения хеш-данных. Но если не используется непротиворечивый хэш, нормальное распределение хэша требует переноса данных и выключения сервера. База данных Cockroach выбирает дистрибутив Range, который может напрямую расширяться в сети, не останавливая сервер при увеличении емкости.В то же время, поскольку каждые данные разделены на небольшие сегменты по 64 М, они могут не зависеть от сервисов при добавлении новых узлов.Автоматическая балансировка нагрузки и сильная согласованность нескольких копий.

Архитектура репликации master-slave, используемая для синхронизации данных MySQL, является слабо согласованной, в то время как синхронизация данных реплики Cockroach DB основана на протоколе Raft, который имеет сильную согласованность.Когда узел зависает, повторный журнал не был полностью реплицирован в подчиненную базу данных. y проблемы, приводящие к потере данных.

Сервис высокой доступности

Из-за децентрализованной архитектуры Cockroach DB отсутствует SPDF, поэтому в архитектуре нет централизованных модулей, таких как Hbase HMaster и Percolator oracle, а сбой одного узла не влияет на доступность кластерной группы.

Кроме того, поскольку он основан на протоколе Raft, сервис доступен до тех пор, пока сохраняется более половины реплик; когда узел неисправен и количество реплик данных меньше заданного порога, реплики автоматически удаляются. заполняется для обеспечения надежности.

Распределенная транзакция

2PC

БД Cockroach использует модифицированную двухэтапную транзакцию фиксации, которая вводит глобальную таблицу транзакций для записи состояния транзакции, а фиксация/откат транзакции изменяет только бит флага записи. Данные, записанные в транзакции, инкапсулируются в специальную структуру (INTENT), и информация индекса, подразумеваемая в этом INTENT, может обратить индекс состояния транзакции. Преимущество этой модели обработки транзакций заключается в том, что накладные расходы на фиксацию и откат транзакции относительно невелики.

1PC

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

MVCC

БД Cockroach использует режим управления параллелизмом MVCC, который использует время HLC в качестве номера версии и хранит данные в обратном порядке, чтобы обеспечить доступ к последней версии данных в первую очередь. Поддерживается запрос с перемещением во времени, а данные с несколькими версиями очищаются асинхронным сборщиком мусора.

Алгоритм HLC

Вычисление HLC полностью опирается на идеи физических часов и логических часов. HLC Timestamp ID состоит из двух частей: времени и логического времени, физическое время синхронизируется через NTP. При отправке сообщения, создании локального события и получении сообщения I и J сбрасываются до максимального из нескольких эталонных значений. Это устраняет эффекты одноточечной инверсии часов или ошибок часов между различными узлами.

Сравнение с алгоритмом True Time Clock

Алгоритм HCL прост в реализации, недорог и имеет определенную задержку. Он основан на службе часов NTP, не требует дополнительного оборудования, алгоритм прост, а стоимость внедрения невысока. Однако существует отклонение часов, и диапазон отклонения будет относительно большим в случае глобальной сети.

Алгоритм часов True Time имеет определенную стоимость и низкую задержку. Он основан на специальном оборудовании, таком как GPS + атомные часы, и стоимость реализации высока. По сути, аналогичный алгоритму физических часов, интервал ошибки используется для замены момента времени. Точность системы часов True Time намного выше, чем у NTP, а задержку можно контролировать в пределах 14 мс.

Типичные сценарии применения

Cockroach DB больше подходит для сценариев OLTP и поддерживает облегченные сценарии OLAP. Эти сценарии имеют следующие характеристики:

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

- Большой объем хранения данных

- Расширение по запросу и онлайн в любое время

- Аварийное восстановление в центрах обработки данных, строгая согласованность данных с несколькими копиями

- Требования к задержке не жесткие

Приложения

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

После введения Cockroach DB мы можем предоставить унифицированное представление базы данных для бизнеса, которое проще в использовании, эксплуатации и обслуживании.

Перед внедрением Cockroach DB мы также занимались совместимостью синтаксического протокола MySQL, синхронизацией данных, а также автоматической работой и обслуживанием.

Официальный сайт тараканов: http://www.cockreachchina.cn/