Как может быть цепной код, выполняемый параллельно? - PullRequest
0 голосов
/ 27 июня 2018

Я изучаю Hyperledger Fabric около 1 года.

Но я до сих пор не могу сказать, как работает цепной код, и как с ним обстоят дела, особенно с точки зрения его реализации и процесса.

Вот как я понимаю цепной код ниже.

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

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

В таком случае я хотел бы спросить вас, как эти поддерживающие одноранговые узлы могут выполнять или получать доступ к контейнеру цепного кода параллельно? Я слышал, что «выполнение цепного кода» означает моделирование логического вычисления цепного кода. Но я не могу этого получить.

Другими словами, у меня вопрос: как они могут выполнить или получить к нему доступ одновременно? У них есть копии этого цепного кода? Как коллеги знают логику цепного кода? Не могли бы вы исправить меня или объяснить процесс кодировки, если я ошибаюсь?

Пожалуйста, скажите мне, если у вас есть идеи по моему вопросу. Я с нетерпением жду вашего ответа!

1 Ответ

0 голосов
/ 27 июня 2018

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

Позже, когда одноранговый узел получает запрос на вызов функции в коде цепи (Init () или Invoke (), когда Init () запускается при создании экземпляра), узел проверяет, запущен ли уже код цепи, и если нет, то это:

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

Бинарный код цепного кода:

  • Подключается к узлу через gRPC и регистрируется в качестве имени, с которым он установлен.
  • Запускает бесконечный цикл, в котором он ожидает команды для имитации транзакций от партнера.

Когда партнер получает предложение от клиента, он:

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

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

Если логика цепочечного кода содержит такие операции доступа к данным, как GetState или PutState, она отправляет запрос одноранговому узлу в тот же поток gRPC, к которому он подключен, а затем одноранговый узел выполняет следующие действия:

  • Если операция с данными является операцией чтения, она добавляет к набору чтения-записи ключ и версию, считанную из ключа, и отправляет обратно ключ и значение в контейнер-прокладку цепного кода через поток gRPC.
  • Если операция с данными является операцией записи, она добавляет к набору для чтения-записи ключ, значение и версию, а затем отправляет обратно «OK» в прокладку кода цепи (*).

(*) Лично я считаю, что этот шаг не нужен ... он просто продлевает время выполнения

После того, как цепная кодовая цепочка закончила вычислять транзакцию, она отправляет результат (т. Е. «ОК») партнеру вместе с маркером, который обозначает, что транзакция завершила выполнение.

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

In that case, I'd like to ask you how those endorsing peers can execute or access the chaincode container in parallel?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...