Что такое шардинг (sharding)

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

Есть два основных способа разделить базу данных - вертикальное разделение и горизонтальное разделение.

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

Горизонтальное разделение разбивает таблицу базы данных на отдельные наборы строк, и эти строки хранятся в разных экземплярах база данных. Каждый набор строк представляет собой осколок. Простым примером этого может быть «Сервер 1», принимающий строки от 1 до 10 000, а «Сервер 2» - строки от 10 001 до 20 000, и так далее.

Горизонтальное разделение имеет два преимущества перед вертикальным разделением:

  1. Вам не нужно заранее планировать, как разделить данные;
  2. Ваша база данных гораздо менее «комковатая» - вы можете динамически масштабировать, какую часть всей базы данных необходимо обслуживать одному серверу.

Почему так важен шардинг?

Если сервер не может обработать запрошенное количество операций, вы можете разделить этот набор данных на части, которые можно хранить на разных хостах.

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

Шардинг - это хорошо зарекомендовавшее себя решение для масштабирования систем с большими наборами данных и / или высокопроизводительными операциями.

Что такое технология распределенной книги (DLT)?

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

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

Для DLT требуются независимые машины или узлы для записи, синхронизации и обмена транзакциями в соответствующих регистрах.

Распределенные реестры могут быть разрешенными или не разрешенными, в зависимости от того, требуется ли узлам разрешение на изменение реестра. Реестры бывают общедоступными или частными в зависимости от того, может ли кто-либо (а не только узлы в сети) получить доступ к реестру.

Для чего используются DLT?

DLT можно использовать для создания:

  • цифровые валюты;
  • уникальные в цифровом виде объекты;
  • цифровые объекты с внутренней стоимостью (например, билеты).

Мы можем экстраполировать многие связанные варианты использования из них, включая криптовалюту, нотариальные услуги, рынки прогнозирования, смарт-контракты, контрольные журналы, регулирующую отчетность, оптимизацию клиринга и расчетов, цифровую идентификацию и т. д. И это только начало.

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

Как сегментирование DLT повышает вероятность мошенничества?

Чтобы понять распределенный реестр, нужно понять понятие «расходовать»: то, что потрачено на одно место в сети, получается где-то еще. Разделение общедоступного DLT затруднено, потому что вы должны быть в состоянии гарантировать, что трата была произведена только один раз во всей сети. Это уже сложно без сегментирования, а наличие нескольких сегментов делает это еще более трудным.

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

Примите во внимание следующее: разделив DLT на несколько сегментов, злоумышленник может захватить небольшую часть сети с меньшими вычислительными ресурсами. Например, если вы разделите DLT на два осколка, при этом половина ваших узлов будет работать с одним осколком, а половина - с другим, вам теперь потребуется только 25% хэш-мощности сети для атаки одного из двух осколков. При достаточном количестве узлов, отражающих эту ложную трату, теперь возможна двойная трата.

Когда в DLT возможны двойные расходы, это допускает мошенничество. В конце мая 2018 года против биржи Bitcoin Gold была запущена атака с двойным расходом: в этой атаке злоумышленник смог получить более 50% общей хэш-мощности сети. Таким образом, они смогли изменить и исключить транзакции собственных монет из блоков. Впоследствии они могли отменить транзакции, которые были ранее подтверждены.

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

Заключение

Эти проблемы иллюстрируют, как сложно сегментировать распределенный реестр: реестры - это записи транзакций, и они существуют, чтобы гарантировать, что каждое расходование происходит только один раз. В распределенном реестре не все сегменты, образующие реестр, находятся в одном месте. Согласно теореме CAP о распределенных базах данных, распределенное хранилище данных (или реестр, в нашем случае) не может одновременно предоставлять более двух из следующих трех гарантий: согласованность, доступность или устойчивость к разделению.

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