データ パイプラインで公開トラフィックが急増することがあります。準備ができていない限り、トラフィックの急増によりサブスクライバーが圧倒される可能性があります。トラフィックの急増を防ぐシンプルな解決策は、Pub/Sub サブスクライバー リソースを動的に増やして、より多くのメッセージを処理することです。ただし、このソリューションでは費用が増えるか、すぐに機能しない可能性があります。たとえば、多数の VM が必要になることがあります。
サブスクライバー側のフロー制御により、サブスクライバーはメッセージの取り込み速度を制御できます。これによってフロー制御は、コストを増加させることなく、またはサブスクライバーがスケールアップされるまで、トラフィックの急増に対処します。
フロー制御は、Pub/Sub の高レベル クライアント ライブラリで使用できます。低レベル クライアント ライブラリを使用している場合は、独自のフロー制御プログラミングを実装することもできます。
フロー制御が必要な場合、メッセージがパブリッシュされる速度が、消費される速度を超えています。メッセージ量の急増が一時的なものではなく、永続的な状態である場合は、サブスクライバー クライアントのインスタンス数を増やすことを検討してください。
フロー制御の構成
フロー制御では、未処理のリクエストに割り当てる最大バイト数と、許可される未処理メッセージの最大数を構成できます。これらの上限は、クライアント マシンのスループット容量に応じて設定します。
フロー制御変数のデフォルト値と変数名は、クライアント ライブラリによって異なる場合があります。たとえば、Java クライアント ライブラリでは、次の変数によりフロー制御が構成されます。
setMaxOutstandElementCount()。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 のリファレンス ドキュメントをご覧ください。
次のステップ
サブスクリプションに構成できるその他の配信オプションについて確認します。