Блокчейн и связанная с ним концепция децентрализации находятся сейчас в фокусе внимания. Появляется всё больше проектов, которые пытаются в успешные модели бизнеса внести децентрализацию и тем самым внести в него инновацию и существенно его улучшить. Но что же такое децентрализация, чем она хороша, как она может что-то улучшить? Опыт анализа многих проектов показывает, что далеко не все это понимают, включая и авторов этих проектов. В этой статье попробуем разобраться, что же следует понимать под децентрализацией.
По значению слова можно сказать, что децентрализация - это отсутствие центра. Под центром понимается какой-нибудь физический участник или компонент системы, функция которого не может быть выполнена никем другим. И если его убрать из системы или он станет неправильно работать, то вся система перестанет функционировать или существенно деградирует. Например, совсем недавно облако Google не работало 4.5 часа, потому что в одном месте ошибочно была изменена маленькая настройка. Это показывает, что данная настройка центральна для всего Google cloud. И неправильная настройка, сделанная в одном месте, парализует всю систему. Это пример технического центра.
Или другой пример. Google+ (социальная сеть) больше не работает вообще, потому что была закрыта решением Google. Централизованное решение компании привело к тому, что вся сеть была закрыта, несмотря на желание некоторых её пользователей продолжать с ней работать. Это пример центра управления.
То есть, преимущество децентрализации состоит в том, что она способна дать системе высокую устойчивость. Полностью децентрализованная система должна сохранять жизнеспособность, даже если существенная часть её компонентов (оборудования) или участников (пользователи) исчезли, заблокированы или работают неправильно. Например, биткоин сохраняет работоспособность, даже если из сети исчезнут все узлы, кроме одного. Он также сохраняет работоспособность, даже если до половины узлов станут работать неправильно, пытаясь повредить работы сети.
Чтобы сделать систему полностью децентрализованной, необходимо разработать набор правил, которых должны придерживаться участники. Это похоже на правила дорожного движения - множество машин движутся по улицам совершенно децентрализованно, каждая управляется своим водителем, и водители могут совершенно не знать друг о друге. Но при этом при соблюдении правил движение осуществляется вполне успешно и безопасно.
Кстати, если правила общие для всех участников - не являются ли они центром? Нет, поскольку это не компонент системы и не её участник. Правила, как только они установлены, нельзя изъять или сломать. Правила - это сама система. Важно это понимать. В децентрализованной системе правила незыблемы. В идеале правила не должны никогда меняться. Но в реальности заранее всё предусмотреть никогда не удаётся. Поэтому в правилах могут быть учтены и правила для изменения правил. Например, изменения в протоколе Bitcoin должны быть приняты всеми майнерами сети. В противном случае сеть расколется и будет существовать в нескольких вариантах. Наиболее громкий раскол такого рода произошел в сети Ethereum в июне 2016 года, когда сообщество не пришло к единому мнению по исправлению последствий ошибки в одном из смарт-контрактов, и сеть разделилась на Ethereum (ETH) и Ethereum Classic (ETC).
Децентрализованная система должна быть устойчивой к присоединению и отсоединению участников, а также к их неправильному поведению. Возвращаясь к примеру с дорожным движением, что стимулирует людей придерживаться правил? Если подумать, то там самый настоящий proof of stake. Нарушая правила, люди рискуют как минимум заплатить штраф, а как максимум - своей жизнью. Это серьезный стимул соблюдать правила. И он неплохо работает. При этом даже если отдельные люди правила нарушают, это не приводит к повсеместной парализации дорожного движения.
Таким образом, децентрализованная система должна обладать следующими свойствами:
- Отсутствие технического центра - выход из строя или неправильная работа части компонентов системы (сервера, участка сети и т.п.) не должно нарушить работу системы.
- Отсутствие центра управления - принятие любого решения одним или малой частью участников системы не должно нарушить работу системы.
- Устойчивость к атакам. Система правил взаимодействия участников и компонентов системы, предусматривающая поощрения за соблюдение и наказания за нарушения правил.
- Равноправие участников - к системе может присоединиться кто угодно согласно общим правилам.
К сожалению, большинство проектов, которые переводят какой-нибудь успешный бизнес на рельсы децентрализации, понимают под ней только первый пункт. При этом они оставляют центр управления за собой. И здесь становится ясно, что вся их инновация исчезает, потому что они остаются централизованы, как и тот успешный бизнес, который они используют в качестве прообраза. Спасает их только то, что не все четко себе представляют, что такое децентрализация. Надеемся, это изменится после этой статьи.
Одна из наиболее серьезных проблем децентрализованных проектов - хранение данных и быстрый доступ к ним. Проблема состоит в том, что на текущий момент не существует готовых решений для децентрализованного хранения и поиска данных. Существуют децентрализованные файловые хранилища вроде IPFS, Sia, Storj, Ethereum Swarm, но они позволяют только хранить данные. Осуществлять поиск по ним с их помощью невозможно.
Для хранения и быстрого поиска данных традиционно используются базы данных. База данных - это не то же самое, что файловое хранилище. Дело в том, что файловые хранилища хранят файлы как просто набор байтов, они не знают, что у него внутри. Поэтому найти файл в файловом хранилище можно, грубо говоря, только по его имени, а не по содержимому. База данных - это структурированное хранение данных. Данные там представлены в виде таблиц и вы можете найти внутри отдельные строки, удовлетворяющие вашим условиям поиска.
Чтобы лучше понять разницу между базой данных и файловым хранилищем, представьте себе набор файлов электронных таблиц, например, Excel или Numbers, с названиями “Мои расходы за июнь”, “Мои расходы за июль” и т.д. С точки зрения файловой системы - каждый файл это просто набор байт. И судить о его содержании вы можете лишь поверхностно, только по названию. С помощью файлового хранилища вы можете найти информацию о расходах за определенный месяц. А чтобы узнать, какие именно расходы вы сделали за этот месяц, придется открывать файл с помощью соответствующего приложения. Тогда вы сможете освежить память и вспомнить, что в июне вы купили новый iPhone, а ещё шоколад Toblerone в супермаркете.
Но что, если вы и так помните, что вы купили iPhone, а вам надо узнать, в каком месяце вы его купили? Файловое хранилище уже не может вам в этом помочь. Вам нужно будет открывать все файлы и вручную искать, не в этом ли файле содержится iPhone. Та же самая проблема возникает, если вы решили сесть на диету и хотите уточнить, сколько раз в этом году вы уже покупали Toblerone.
База данных решает эту проблему. Тогда, грубо говоря, все расходы раскиданы у вас не по разным файлам, а лежат в одной базе данных. И вы можете составлять запросы вида “Сколько раз я покупал Toblerone в этом году” или “Какого числа я купил iPhone” или даже “Сообщи мои суммарные траты по месяцам”, и база данных весьма оперативно вернет ответ.
Для использования в приложениях базы данных незаменимы. Просто потому что все приложения работают с данными. Но проблема именно децентрализованных приложений состоит в том, что готовых децентрализованных баз данных пока нет. В результате проекты, которые заявляют о своей децентрализованности, либо честно пытаются использовать для хранения данных децентрализованные файловые хранилища вроде IPFS (и тем самым теряют возможность быстрого поиска данных), либо используют обычные централизованные базы данных (и тем самым перечеркивают свою децентрализованность). В обоих случаях они перестают быть способными конкурировать с их централизованными прообразами, потому что либо они сильно проседают по производительности и функциональности, либо теряют самую главную свою черту - децентрализацию.
Вот почему так важно создать децентрализованную базу данных. Так же, как программируемый блокчейн Ethereum дал мощный толчок появлению простых децентрализованных приложений на смарт-контрактах, так появление децентрализованной базы данных создаст эру серьёзных децентрализованных приложений мирового уровня.
Наиболее далеко продвинувшаяся в разработке децентрализованная база данных - это, без сомнения, OasisDDB. Эта СУБД построена на основе распределенной СУБД Apache Cassandra и привносит в неё публичность, BFT протокол (протокол, устойчивый к атакам различного рода), систему мотивации для участников. OasisDDB образует децентрализованную сеть - компьютеры фармеров с установленным ПО OasisDDB предоставляют свои ресурсы (дисковое пространство, процессорная мощность) сети, их объединенные ресурсы и есть OasisDDB. Пользователи децентрализованных приложений построенных на OasisDDB, используют эти ресурсы, платя за них небольшую сумму в ODDB токенах. Эта плата перечисляется фармерам по мере их вклада в обработку запроса этого пользователя. Данные, которые пользователи кладут в БД, реплицируются и разбиваются на части, чтобы обеспечить надежность хранения и высокую скорость доступа. Одна таблица БД хранится на большом числе узлов сети, но каждый узел хранит лишь ее часть, то есть, узлы сети не являются полной копией друг друга, как, например, в популярных блокчейнах.
Благодаря публичности, фармером OasisDDB может стать любой, аналогично тому, как майнером публичного блокчейна также может стать любой, кто обладает подходящим оборудованием. В результате, сеть легко масштабируется под возрастающую нагрузку.
В настоящий момент OasisDDB находится в стадии alpha-версии и работает на тестовой сети, предоставляя разработчикам децентрализованных приложений раннюю возможность протестировать её.