Роб Хеджпет, директор по работе с разработчиками в MariaDB, рассказывает на портале The New Stack о распределенном SQL (Distributed SQL) — революционном подходе, объединяющем преимущества реляционных и нереляционных баз данных.

На протяжении трех десятилетий эволюция баз данных была важнейшей частью технологических инноваций в каждой отрасли и для предприятий любого размера по всему миру. Но в конце 1990-х и в начале 2000-х базы данных уперлись в стену производительности. Успех Интернета в сочетании с бурным развитием приложений привел к появлению огромных объемов данных и невиданной ранее скорости их увеличения. Загрузка этих данных в то время проявила серьезные узкие места в базах данных. Увеличение задержек и снижение пропускной способности были распространенными проблемами, которые мешали повышению производительности бизнеса и в конечном итоге замедляли рост доходов. На самом деле эти сложности так и не исчезли.

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

Предыдущие подходы: дорогостоящие, хрупкие, ограниченные

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

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

В конце концов, администраторы баз данных, системные архитекторы и разработчики приложений собрались в пресловутых комнатах с досками, чтобы решить проблему вне базы данных — с помощью кода. Концепция шардинга, или разделения, когда один логический набор данных может быть разделен и сохранен в нескольких базах данных для увеличения общей емкости хранилища и обработки дополнительных запросов, в конечном итоге нашла свое применение в различных системах баз данных. Однако шардинг оказался сложным и хрупким подходом, который трудно поддерживать, требует больших затрат на проектирование, допускает ограниченное количество транзакций и имеет ограничения на запросы. Поиски истинной эластичности продолжились.

Затем, около десяти лет назад, появилось движение, которое нельзя было не заметить: бум NoSQL, когда разочарованные новаторы предложили альтернативу реляционным базам данных. Технически этот не табличный подход существовал с конца 1960-х, но не был направлен на широкое использование в бизнесе. Подход NoSQL в начале 21 века позволил индустрии баз данных оглянуться назад и полностью переосмыслить и переделать хранение и доступ к данным в попытке решить проблемы масштабируемости.

Хотя этот подход и устранил некоторые проблемы с базами данных и доступом к данным, за это пришлось заплатить. NoSQL означал отказ от многих ключевых вещей, которые делали реляционные базы данных настолько полезными — таких как поддержание и отслеживание целостности данных и возможность использовать ACID-транзакции. Примитивные запросы, сложное моделирование данных, низкая целостность данных, ограниченная или несуществующая поддержка ACID-транзакций и специализированные инструменты, необходимые для подхода NoSQL, сделали его неприемлемым для большинства крупных предприятий и компаний малого и среднего бизнеса.

Реляционная революция: распределенный SQL

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

Идея заключается в том, что в рамках этого кластера узлов разработчики могут просто добавлять или удалять узлы по требованию, чтобы учесть изменения в потребностях хранения и доступа. Как следует из названия, сами данные распределены, разделены на фрагменты и реплицированы на нескольких узлах. Распределенный SQL реализует архитектуру без разделения ресурсов (shared-nothing), где один узел в кластере удовлетворяет каждый запрос на обновление, устраняя разногласия между узлами, поскольку они независимо обращаются к одной и той же памяти или хранилищу.

Распределенный SQL — это беспроигрышный вариант реляционной базы данных. Инновации этой технологии основаны на уроках, полученных за последние тридцать с лишним лет, чтобы обеспечить настоящую динамическую эластичность. Ее современные преимущества включают возможность просто, быстро и по требованию добавлять или удалять узлы. Подход является самоуправляемым, способным автоматически перебалансировать узлы или перебалансировать данные на этих узлах, поддерживая при этом чрезвычайно высокую непрерывную доступность (т. е. автоматическое восстановление после отказа). И, конечно, этот подход включает в себя все функции, которые делают реляционные базы данных такими мощными, например, возможность использовать стандартный SQL (включая JOIN) и поддерживать соответствие ACID.

Распределенный SQL может быть спроектирован таким образом, что все узлы работают вместе, образуя единую логическую и распределенную базу данных, на которую могут ссылаться все приложения, независимо от предполагаемого сценария применения. Нуждается ли предприятие в кластере из трех узлов для скромных рабочих нагрузок или в сотнях, даже тысячах узлов для неограниченной масштабируемости — распределенный SQL означает, что развертывание может расти или сокращаться по требованию. Система может иметь комбинацию из тысяч процессорных ядер, терабайтов памяти и даже петабайтов хранилища, которые работают с одной логической базой данных. И эта база данных способна обрабатывать миллионы или десятки миллионов запросов в секунду, не жертвуя целостностью данных или постоянной высокой доступностью.

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