О чем эта история

В 2020 году компания Waves Enterprise на основе Yandex Cloud запустила платформу на блокчейне, чтобы автоматизировать выдачу беспроцентных и льготных кредитов малому и среднему бизнесу для поддержки в условиях пандемии.

В проекте использовали сервис управления кластерами Yandex Managed Service for Kubernetes®. Инженеры Waves Enterprise автоматизировали создание узла для подключения новых участников системы. За первые три недели были подключены 60 банков.

После развертывания платформы в Yandex Cloud время подключения организации и создания узлов для нее уменьшилось с пяти дней до двух часов.

Собрать все банки на одном блокчейне

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

В качестве базовой платформы выбрали блокчейн-платформу Waves Enterprise. У блокчейна есть несколько преимуществ:

  1. Автоматический контроль уникальности заявок одновременно во всех подключенных банках исключает выдачу кредита несколькими банками.
  2. Банк, первым получивший заявку, получает приоритетное право выдать кредит. Остальные участники системы сразу видят, кто будет обрабатывать заявку.
  3. Решения можно перемещать между внутренней инфраструктурой и облаком. Если данные хранятся в блокчейне, их владелец не теряет контроля над данными независимо от их физического расположения, так как копии хранятся на всех узлах.
  4. Размещение данных в едином распределенном реестре позволяет использовать не одно конкретное приложение, а все размещенные в смарт-контрактах платформы.

Гибкость, безопасность и контроль

Корпоративная блокчейн-платформа Waves Enterprise использует быстрый энергоэффективный метод консенсуса без необходимости майнинга. Она соответствует требованиям российских регуляторов за счет применения модульной криптографии на основе российских стандартов (ГОСТ). Можно писать смарт-контракты для Waves Enterprise на любом языке программирования, упаковывать их в образы Docker и запускать в контейнерах Kubernetes®.

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

Блокчейн позволяет найти компромисс: размещать данные в облаке без потери контроля над ними. Узел блокчейна в виде контейнера можно перемещать между облаком и корпоративной инфраструктурой.

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

Чтобы прийти к единому механизму развертывания и настройки узлов блокчейна во всех банках, решили использовать облако. Выбор пал на платформу Yandex Cloud, которая удовлетворяла всем техническим требованиям и соответствовала 152-ФЗ.

Главным условием было то, что каждый клиент должен получить в облаке полноценный узел блокчейна со всеми приложениями. Yandex Managed Service for Kubernetes позволил развернуть под клиента набор контейнеров с необходимыми сервисами и настройками, который можно перенести из облака в собственную инфраструктуру. При этом сервис предоставляет возможность аллокации и изоляции друг от друга только необходимых каждому клиенту ресурсов.

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

Развертывание в Yandex Cloud

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

Остальные клиенты сразу начали работать в облаке, что значительно ускорило процесс подключения. На платформе Yandex Cloud развернули кластер Managed Service for Kubernetes. Для каждого банка создали namespace, в отдельных контейнерах которого разместили узел блокчейна, прикладные сервисы и фронтенд.

Для хранения общих индексируемых данных задействовали отдельную БД на базе Managed Service for PostgreSQL. Эти данные периодически реплицируются из блокчейна и используются для формирования статистики и отчетов.

Для оптимизации и разведения трафика используются два балансировщика нагрузки Network Load Balancer. Первый обрабатывает внешний трафик, поступающий в кластер, второй отвечает за взаимодействие узлов блокчейна в Kubernetes с виртуальными машинами в Compute, на которых выполняются смарт-контракты.

Схема развертывания в Yandex Cloud

Сеть и узлы блокчейна изнутри

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

Схема архитектуры сети

Все общедоступные данные о заявках и кредитах хранятся в распределенном реестре. Архитектура его работы позволяет рассчитать предельную пропускную способность для записи. Данные в блокчейн записываются блоками, причем известен максимальный размер блока и средний интервал между ними. Нагрузка на чтение может быть практически любой, а при большой нагрузке создается отдельный экземпляр БД для этого клиента. Чтобы максимально изолировать смарт-контракты, они выполняются на отдельных виртуальных машинах без доступа в интернет.

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

Контейнер организации в кластере состоит из трех компонентов:

  1. Узел блокчейна — база данных.
  2. Прикладные микросервисы — они загружают данные из блокчейна, реализуют бизнес-логику, строят отчеты в Excel, поставляют данные для графиков и статистики.
  3. Фронтенд — интерфейс (в том числе API), с которым взаимодействуют пользователи.

Структура данных в системе

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

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

Проблемы и их решение

При развертывании такой сложной системы в сжатые сроки неизбежны технические проблемы и задержки.

Например, проект Waves Enterprise первым из клиентов Yandex Cloud начал использовать новую функцию Managed Service for Kubernetes, позволяющую подключать до 56 дисков к одному физическому узлу. Иногда после обновления узлов блокчейна к ним не монтировались некоторые диски. Совместная отладка службы поддержки и архитекторов Яндекса заняла достаточно много времени и была решена обновлением ядра Linux.

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

Новый узел за два часа

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

За первые три недели к платформе подключили 60 банков. Система успешно эксплуатируется уже больше года, в ней работают два приложения: выдача беспроцентных кредитов и выдача льготных кредитов.