Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Cloud Run における非同期処理方式 - 2/22 GDG Tokyo LT資料 -

Makoto.M
February 22, 2024
27

Cloud Run における非同期処理方式 - 2/22 GDG Tokyo LT資料 -

Makoto.M

February 22, 2024
Tweet

Transcript

  1. 自己紹介 • 仕事内容 ◦ Google Cloud を中心としたコンサル、インテグレーションに従事 ◦ 主にコンテナ領域を専門としながらアプリ、インフラ、マネジメント全般を 担当

    • その他 ◦ リモートでの資格試験では自宅の浴室で受験 ◦ Google Cloud Champion Innovators (Modern Architecture, Serverless App Development) ◦ Google Cloud Partner Top Engineer 2024 間瀬 真 (@Makocchan_Re) ☜最近浴室受験で取得
  2. Cloud Run はいいぞ • サーバーレスなコンテナ実行環境 • HTTP等のリクエストをリッスンする Service タイプと 時刻やイベントドリブン

    で起動する Job タイプがある。 • コンソールからデプロイする際には、最低 でもコンテナイメージと認証要否のたった 2 つの項目を入力するだけ!! • GKE 使う前にまずは Cloud Run じゃダメ なのか考えるようにしています。
  3. とあるサービスでのアーキテクチャ • 外部から入力されるデータをバックエンド上でリアルタイムにMLモデルを使って分類 しDWHへ蓄積する。 • Cloud Run の アプリ は

    Pub/Sub を介して非同期的に処理を実行する。 ① データアップロードと前処理 ②ファイルアップロード ③ファイルイベント ④ファイルイベント駆動での リクエスト送信 (Push) ⑤データ分類処理 ⑥分類結果の蓄積 Cloud Run (前処理アプリ) Cloud Storage (オブジェクトストレージ ) Pub /Sub (メッセージング) Cloud Run (分類アプリ) BigQuery (DWH) Service Service
  4. 反省点と見直し方針 • 反省点 ◦ 分類処理にそれなりに時間がかかることを予測できていなかった。 • 前提 ◦ 分類処理で使うモデルは今後もチューニングが発生する。 ▪

    つまり分類処理にかかる時間は変動することに ◦ ユーザーがアップロードするデータの仕様( fps, 動画の長さ)も変化する。 ▪ サービス仕様として縛ることが困難 • 見直し方針 ◦ データや分類処理に寄らず一定の負荷量で処理できるようにしたい。
  5. 見直し後のアーキテクチャ • Cloud Run を Service から Job へ変更し、 Pub/Sub

    は Push から Pull 方式へ ◦ Pull によって大量データの処理がにおいても負荷のコントロールができるように • Cloud Workflows によって Cloud Run Job のオーケストレーションを実施 ① データアップロード Cloud Run (前処理アプリ) Cloud Run (分類アプリ) Eventarc Workflows ②ワークロード起動 ③前処理 & ファイルアップロード ④ Pull & データ分類処理 Job Job
  6. 当時採用してないけど、採用したかった案 • Cloud Tasks による流量制御の選択肢があったが、該当機能はプレビューだったので見送り • 採用できれば構成としてはかなりシンプルになる。 • Cloud Run

    Jobs は 24h の時間制限があり常時起動できないので、 Pull 型の処理と相性が良くないと感 じている。 イベント駆動での リクエスト送信 (Push) Pub /Sub (一部割愛) Cloud Tasks リクエストの流量制御 + Buffer Task メソッドによるリ クエストルーティング Buffer Task メソッドによって Push 先のエンドポイントとして指 定可能になるが、現時点でもプレビュー Service
  7. まとめ • Cloud Run と Pub/Sub Push を組み合わせた非同期処理はシンプルで実装しやす いが、流量制御が効かないことに注意 •

    代替策として Cloud Run Jobs による処理が候補になるが、起動時間制限(~24h)が あるのでジョブのライフサイクルは考えなければいけない。 • Cloud Tasks の Buffer Task メソッド早く GA してほしい。