Источник контента:18 ноября 2017 г. архитектор базы данных Baidu Ян Лонг выступил с речью о «Baidu NewSQL-CockroachDB» на «7-м карнавале технологий данных». IT Big Guy Said (идентификатор WeChat: itdakashuo) в качестве эксклюзивного видео-партнера был проверен и авторизован организатором, спикером и публичной учетной записью WeChat — CockroachDB (идентификатор WeChat: CockroachDB).
Количество слов для чтения:3621 | 10 минут чтения
Резюме
Этот обмен в основном включает ключевой технический анализ базы данных 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, которая также компилирует Для обновления данных в системе хранения строк требуется только одна операция ввода-вывода, но поскольку БД 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, сервис доступен до тех пор, пока сохраняется более половины реплик; когда узел неисправен и количество реплик данных меньше заданного порога, реплики автоматически удаляются. заполняется для обеспечения надежности. БД Cockroach использует модифицированную двухэтапную транзакцию фиксации, которая вводит глобальную таблицу транзакций для записи состояния транзакции, а фиксация/откат транзакции изменяет только бит флага записи. Данные, записанные в транзакции, инкапсулируются в специальную структуру (INTENT), и информация индекса, подразумеваемая в этом INTENT, может обратить индекс состояния транзакции. Преимущество этой модели обработки транзакций заключается в том, что накладные расходы на фиксацию и откат транзакции относительно невелики. Когда все транзакции записываются в диапазон, можно использовать Raft для обеспечения атомарности и одновременной записи данных. В то же время он может оптимизировать производительность транзакций записи не между диапазонами и сократить обмен данными RPC. БД Cockroach использует режим управления параллелизмом MVCC, который использует время HLC в качестве номера версии и хранит данные в обратном порядке, чтобы обеспечить доступ к последней версии данных в первую очередь. Поддерживается запрос с перемещением во времени, а данные с несколькими версиями очищаются асинхронным сборщиком мусора. Вычисление HLC полностью опирается на идеи физических часов и логических часов. HLC Timestamp ID состоит из двух частей: времени и логического времени, физическое время синхронизируется через NTP. При отправке сообщения, создании локального события и получении сообщения I и J сбрасываются до максимального из нескольких эталонных значений. Это устраняет эффекты одноточечной инверсии часов или ошибок часов между различными узлами. Алгоритм HCL прост в реализации, недорог и имеет определенную задержку. Он основан на службе часов NTP, не требует дополнительного оборудования, алгоритм прост, а стоимость внедрения невысока. Однако существует отклонение часов, и диапазон отклонения будет относительно большим в случае глобальной сети. Алгоритм часов True Time имеет определенную стоимость и низкую задержку. Он основан на специальном оборудовании, таком как GPS + атомные часы, и стоимость реализации высока. По сути, аналогичный алгоритму физических часов, интервал ошибки используется для замены момента времени. Точность системы часов True Time намного выше, чем у NTP, а задержку можно контролировать в пределах 14 мс. Cockroach DB больше подходит для сценариев OLTP и поддерживает облегченные сценарии OLAP. Эти сценарии имеют следующие характеристики: - Высокая скорость одновременного чтения и записи, поддержка многоточечной записи, автоматическая балансировка нагрузки - Большой объем хранения данных - Расширение по запросу и онлайн в любое время - Аварийное восстановление в центрах обработки данных, строгая согласованность данных с несколькими копиями - Требования к задержке не жесткие В прошлом Baidu использовала промежуточное программное обеспечение для фрагментации данных, но когда нужно было переносить пиковый трафик, его приходилось расширять заранее. Более того, когда доступ к данным осуществляется на бизнес-уровне, доступ к данным должен осуществляться в соответствии с фиксированными правилами, а распределенные транзакции не могут выполняться между слайсами. После введения Cockroach DB мы можем предоставить унифицированное представление базы данных для бизнеса, которое проще в использовании, эксплуатации и обслуживании. Перед внедрением Cockroach DB мы также занимались совместимостью синтаксического протокола MySQL, синхронизацией данных, а также автоматической работой и обслуживанием. Официальный сайт тараканов: http://www.cockreachchina.cn/,
уникальный индекс
,
неуникальный индекс
Column Family
Сильная масштабируемость и высокий параллелизм
Эластичное масштабирование
Сервис высокой доступности
Распределенная транзакция
2PC
1PC
MVCC
Алгоритм HLC
Сравнение с алгоритмом True Time Clock
Типичные сценарии применения
Приложения