データ パイプラインで公開トラフィックが急増することがあります。トラフィックの急増に備えていないと、サブスクライバーに対して過剰な負荷が生じる可能性があります。トラフィックの急増を回避する簡単な方法は、Pub/Sub サブスクライバー リソースを動的に増やして、より多くのメッセージを処理することです。ただし、この方法では費用が増加したり、すぐに機能しなかったりする可能性があります。たとえば、多くの VM が必要になる場合があります。
サブスクライバー側のフロー制御により、サブスクライバーはメッセージの取り込み速度を調整できます。これによってフロー制御は、コストを増加させることなく、またはサブスクライバーがスケールアップされるまで、トラフィックの急増に対処します。
フロー制御は、Pub/Sub の高レベル クライアント ライブラリで使用できる機能です。低レベル クライアント ライブラリを使用している場合は、独自のフロー制御プログラミングを実装することもできます。
フロー制御が必要な場合、メッセージがパブリッシュされる速度が、消費される速度を超えています。メッセージ量の急増が一時的なものではなく、永続的な状態である場合は、サブスクライバー クライアントのインスタンス数を増やすことを検討してください。
フロー制御の構成
フロー制御では、未処理のリクエストに割り当てる最大バイト数と、許可される未処理メッセージの最大数を構成できます。これらの上限は、クライアント マシンのスループット容量に応じて設定します。
フロー制御変数のデフォルト値と変数の名前は、クライアント ライブラリによって異なる場合があります。たとえば、Java クライアント ライブラリでは、次の変数でフロー制御を構成します。
setMaxOutstandingElementCount()。Pub/Sub が確認応答または否定応答を受信しなかったメッセージの最大数を定義します。
setMaxOutstandRequestBytes()。Pub/Sub が確認応答または否定応答を受信しなかったメッセージの最大サイズを定義します。
setMaxOutstandingElementCount()
または setMaxOutstandingRequestBytes()
の上限を超えると、サブスクライバー クライアントは、それ以上メッセージをプルしません。この動作は、すでにプルされているメッセージに対して確認応答が行われるか、否定応答が行われるまで続きます。これにより、より多くのサブスクライバーを実行するための費用とスループットを調整できます。
フロー制御のコードサンプル
サブスクライバー クライアントがメッセージを受信する速度を制御するには、サブスクライバーのフロー制御機能を使用します。以下に、フロー制御機能のサンプルを示します。
C++
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の C++ の設定手順を実施してください。詳細については、Pub/Sub C++ API リファレンス ドキュメントをご覧ください。
C#
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の C# の設定手順を実施してください。詳細については、Pub/Sub C# API リファレンス ドキュメントをご覧ください。
Go
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Go の設定手順を実施してください。詳細については、Pub/Sub Go API リファレンス ドキュメントをご覧ください。
Java
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Java の設定手順を実施してください。詳細については、Pub/Sub Java API リファレンス ドキュメントをご覧ください。
Node.js
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Node.js の設定手順を実施してください。詳細については、Pub/Sub Node.js API リファレンス ドキュメントをご覧ください。
Node.js
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Node.js の設定手順を実施してください。詳細については、Pub/Sub Node.js API リファレンス ドキュメントをご覧ください。
Python
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Python の設定手順を実施してください。詳細については、Pub/Sub Python API リファレンス ドキュメントをご覧ください。
Ruby
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Ruby の設定手順を実施してください。詳細については、Pub/Sub Ruby API リファレンス ドキュメントをご覧ください。
次のステップ
サブスクリプションに構成できる他の配信オプションについて確認します。