Добрый день, дорогие хабровчане.
Я являюсь разработчиком научно-технического центра IBM в Москве. Мы ведем разработку продуктов IBM совместно с другими лабораториями по всему миру. Если позволяет время и есть желание, то у нас разрешено использовать часть рабочего времени на проекты, которые не являются основной занятостью. Такой подход расширяет кругозор и поддерживает творческий настрой. Для меня такой областью является разработка блокчейн-решений на Hyperledger Fabric. Тем более, что такие проекты стали востребованы на нашем рынке.
Надеюсь, что статья будет не о блокчейне, а о том, что мы используем для разработки таких решений, но тем не менее стоит все-таки начать с предметной области.
Статья не претендует на полноту и нацелена на создание рабочего облачного окружения для разработки блокчейн-проектов на Hyperledger Composer. В результате наших практических изысканий мы должны получить следующую инфраструктуру:
Немного о Hyperledger Fabric
Существует большое количество блокчейн-платформ, которые можно сравнивать до бесконечности. Скорее всего универсальной платформы не существует, есть выбранная для текущей задачи. Для себя из блокчейн-платформ я выбрал Hyperledger Fabric. С одной стороны потому, что платформа интересна мне с технической точки зрения, с другой — IBM активно участвует в консорциуме Hyperledger.
Hyperledger — это консорциум в рамках проекта Linux Foundation. Hyperledger Fabric (HLF) — реализация технологии блокчейн для построения различных решений. Она является блокчейн-платформой с контролируемым доступом (permissioned). Это означает, что добавление новых участников контролируется. Участники определяются на этапе проектирования сети и могут иметь различные роли. Наиболее понятными сценариями для таких сетей являются цепочки поставок, в которых участвует множество независимых компаний. Для примера можно изучить опыт Walmart, JD.com, IBM и Tsinghua University в организации цепочки поставок продуктов питания.
С технической точки зрения каждый участник имеет развернутый участок сети у себя в организации (или в облачной инфраструктуре), но не имеет доступа к участкам сети, развернутым в других компаниях.
Как видно из схемы — каждый участник имеет:
- свой узел (peer), который обеспечивает работоспособность блокчейн-сети и является частью HLF;
- приложение, которое обычно состоит как минимум из веб сервера и пользовательского интерфейса;
- связующее звено (ordering service), которое обеспечивает взаимодействие между узлами.
В приложении пользователи авторизуются с помощью своих ключей или связки логин и пароль и получают доступ к смарт-контракту.
Смарт-контракт – это запрограммированная бизнес-логика и правила взаимодействия с данными, которые размещены в распределенном реестре (ledger). Реестр содержит цепочку блоков транзакций, которые совершили участники сети. Каждый последующий блок хранит хэш предыдущего блока, за счет чего обеспечивается невозможность изменения части информации. Процесс согласования корректности блока и добавления его в распределенный реестр называется консенсусом. Различные блокчейн-платформы имеют различные механизмы консенсуса: proof of work (PoW), proof of stake (PoS), byzantine fault tolerance (BFT) и прочие.
Начиная с версии 1.0 HLF специфична наличием Ordering Service, который является распределенным между участниками кластером и отвечает за очередность транзакций в формирующемся блоке. По сконфигурированным параметрам он собирает транзакции в сети и формирует блок. В случае отказа Ordering Service транзакции в сети перестанут регистрироваться, но сами данные останутся неизменными.
Теперь, разобравшись с основными понятиями, мы можем переходить к практике.
Как развернуть свою собственную HLF сеть
Все компоненты HLF работают в Docker-контейнерах и могут быть развернуты как с помощью Docker Compose, так и с помощью Kubernetes. Кроме того, сами смарт-контракты тоже запускаются в Docker-контейнерах.
Для того, чтобы развернуть HLF можно использовать уже существующую kubernetes-сеть, minikube или воспользоваться одним из облачных Kubernetes as a Service.
В облачной инфраструктуре IBM можно развернуть свою kubernetes-сеть бесплатно.
Как развернуть kubernetes сеть в IBM Cloud.
Для того, чтобы начать пользоваться IBM Cloud необходимо:
- зарегистрироваться;
- установить IBM Cloud CLI;
- получить и активировать купон для активации дополнительного функционала в IBM Cloud (купоны выдаются в полуручном режиме, и их, к сожалению, ограниченное количество);
- установить kubectl;
- установить клиент Git для вашей операционной системы;
- почитать о том, что такое Docker и Kubernetes.
После регистрации в IBM Cloud вы получите доступ в графический интерфейс управления вашей инфраструктурой. Вам будут доступны сотни сервисов и десятки подходов для размещения ваших приложений (Cloud Foundry, Kubernetes, OpenWhisk, виртуальные машины и выделенные сервера). Для использования виртуальных машин и выделенных серверов необходимо добавить кредитную карту, а вот небольшой кусочек kubernetes можно получить бесплатно (с купоном выше).
Для этого необходимо в левом верхнем углу нажать на кнопку меню и выбрать Containers.
Перед вами откроется панель управления кластерами kubernetes, Docker registry и helm-чартами.
Выбрав слева в меню пункт Cluster, вы увидите интерфейс создания кластера kubernetes и выбор региона, в котором кластер будет развернут. Вы можете создать бесплатный кластер в каждом регионе.
После нажатия кнопки Create cluster следует выбрать тип кластера Free и придумать ему название.
Создание кластера займет некоторое время, которое вы можете потратить на переход в консоль (заварить кофе вы не успеете). Установив IBM Cloud CLI (bx tool) вам необходимо сконфигурировать его для работы с вашим аккаунтом:
- установить плагин для bx для работы с kubernetes;
bx plugin install container-service -r Bluemix
- авторизоваться в IBM Cloud;
bx login -a https://api.eu-gb.bluemix.net
- указать регион, где вы создали Ваш кластер (uk-south может меняться);
bx cs region-set uk-south
- запросить конфигурацию для вашего кластера, где mycluster — название, которые Вы ввели в графическом интерфейсе IBM Cloud;
bx cs cluster-config mycluster
- выполнить команду, которую вы увидите в результате выполнения предыдущего шага. Она укажет утилите kubectl, где находятся ключи доступа к вашему кластеру (путь к конфигурационному файлу может меняться);
export KUBECONFIG=/path/mycluster/kube-config-mil01-mycluster.yml
- узнать public IP вашего kubernetes worker.
bx cs workers mycluster
Теперь вы готовы к тому, чтобы начать использовать ваш kubernetes-кластер для любых целей. Кластер является бесплатным, и в его функционале есть некоторые ограничения, которые нам не помешают развернуть свою блокчейн-сеть:
- только один worker (виртуальная машина);
- отсутствие volumes;
- недоступность application load balancer ;
- невозможность использовать Ingres, вместо которого можно использовать [NodePort] (https://kubernetes.io/docs/concepts/services-networking/service/)
Для тех, кто первый раз использует kubernetes, возможно, стоит поэкспериментировать с разворачиванием первых Deployment и сервисов. Те, кто уже готов окунутся в мир разработки блокчейн-проектов, могут переходить к следующим шагам.
Разворачиваем контейнеры HLF в kubernetes
Для тех, кто не так давно работает с Docker и Kubernetes напомню, что для разворачивания любого приложения в kubernetes нам необходимы 2 вещи:
- Docker images, на основе которых происходит запуск контейнера;
- yaml-конфигурация поведения нашего контейнера в kubernetes.
Open Source сообщество разработчиков Hypeledger Fabric сделало за нас эту работу. Docker Images с HLF уже лежат на DockerHub и автоматически загрузятся в наш кластер. А вся yaml-конфигурация находится в github репозитории. На момент написания статьи репозиторий содержит конфигурацию для Hyperledger Fabric 1.0.3. Возвращаемся в консоль и выполняем следующие команды:
git clone https://github.com/IBM-Blockchain/ibm-container-service.git
cd ibm-container-service/cs-offerings/scripts/
./create_all.sh --with-couchdb
Ключ --with-couchdb
необходим для того, чтобы вместо базы данных по умолчанию у нас развернулась CouchDB. С ее помощью мы сможем использовать запросы для получения данных из HLF Composer.
Что такое Hyperledger Composer
Composer является инструментом для разработчиков блокчейн-решений. С его помощью можно повысить скорость разработки блокчейн-решений с месяцев до недель. Существует онлайн-песочница Composer Playground, но вся бизнес-логика, спроектированная в ней, будет запускаться у вас в браузере (эмуляция блокчейн). В нашем случае Composer будет подключен к работающей сети Hyperledger Fabric, развернутой в kubernetes.
Для создания модели в Hyperledger Composer необходимо описать участников (participant), активов (asset) и транзакций (transaction). Данный подход позволяет перевести разработку блокчейн-проекта в термины вашей задачи, а не выбранной платформы или используемого инструмента. Код транзакций (бизнес-логика) пишется на JavaScript, и при запуске нового смарт-контракта не создается новый Docker-контейнер, а код транзакции передается на интерпретацию в существующий контейнер.
Еще одним достоинством Hyperledger Composer является автоматическое создание REST-интерфейсов на основе описанных активов и транзакций, что позволяет вам сразу начинать писать пользовательский интерфейс (и соответственно получить MVP ).
Запуск первого блокчейн проекта
После запуска Hyperledger Composer в IBM Cloud вы сможете зайти в его веб интерфейс по адресу <public_ip_of_k8s_cluste>:31080. По умолчанию все необходимые контейнеры Docker проброшены на публичный доступ по технологии NodePort (мы же не забываем, что разворачиваем окружение для разработчика).
Composer подключен к github-проету, и вы можете развернуть один из существующих проектов или начать разрабатывать свой.
В результате мы получили бесплатное облачное окружение для разработки проектов на базе Hyperledger Fabric.
Что дальше ?
Как и в любом технически непростом проекте всегда есть много деталей и дополнительных вещей. Данная статья является ознакомительной и призвана помочь в самом начале изучения. Надеюсь, что время и силы позволят мне написать несколько статей с более детальной информацией как по kubernetes в IBM Cloud, так и про разработку для Hyperledger Fabric.
Материалы
Docker, Kubernetes, IBM Cloud
IBM Cloud
документация Docker
документация Kubernetes
helm
telegram channel Enterprise containers
Blockchain, проект Hyperledger, IBM Blockchain
официальная документация hyperledger fabric
документация Hyperledger Composer
пример проекта на Hyperledger
telegram channel про современные технологии и блокчейн в частности