背圧機能を備えたアクターベースのシステムを実装しようとしています。要件として、マスタープロセスはJSON形式のストリーミングデータを受け取ります。ただし、各JSONイベントには、{ip: '123.43.12.1'、国: 'US'、...など}のようなフィールドがあります。 JSONの構造はあらかじめわかっています。ファンアウト機能を備えたリアクティブストリームアクターシステムの設計方法
ここで、JSON構造を何らかの形で(キー、値)のペアに平坦化する必要があります。たとえば、上記のデータは(ip、freq)、(country、freq)に展開することができます。ここで、freqはIPストリーム(123.43.12.1など)がデータストリームに現れる時間の数です。
非常に自然なやり方は、さらに評価するために、各(キー、値)のペアを対応する子/リモートアクタに転送することです。たとえば、( '123.43.12.1'、1)がIP-Actorに送信されます。 ( 'US'、1)はCountry-Actorなどに送信されます。
システム全体が背圧になっていることを確認したいと思います。 IP-ActorとCountry-Actorの両方が平坦化されたペア( '123.43.12.1'、 '123.43.12.1')を処理した場合、イベント{ip: '123.43.12.1'、国: 'US'}は処理されたものとみなされるので、 12.1 '、1)、(' US '、1)。各アクタの処理速度が異なる場合があります(たとえば、IP-ActorはCountry-Actorよりもはるかに高速です)。その場合、ストリームを受け取ったマスタープロセスが、要求信号があるまで待機/ブロックします(両方のアクターがメールボックス内の既存データの処理を完了したときに発生します)。そうしないと、あるアクタはメールボックスにメッセージがいっぱいになるかもしれませんが(Country-Actor - slow one)、他のアクタメールボックスが空であるため(IP-Actor - 速いもの)、メッセージは引き続き入ります。
react-stream仕様でこのような機能が提供されている場合は、誰でもお勧めしますか?そうでなければ、最も効率的な方法で機能を達成するためにとにかくあります。
ありがとうございました。