Как пройти всех заказчиков при создании канала (плота) - PullRequest
0 голосов
/ 04 мая 2020

У меня есть система из 3-х организаций с 6-ю одноранговыми узлами с узлом SDK и 5-ю исполнителями заказов. Плот работает нормально, пытались убить лидеров и проходят выборы. SDK также хорошо работает, может вызывать транзакции. Но проблема, которая меня беспокоит, заключается в том, что при запуске сети система заказов по умолчанию используется первым заказчиком, например, orderer1.example.com, и теперь, если я убью этого первого заказчика, сеть выйдет из строя, вызов транзакции завершится неудачно, пока плот выбирает нового лидера. . Когда я пытаюсь вызвать транзакцию, она показывает, что соединение не удалось, невозможно подключиться ко всем адресам и служба недоступна.

Я вижу в разделе машинописного кода SDk способ передачи заказов, и там я написал al oop пройти во всех заказчиков и вышеуказанная проблема решена.

Есть ли способ решить эту проблему в реализации js?

1 Ответ

0 голосов
/ 05 мая 2020

Привет, @Anantha Padmanabhan

Это не имеет ничего общего с системой заказов, а raft - идеальный алгоритм распределенного консенсуса

В вашем случае, когда присутствуют 5 заказчиков, вы пытались убить одного и оставшиеся 4 начнут выборы лидера, если 5-й будет лидером и ваша сеть стабильна, не беспокойтесь.

Проблема находится на стороне вашего SDK в профиле подключения. Например:

  "channels": {
    "samchannel": {
      "orderers": [
        "sam-orderer1",
        "sam-orderer2",
        "sam-orderer3",
        "sam-orderer4",
        "sam-orderer5"
      ],
    ...

Если вы попытаетесь удалить sam-orderer1 Orderer, ваш SDK попытается отправить транзакцию на sam-orderer1 поскольку он находится в 0-м индексе массива

Тест: попробуйте удалить отличное от sam-orderer1, например sam-orderer3, и теперь попробуйте вызвать транзакцию, и она все равно будет работать

Сделайте этот тест и обновите мне статус теста

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

...