• Bitcoin $ 11,324.17 (4.9025%)
  • Ethereum $ 313.17 (2.03734%)
 06.07.2019 в 12:58   dev_coin

Интеграция блокчейн в ваш Node.js проект

В предыдущей статье мы рассмотрели чем отличается блокчейн от традиционной централизованной базы данных.

Ну а в данной статье мы применим наши знания на практике.

Мы собираемся использовать коммерческую реализацию Multichain, открытую платформу для построения блокчейна. Она позволяет создавать отдельные цепочки блоков внутри одной и той же сети. Во многих отношениях она отлично подходит для использования именно в качестве базы данных. Её уникальная функция - потоки данных, напоминает базу данных NoSQL и специально разработана для записи любых типов данных.

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

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

Небольшая тестовая система, реализована ниже:

База данных состоит из узлов Multichain, которые все взаимодействуют друг с другом. 

У нас есть начальное значение IP. Когда узел подключен, он запрашивает начальное значение IP: «Эй, вы можете дать мне IP-адрес узла из существующей сети, к которому я смогу присоединиться?». Если ответ — адрес IP, то этот новый узел синхронизирует текущее состояние базы данных со старого узла и подключается к сети. Впоследствии, он сообщает начальному IP свой собственный IP, так что, возможно, через него может присоединиться еще один новый узел в будущем.

Если, ответом будет не IP, означает, что это корневой узел происхождения и он является первым, который установил соединение с сетью. Снова и снова, он сообщает свой начальный IP.

Теперь, когда наш Node.js сервис запущен, он запросит начальное значение IP для IP-адреса узла. После того, как данные получены, он будет подключаться прямо к узлу (оранжевые стрелки) и использовать его в качестве базы данных. С этого момента все данные, которые передавались от сервиса к узлу, немедленно реплицируются по всей сети, поэтому и другие сервисы, подключенные к сети базы данных, могут считывать новые данные в режиме реального времени. Стоит отметить, что использован multichain-node для подключения к многоцепочечным узлам. В некотором смысле это похоже на использование любого другого ORM, например, Sequelize. Если вы хотите перейти к более простым способам, вы можете просто отправлять HTTP-запросы на узлы Multichain, через RPC API.

Теперь самое интересное — мы запаковываем каждый из этих сервисов и узлов в контейнер Docker. Это повышает отказоустойчивость на совершенно новом уровне, поскольку мы можем разместить эту инфраструктуру в Kubernetes, Rancher, Swarm или в любой другой контейнерной платформе.

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

Тестирование

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

1. Когда транзакции получены в узле, но еще не переданы (подтверждены) в сеть, и узел выключился — что происходит?Когда узел запускается снова, данные все еще там mempool) и транслируются ли они?

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

2. Сохраняются ли данные при остановке узла блокчейна?

• Когда узел корректно остановлен — ✓ 
• Когда узел внезапно выключен — ✓

3. Сохраняются ли данные при остановке нескольких узлов блокчейна?

• Когда несколько узлов правильно остановлены — ✓  
• Когда несколько узлов внезапно остановлены — ✓ 
• Когда все узлы, кроме одного, остановлены — ✓ 
• Когда все узлы остановлены — ✓

Остановка узлов не прекращает их состояние данных - это только останавливает процесс записи новых данных, что эквивалентно остановке сервера централизованной базы данных.

4. Скажем, работает несколько узлов, мы остановим некоторые из них и добавляем больше данных. Обновляются ли другие узлы новым состоянием базы данных?

• Когда мы запускаем остановленные узлы — ✓ 
• Когда мы запускаем совершенно новые узлы — ✓ 
• Когда все, кроме одного узла, останавливаются и мы запускаем старые / остановленные узлы — ✓ 
• Когда все, кроме одного узла, останавливаются и мы запускаем совершенно новые узлы — ✓

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

5. Как насчет производительности?

В сети блокчейна из трех узлов мы записываем все три из них одновременно. Запросы выполняются со следующими суммами транзакций на узел : 100, 200, 400, 800, 1600 и 3200. Это означает, что в каждом из шести раундов общий блокчейн подчеркивается с 3-кратным упомянутым количеством запросов на запись.

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

Как видно из диаграммы, производительность по времени увеличивается примерно в 1,5 раза каждый раз, когда мы удваиваем количество запросов.

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

Случаи применения

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

Однако, исходя из опыта, вот несколько довольно хороших вариантов использования:

  • Системы голосования  — например, подсчет политических голосов и публичное открытое голосование по определенным активам (объявлениям)
  • Постоянное хранение статистики -  например, статистические данные опросов, аналитики и т. д.
  • Отслеживание производства и логистики -  например, путь который проходит товар от фабрики до получателя, карты которые выбирают водители и происхождение определенной еды или лекарства и его путь к получателю.
  • Денежные активы -  Деньги (криптовалюты), вероятно, являются одним из лучших вариантов использования блокчейна. Что может быть лучше, чтобы представлять ваши деньги в электронном виде, чем в месте, где никто не может обманывать о происхождении денег и каждом изменении, через которое они прошли? Кроме того, вам не нужно полагаться на банки или другие третьи стороны, чтобы хранить, использовать или перемещать ваши деньги.
  • Сертификаты и другие юридические документы.  Можно быть уверенным, что документ не был подделан, поскольку его хэш-значение будет сертифицировано во всей всемирной сети узлов.
  • Медицинские карты и страхование.  Как и в случае с документами, медицинские карты любого человека будут надежны. Кроме того, база данных, в которой они хранятся, будет унифицирована в соответствии с определенным стандартом данных, так что любая система здравоохранения может легко интегрироваться с ней, что позволит легко обмениваться медицинскими записями между врачами, больницами и даже странами.
  • Хранение данных , облачные сервисы. Концепция распределенного хранилища файлов используется годами, но блокчейн делает ее еще проще и безопаснее, по сути каждый компьютер в сети может быть включен в общее хранилище данные во всемирной сети.

Исходный код https://github.com/gvko/multichain-db

Комментарии: