Сегодня рассмотрим, можно ли построить на Apache Kafka быстрый и надежный блокчейн для криптовалюты, NFT или других проектов, где нужны технологии распределенного реестра. Что общего у топика Apache Kafka с blockchain-цепочкой, чем они отличаются, возможно ли совместить их и для каких случаях. А в качестве примеров перечислим несколько реальных проектов.
Еще раз о том, что такое блокчейн и зачем это нужно
Блокчейн (blockchain) представляет собой реализацию технологии распределенного реестра (Distributed Ledger Technology, DLT) – децентрализованную базу данных или распределенный журнал записей, управляемый разными участниками без центрального регулятора. Эта общая база данных или журнал записей используются совместно с помощью блоков, образующих цепочку. Таким образом, блокчейн — это растущий список записей (блоков), связанных с помощью криптографии. Каждый блок содержит криптографический хэш предыдущего блока, отметку времени и данные транзакции. Хеш как специальный тип криптографической подписи гарантирует, что зашифрованная информация не подвергалась изменениям и что ею нельзя манипулировать.
Блокчейн как цепочка хэшированных блоков может быть общедоступным, как криптовалюта Bitcoin, или контролироваться группой компаний (консорциумом) с помощью различных алгоритмов консенсуса типа Proof-of-Work (POW), Proof-of-Stake (POS) или системы голосования.
Блокчейн использует глобальный консенсус для всех узлов. А DLT может создавать консенсус без необходимости проверки всей цепочки блоков. Таким образом, блокчейн может выступать в качестве технологии безопасной и защищенной от несанкционированного доступа обработки данных с помощью в следующих отраслях:
- управление цепочками поставок (Supply Chain Management, SCM) в производстве, транспорте, логистике и розничной торговле, включая расчеты по транзакциям, отслеживание социальной ответственности, точную информацию о затратах, доставке и местонахождении товаров, автоматизированные закупки и планирование с использованием ERP- и CRM-систем, обеспечение соблюдения партнерских договоров, безопасность пищевых продуктов.
- Здравоохранение — управление данными пациентов (особенно контроль доступа), управление и использование данных академических исследований, предотвращение нарушений соответствия, сокращение человеческих ошибок, сквозная актуальная информация о пациентах, безопасное управление идентификацией.
- телекоммуникации — блокчейн-решение для заключения соглашений о скидках на роуминг с разными операторами связи;
- финансовые услуги — мгновенные международные платежи с помощью криптовалют с отслеживанием всей цепочки транзакций и мониторингом происхождения данных.
Некоторые примеры из этих и других доменных областей мы рассматривали здесь.
Однако, в реальном мире применение блокчейн-технологий ограничено следующими проблемами:
- техническая сложность провоцирует высокие затраты на реализацию проекта;
- организационная сложность — развертывание blockchain-цепи в нескольких организациях требует огромных усилий, в том числе соблюдения правовых норм;
- низкая скорость транзакций пока не позволяет применять эту технологию в финансовой торговле, SCM, Internet of Things и многих других сценариях, где нужна обработка данных в реальном времени;
- высокое потребление энергии для работы механизма консенсуса;
- сложности в обеспечении безопасности, включая трудности защиты от несанкционированного доступа развертывание в разных организациях и неопределенность права собственности на данные;
- высокая стоимость жизненного цикла из-за сложной распределенной инфраструктуры.
Поэтому следует использовать блокчейн только тогда, когда это действительно имеет смысл, добавляет ценность бизнесу и/или является единственной возможной технологией реализации идеи. Можно использовать для этого Apache Kafka, рассмотрим далее.
Что общего между Apache Kafka и blockchain-системой?
Прежде всего подчеркнем, что Apache Kafka не является блокчейном, а представляет собой распределенную надежную платформу потоковой обработки событий с возможностью развертывания stateful-приложений в гибридных архитектурах без простоев и потери данных. Именно высокая доступность обеспечивает потенциал применения Kafka в блокчейн-проектах. Не будучи блокчейном, Kafka обеспечивает множество характеристик, необходимых для реальных blockchain-проектов корпоративного уровня:
- обработка событий в режиме реального времени;
- высокая пропускная способность;
- децентрализованный распределенный и неизменяемый журнал записей;
- репликация;
- высокая доступность;
- разделение приложений/клиентов;
- управление доступом к данным на основе ролей.
Однако, по умолчанию в Kafka отсутствуют три основных требования для настоящих блокчейн-проектов:
- защита от несанкционированного доступа;
- шифрование полезной нагрузки;
- развертывание в различных независимых организациях.
Важность этих отсутствующих в Kafka элементов будет ответом на вопрос, следует ли выбирать для реализации блокчейна Kafka или необходимо сочетать эту платформу с технологией реального распределенного реестра типа Hyperledger, Ethereum, Ripple, Libra, IOTA и пр. Последнее может пригодится в следующих сценариях:
- интеграция между технологиями блокчейна/DLT и остальной частью предприятия, включая CRM, аналитику больших данных и любые другие настраиваемые бизнес-приложения;
- надежная масштабируемая обработка данных в режиме реального времени с помощью Kafka для внутренних сценариев использования;
- блокчейн для безопасной связи между различными независимыми организациями.
Из-за вышеотмеченных ограничений технологии блокчейна, ее следует использовать, только для обеспечения сотрудничества разных ненадежных сторон. На практике для большинства корпоративных проектов блокчейн является ненужной дополнительной сложностью. В 95% случаев достаточно распределенного журнала фиксации, т.е. топика Kafka или защищенного от несанкционированного доступа распределенного реестра, что тоже может быть реализовано на базе этой Big Data платформы.
Тем не менее, в мире многие компании используют Kafka на своих платформах для торговли криптовалютами и токенами. Например, проекты Nash, Hyperledger Fabric, KafkaBlockchain. Также Kafka используется в некоторых проектах Web3 IoT, таких как Helium, и более простых закрытых DLT-реестрах типа R3 Corda. Однако, Kafka НЕ является блокчейном на этих платформах, а играет роль средства соединения блокчейнов с другими приложениями, такими как CRM, озеро или хранилище данных и пр.
В некоторых расширенных случаях использования Kafka используется для реализации побочной или автономной платформы, поскольку исходный блокчейн недостаточно хорошо масштабируется. Но большинство современных блокчейн-решений не могут масштабироваться даже близко к рабочим нагрузкам, которые Kafka обрабатывает в режиме реального времени. Чтобы избежать простоев, защитить инфраструктуру и сделать данные блокчейна доступными, Kafka предоставляет безагентный и масштабируемый способ представления этих данных вовлеченным сторонам. Платформа гарантирует, что соответствующие данные будут доступны нужным командам до того, как узел будет потерян.
В этом случае разработчикам распределенных приложений может быть полезна JAVA-библиотека KafkaBlockchain для защиты от несанкционированного доступа с использованием Kafka. Сообщения дополнительно шифруются и последовательно хэшируются. Методы библиотеки вызываются в коде производителя сообщений приложения Kafka для переноса сообщений и вызываются в коде потребителя приложения для распаковки сообщений. Предоставляется пример служебной программы, которая использует и проверяет тему, связанную с цепочкой блоков.
Поскольку блокчейны должны быть строго последовательно упорядочены, blockchain-топики Kafka должны либо иметь один раздел, либо потребители для каждого раздела должны взаимодействовать для упорядочивания записей. Если имеется несколько продюсеров, они должны сотрудничать, чтобы последовательно добавлять записи в блокчейн Kafka.
Kafka уже реализует контрольные суммы для потоков сообщений для обнаружения потери данных, предотвратить атаки на которые помогают криптографические хэши. Например, стандартный алгоритм SHA-256 очень трудно подделать, что позволяет использовать его для доказательства несанкционированного доступа, даже с учетом чуть больших затрат на вычисления, чем контрольные суммы.
Для управления блокчейнами Kafka примеры программ сохраняют хэш SHA-256 первого (генезисного) сообщения для каждого blockchain-топика в ZooKeeper. В производствственной среде можно применять специализированные средства хранения секретов, например, Vault.
Проект KafkaBlockchain использует криптобиблиотеку Bouncy Castle. Apache Maven требуется для создания этой библиотеки и запуска примеров быстрого запуска. Эта библиотека написана с использованием Java 10. В JAR-файле зависимости скрыты от любого проекта Maven, который включает KafkaBlockchain в качестве зависимости. Также в проект включены служебные классы: ByteUtils, KafkaAccess, ZooKeeperAccess, SHA256Hash и Serialization.
Освойте администрирование и использование Apache Kafka для потоковой аналитики больших данных вы узнаете на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков больших данных в Москве:
Источники