9

SignalR の高周波スケーリング ソリューションを探しています。Azure EventHub でそれを行うことができるかどうか疑問に思っています。EventHub を SignalR メッセージのバックプレーンとして使用すると、ボトルネックになりますか?

このページをチェックしましたが、かなり新しいので EventHub については何もありません。

4

1 に答える 1

4

SignalR の正確な仕様について話すことはできません。ただし、原則として EventHubs をバックプレーンに使用できますが、制限に注意する必要があります。

SignalR のバックプレーン スケールアウト パターンは、すべてのサーバーがすべてのメッセージにアクセスし、すべてのメッセージを推定的に処理することを前提としています。これにより、コモディティ ハードウェアまたはクラウドで単一のバックプレーンが実行できることのかなり明確な制限が提供されます。典型的なクラウドでは、100MB/秒のデータ スループット (1 Gb/秒の NIC に適したラウンド数)、コモディティ ハードウェア (および Azure の HPC マシン) の上限である 1000MB/秒 (10 ギガビット/秒の NIC) を維持できる可能性があります。

では、問題は、Azure EventHubs を使用すると、スループットに関するこのアーキテクチャ上の制限に対応できるかということです。

それに対する答えは単にイエスです。100 または 1000 のパーティションで、2 台のサーバーに対して十分な書き込みスループットと十分な読み取り容量が得られます。

次の質問は、サーバーごとにバックプレーンで 100MB/秒の読み取りのみが必要な場合、データを読み取ることができるサーバーの数 (つまり、データ サイズがサーバーの数によって増加しない 100MB/秒のストック ティックをブロードキャストしている場合) です。 )。

ここでの答えは、好きなだけですが、いくつかのトリックがあります。

EventHubs は、データ ストリームを分割することでスケーリングします。各パーティションの最大読み取りスループットは 2MB/秒で、すべてのリーダーで共有されます。ただし、パーティションの数を増やして分割を補うことができます (32 を超える数を追加するには、Microsoft に相談する必要があります)。EventHubs (Kafka や Kinesis など) の設計上の前提は、消費がマシン間で分割されるため、前述のバックプレーンの制限を回避することです。ストリームを読み取るために連携しているコンシューマーはコンシューマー グループです (Azure では、直接読み取りを行う場合でも名前付き CG が必要なようです)。このバックプレーン モデルには、論理的なコンシューマー グループが存在しないため、問題はデータを読み取る方法です。

最も単純な解決策は、各サーバーが固定名を持つ独自のコンシューマ グループである高レベルの自動平衡イベント プロセッサ ホストを使用することです。各コンシューマー グループにサーバーが 1 つだけある場合、各サーバーはすべてのパーティションを受け取ります (10 台のサーバーで 500 は 100MB/秒に達するため、別名 $11,000/月 + $0.028/100 万イベント)。

このアプローチには 1 つの重要な制限があります。それは、イベント ハブごとに 20 のコンシューマー グループに制限されることです。したがって、Event Hubs をチェーン化するか、このアプローチでツリーを作成して、任意の数値を取得できます。

もう 1 つのオプションは、特定のパーティションに接続する直接クライアントを使用することです。コンシューマー グループ内の 1 つのパーティションに 5 つのリーダーを含めることができるため、ハブを連鎖させる必要性が 5 分の 1 に減り、イベントごとのコストが 5 分の 1 に削減されます (スループット ユニットの要件は減りません)。

要約すると、バックプレーンがボトルネックになる前に、バックプレーンがボトルネックになるべきではありません。ただし、トラフィックが 100MB/秒を超えると予想される場合は、バックプレーンに何かを構築しないでください。

レイテンシについては話しませんでした。自分でテストする必要がありますが、クラウドで HFT を実行していない可能性があり、リアルタイム ゲームが通常インスタンスにあるのには理由があります。

于 2015-05-23T22:28:27.037 に答える