September 2021


blog.udartsev.ru

Hyperledger Fabric - Anchor peer

Hyperledger Fabric - Anchor peer

Anchor peer это пир, который используется для обнаружения всех узлов, принадлежащих организациям в канале. Anchor peer должен быть доступен для всех пиров в канале.

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

Например, предположим, что у нас есть три организации - orgA, orgB, orgC - в канале и один anchor peer в организации - peer0.orgC - определенный для организации C. Когда peer1.orgA из организации A связывается с peer0.orgC, он расскажет peer0.orgC о peer0.orgA. И когда позже peer1.orgB свяжется с peer0.orgC, peer0.orgC сообщит peer1.orgB о peer0.orgA. С этого момента организации orgA и orgB начнут напрямую обмениваться информацией без какой-либо помощи со стороны peer0.orgC.

Да в сети может быть один anchor peer, но рекомендуется использовать отдельные anchor peer для каждой организации.

Внешние и внутренние конечные точки

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

Когда пир стартует, он использует peer.gossip.bootstrap в своем core.yaml для обмена информацией о членстве, делясь информацией обо всех доступных пирах в пределах своей собственной организации. Т.е использует peer.gossip.bootstrap для сплетен внутри своей организации.

Также можно использовать CORE_PEER_GOSSIP_ENDPOINT в docker-compose файле:

peer1:
  - CORE_PEER_GOSSIP_BOOTSTRAP=peer2:7051
peer2:
  - CORE_PEER_GOSSIP_BOOTSTRAP=peer1:7051

Для того, чтобы пиры в одной организации знали о существовании пиров в другой организации нужно использовать CORE_PEER_GOSSIP_EXTERNALENDPOINT:

peer1:
  - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1:7051
peer2:
  - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer2:7051