SendAll / SendAllMap(OS 4.5、CE 4.5)の概要

 

この記事ではCorda OS 4.5及びCorda Enterprise 4.5で実装された

SendAll / SendAllMapについて記載します。

 

 

Corda OS 4.5及びCorda Enterprise 4.5以前では、sendAPIを各カウンターパーティに対して1回ずつ使用することで、Flowを複数のカウンターパーティに送信していました。

Corda OS 4.5及びCorda Enterprise 4.5で実装されたSendAll / SendAllMapを使用することで、APIの一度の使用で複数の取引相手にメッセージを送信できる様になり、以前に比べ優れたパフォーマンスで実現できる様になりました。 

 

概要

Cordaのネットワークは、カウンターパーティ間の通信にポイントツーポイントのメッセージングを使用します。 これは、Node間でメッセージを渡すことによって行われ、各Nodeは、基本的に、他の単一のNodeからのメッセージに応答するように登録されたFlowをもっています。

Flowの概念に詳しくない場合は、Cordaの公式ドキュメントを参照してください。 here

Corda OS 4.4とCorda Enterprise 4.4までは、ノードは、sendAPIを相手毎に複数回呼び出すことによってのみ、複数の相手にメッセージを送信できました。

Corda OS 4.5とCorda Enterprise 4.5では、複数のNodeにメッセージをより効率的に送信するために、2つの便利なAPI、 sendAllsendAllMap導入されました。

 

 

背景

次の図は、標準のsendAPIが実際にどのように機能するかを示しています。

1send_normal.png

 

この例では、Node1Node2及びNode3との2つのセッションを開始し、send APIを2回使用して、それらのNodeにメッセージを送信します。 以下のコード例は上記図と同じことを示しています。

2code.png

 

 

 上手くいきますが...

上記の例は機能しますが、多くのNodeに送信する必要があるメッセージの場合、パフォーマンスの点で最適ではありません。 Cordaのすべての関数と同様に、 sendAPIはSuspendable です。つまり、FLowがブロッキング状態になると、それらの関数はディスクにシリアル化されます。

このアプローチの利点は、ノードが一度にアクティブな多くのFlowを処理できることです。これは、ノードの再起動やアップグレードまで、数日続くこともあります。 

欠点は、多くの一時停止により、多くのシリアル化されたオブジェクトがディスクに作成されるため

I / Oが多くなることです。

Flowフレームワークの内部について詳しく知りたい場合は、
Cordaの公式ドキュメントを参照してください。here.

 

 

より効率的なソリューション

Corda 4.5では、複数のセッションにメッセージを一度に送信できる2つの新しいAPI  sendAllsendAllMapが導入されています 。

https://docs.corda.net/docs/corda-os/4.5/release-notes.html#new-flow-apis

新しいAPIで同時に処理できるセッション数の制限はありませんが
特にメッセージサイズが大きい場合は、常にメモリ使用量に注意してください。

 

 

SendAll

以下の図は、それがどのように機能するかを示しています。

3Untitled.png

 

Node1Node2Node3の両方に同じメッセージを送信します。 Node1は両方のカウンターパーティからの応答を待って中断されたままです。 次の例は、それをコードで示しています。

4sendAll_code.png

 

SendAllMap

以下のスキーマは、それがどのように機能するかを示しています。

 

5Untitled.png

 

Node1Node2Node3に異なるメッセージを送信します。 sendAllと同じように、ここでもNode1は両方のカウンターパーティからの応答を待って中断されたままです。

次の例は、それをコードで示しています。

6Untitled.png

 

エラー処理

カウンターパーティのいずれかがフロー中に例外を発生させた場合、それらは receiveAllによってキャッチされ、通常どおりFlow Hospitalによって処理されます。 これに関しては何も変更されていないため、お客様はフローの変更について心配する必要はありません。

Cordaの公式ドキュメントでFlow Hospitalの詳細をご覧ください。here

 

Corda Enterprise 4.5のパフォーマンスの向上

sendAllMapAPIが次のエンタープライズサブフローで使用されるようになりました。 より良い並列化の利点が、Corda Enterpriseのトランザクション管理全体にまで拡張されます。

-EnterpriseFinalityFlow、トランザクションのファイナライズに使用されるエンタープライズバージョンのサブフロー。

-EnterpriseCollectSignaturesFlow、他の必要な署名者の署名を自動的に収集するために使用されるエンタープライズバージョンのサブフロー。

 

公式ドキュメント:

https://docs.corda.net/docs/corda-os/4.5/api-flows.html#

https://docs.corda.net/docs/corda-os/4.5/api-flows.html#common-flow-tasks

https://docs.corda.net/docs/corda-enterprise/4.5/cordapps/api-flows.html#

https://docs.corda.net/docs/corda-enterprise/4.5/cordapps/api-flows.html#communication-between-parties

 

Created by Yoshino

Last update 2020/8/17

 

 

 

 

 

 

 

 

 

 

 

この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています