原文リンク(2023-05-_1)
Googleは最近、Cloud Tasksにキューレベルのルーティング設定とBufferTask APIの 2つの新機能をパブリックプレビューで追加した。この2つの新機能を組み合わせることで、Tasksクライアントライブラリを必要とせず、HTTPタスクの作成とキューへの追加を可能にする。
Cloud Tasksは、Google Cloud Platform上のフルマネージドサービスであり、App Engineや任意のHTTPエンドポイントに対する多くのタスクの実行、ディスパッチ、非同期配信を管理する。例えば、開発者はこのサービスを利用して、HTTPリクエストなどのスタンドアローンタスクをキューに追加し、App Engineアプリケーションや任意のHTTPエンドポイントから非同期で実行されるまでキューに留まらせる。さらに、タスクの重複排除、配信保証、レートやリトライのコントロールなど、回復力を高める機能も備えている。
ただし、HTTPタスクには注意点があり、Cloud Tasksのクライアントライブラリは、HTTPリクエストをタスクにラップしてキューに追加する必要がある。このため、呼び出し側とCloud Tasksクライアント・ライブラリとの間に依存関係が生じる。Googleのデベロッパー アドボケイトであるMete Atamel氏は、Googleブログの投稿でこう書いている。
タスクを作成する負担は、本当は呼び出し元よりもターゲットサービスにあるべきで、ターゲットサービスはキューから利益を得るものだからだ。新しいキューレベルのルーティング設定とBufferTask APIはこの問題に対処し、より簡単にタスクを作成する方法を提供する。
キューレベルのタスクルーティング設定機能により、開発者は、すべての新規タスクと保留タスクについて、キュー全体のHTTPタスクルーティングを変更できる。これにより、HTTPターゲットをタスクレベルで設定する必要がなくなるため、タスクの作成がより管理しやすくなる。さらに、コントロールはサービスプロバイダーに移り、キュー内のすべてのタスクの目的を定義するのに適している。例えば、オリジナルのバックエンドが利用できない場合、サービスプロバイダーはトラフィックを別のバックエンドにリダイレクトできる。
出典: https://cloud.google.com/blog/products/serverless/buffer-http-requests-with-cloud-tasks
BufferTask APIはCloud Tasksのもう一つの機能で、開発者はHTTP URL、ヘッダー、権限などのタスク仕様を入力せずにHTTPタスクを生成できる。その代わり、標準的なHTTPリクエストをBuffer APIに送り、Buffer APIはリクエストをキューレベルのルーティング設定内のデフォルト設定を利用したHTTPタスクにパッケージする。
キューがBufferTask APIを利用するためには、Target URIの設定が必要である。これは、BufferTask APIを利用する前提として、キューレベルのルーティング設定機能を有効にする必要があることを意味する。
var BufferTaskApiUrl = $"https://cloudtasks.googleapis.com/v2beta3/projects/{ProjectId}/locations/{Location}/queues/{Queue}/tasks:buffer"; using (var client = new HttpClient()) { client.DefaultRequestHeaders.Add("Authorization", $"Bearer {AccessToken}"); var response = await client.GetAsync(BufferTaskApiUrl); var content = await response.Content.ReadAsStringAsync(); Console.WriteLine($"Response: {content}"); }
これらの機能を使う開発者にどんなメリットがあるのか、InfoQが尋ねたところ、Atmel氏は次のように答えている。
バッファリングは、トラフィックや負荷の急増からサービスを保護したい場合に有効だ。例えば、サービスが1秒間に5つのリクエストしか処理できない場合、1秒間に100のリクエストを送り、サービスに負荷をかけても意味はない。その代わりに、サービスの前にキューを追加し、サービスが許容できる速度でキューからリクエストを排出できる。
さらに、こうも付け加えた。
これらの機能により、サービスの呼び出し側はもうタスクを作る必要はなく、通常のHTTPリクエストを送るだけで、あとはCloud Tasksのキューがキューイング、ドレイン、レートリミッティングで処理する。
最後に、Cloud Tasksの価格詳細については、価格ページで確認できる。さらに、新機能の詳細とガイダンスは、GitHubのCloud Tasks samples repoと hands-on code labで入手可能である。