Функциональные возможности каналов

Аудитория: Администраторы каналов, администраторы узлов

Примечание: это концепция продвинутого уровня в Fabric, и ее понимания не требуется от начинающих пользователей или разработчиков. Однако, по мере развития каналов и сетей, понимание и управление функциональными возможностями каналов становится насущной необходимостью. Более того, чрезвычайно важно отличать изменение функциональных возможностей каналов от похожего, и даже часто с ним связанного, но отличного процесса - изменения узлов. Мы опишем это подробно в ходе изложения данного раздела.

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

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

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

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

Версии узлов и версии функциональных возможностей

Если вы уже знакомы с Hyperledger Fabric, то вы знаете обычный порядок версионирования: v1.1, v1.2.1, v2.0, и т.д. Эти номера относятся к версиям выпусков и соответствующим им версиям бинарного кода.

Функциональные возможности нумеруются так же. Им присваиваются номера - v1.1, v1.2, затем 2.0 и так далее. Но важно отметить некоторые отличия.

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

Группировка конфигураций функциональных возможностей

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

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

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

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

Для обзора полной картины действительных функциональных возможностей службы упорядочения, приложения и канала в текущих версиях, смотрите: образец файла configtx.yaml, в котором они содержатся списком в разделе "Функциональные возможности/Capabilities".

Более детальная информация о функциональных возможностях и о том, где они располагаются в конфигурации канала, см. как определить функциональные возможности.