分散処理用のシステムを構築し、ネットワーク I/O スタックに netty (4.0) を使用したいと考えています。
次の状況: プロデューサー タスク A とコンシューマー タスク B があります。タスク A は 64K のチャンクでデータを生成し、それをタスク B に送信します。タスク B は特定の状況で計算集約的になり、タスク A によって生成されたよりも遅く 64K ブロックを消費する可能性があります。 . タスク A と B は tcp チャネルで接続されています。
このアプローチについて考えてみます。タスク A がチャンクを生成し、それをローカル キューに入れます。tcp チャネルが空いていて、次の 64K をチャネルに書き込むことができる場合、キューからチャンクが自動的に取得されます (netty はそのようなシグナル/イベントを提供しますか?)。タスク A のキューが格納されたチャンクの固定制限を超えた場合、タスク B がチャンクを消費するまでタスク A をブロックします。本質的には、タスク A の「受信者がトリガーする書き込み」で、TCP チャネルを輻輳させることなく完全に利用できるようにする必要があります。この設計の目標は、データ スループットを最大にすることです。
現在、いくつかの質問があります:)
それは最大のスループットを実現するための適切な設計ですか? TCP チャネルを十分に活用するためのより良い設計は何でしょうか?
netty はこれらのシナリオに適したフレームワークですか? (私は netty にはかなり慣れていませんが、フレームワークの明確な抽象化/設計が本当に好きです!)
そんなデザインがnettyで実現できるのか?=> (受信側サイトからそのような信号/イベントが得られますか?)
最大スループットを可能にする netty を使用した最適な設計はどれですか?
より適切な他のフレームワークはありますか?
どんなアイデアやメモでも大歓迎です!!!
よろしくお願いします!!! トビ