О чем эта история
В 2020 году компания Waves Enterprise на основе Yandex Cloud запустила платформу на блокчейне, чтобы автоматизировать выдачу беспроцентных и льготных кредитов малому и среднему бизнесу для поддержки в условиях пандемии.
В проекте использовали сервис управления кластерами Yandex Managed Service for Kubernetes®. Инженеры Waves Enterprise автоматизировали создание узла для подключения новых участников системы. За первые три недели были подключены 60 банков.
Собрать все банки на одном блокчейне
Весной 2020 года, когда из-за пандемии начали вводить ограничения на работу предприятий, Правительство РФ решило поддержать бизнес выдачей беспроцентных и льготных кредитов. При этом каждое предприятие могло получить кредит только в одном банке. Понадобилось разработать систему, которая объединит все банки и будет контролировать подачу заявок и выдачу кредитов.
В качестве базовой платформы выбрали блокчейн-платформу Waves Enterprise. У блокчейна есть несколько преимуществ:
- Автоматический контроль уникальности заявок одновременно во всех подключенных банках исключает выдачу кредита несколькими банками.
- Банк, первым получивший заявку, получает приоритетное право выдать кредит. Остальные участники системы сразу видят, кто будет обрабатывать заявку.
- Решения можно перемещать между внутренней инфраструктурой и облаком. Если данные хранятся в блокчейне, их владелец не теряет контроля над данными независимо от их физического расположения, так как копии хранятся на всех узлах.
- Размещение данных в едином распределенном реестре позволяет использовать не одно конкретное приложение, а все размещенные в смарт-контрактах платформы.
Гибкость, безопасность и контроль
Корпоративная блокчейн-платформа 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, на которых выполняются смарт-контракты.
Сеть и узлы блокчейна изнутри
Всё взаимодействие участников системы происходит через их узлы, которые передают, принимают и подтверждают транзакции, обеспечивая синхронизацию данных со скоростью, близкой к реальному времени. Дополнительно в контуре каждого участника работают сервисы аутентификации и авторизации доступа к узлу блокчейна, а также файловое хранилище.
Все общедоступные данные о заявках и кредитах хранятся в распределенном реестре. Архитектура его работы позволяет рассчитать предельную пропускную способность для записи. Данные в блокчейн записываются блоками, причем известен максимальный размер блока и средний интервал между ними. Нагрузка на чтение может быть практически любой, а при большой нагрузке создается отдельный экземпляр БД для этого клиента. Чтобы максимально изолировать смарт-контракты, они выполняются на отдельных виртуальных машинах без доступа в интернет.
Каждая подключенная к системе организация выполняет свои операции на собственном узле блокчейна. Для сохранения в общей базе данных транзакции, созданные смарт-контрактами, проходят через консенсусный слой, т. е. подтверждаются другими узлами.
Контейнер организации в кластере состоит из трех компонентов:
- Узел блокчейна — база данных.
- Прикладные микросервисы — они загружают данные из блокчейна, реализуют бизнес-логику, строят отчеты в Excel, поставляют данные для графиков и статистики.
- Фронтенд — интерфейс (в том числе API), с которым взаимодействуют пользователи.
Структура данных в системе
Каждая заявка на кредит состоит из открытой и закрытой частей. В открытой части содержатся дата, номер, реквизиты и прочие данные, которые могут храниться в открытом доступе. С помощью этих данных контролируется уникальность заявки.
В закрытой части содержится конфиденциальная информация (например, утвержденный кредитный лимит, сумма и срок кредита, особые условия). Эти данные не сохраняются в публичном реестре, а хранятся в локальных БД и передаются напрямую между узлами, обрабатывающими конкретную заявку.
Проблемы и их решение
При развертывании такой сложной системы в сжатые сроки неизбежны технические проблемы и задержки.
Например, проект Waves Enterprise первым из клиентов Yandex Cloud начал использовать новую функцию Managed Service for Kubernetes, позволяющую подключать до 56 дисков к одному физическому узлу. Иногда после обновления узлов блокчейна к ним не монтировались некоторые диски. Совместная отладка службы поддержки и архитекторов Яндекса заняла достаточно много времени и была решена обновлением ядра Linux.
Еще одна проблема возникла на этапе разработки скриптов для автоматизации развертывания узла и сервисов. Первые три банка были подключены без проблем, но после начала массового подключения сразу двух десятков банков скрипты перестали работать. Оказалось, что в интерфейсе пользователя Yandex Cloud не отображались некоторые квоты и скрипты прекращали работу с ошибками превышения квот. Инженеры Yandex Cloud оперативно увеличили квоты, а затем доработали пользовательский интерфейс, который после проверки был введен для всех клиентов. Дальнейшее автоматизированное развертывание узлов блокчейна проходило без сбоев.
Новый узел за два часа
После развертывания в Yandex Cloud время подключения новой организации и развертывания узлов для нее уменьшилось с пяти дней до двух часов. С помощью управляемых сервисов и скриптов автоматизации можно создать узел и контейнеры со стандартной конфигурацией за несколько минут. Скрипты создают новый namespace, генерируют конфигурацию блокчейна и прикладных сервисов, новую базу данных. После отработки скриптов остается только настроить уже работающий узел под конкретного клиента.
За первые три недели к платформе подключили 60 банков. Система успешно эксплуатируется уже больше года, в ней работают два приложения: выдача беспроцентных кредитов и выдача льготных кредитов.