grasys blog
grasysブログ

Webシステムのカイゼン(Cloud Tasks編)

〜随時データを処理する仕組みからバッチ処理へ〜
実行ボタン押した後の処理時間が長くてWebページのローディングが長いどうしよう😩🌀というときに見てください!

とある物語のあらすじ

今、あなたは文章ファイルの校正を自動化するプロジェクトに参加しています。
システムを構築出来たのはよかったものの、もっとたくさんのファイルを一度に自動化したいと言われたのでその通りシステムを改修しました。
しかし、今度はファイルを登録するたびに待ち時間発生するのが面倒!!文章ファイルをぽんぽん登録していきたい!!と言われて困ってしまいました。
自分が作ったプログラムが悪いのでしょうか…どうすれば…

現状のシステムはこのようなイメージです。
4つのファイルをプログラムにわたすと40秒かかっています。

1ファイル当たり10秒の処理時間が必要ということですね。
ということは10ファイル処理しようとすると1分40秒。
では、100ファイル処理しようと思うと16分40秒…

この場合だといくら最高のプログラムが作れたとしても結局ファイル数に応じて処理時間が長くなってしまうのでは根本的な解決にはならないでしょう。

Cloud Tasksとは

Cloud Tasks は、大量の分散タスクの実行、ディスパッチ、配布を管理できるフルマネージド サービスです。ユーザー リクエストの外部で作業を非同期で処理できます。タスクは App Engine または任意の HTTP エンドポイントで実行できます。

https://cloud.google.com/tasks/docs?hl=ja

ではCloud Tasksを使えばどのようになるのかイメージ図に書き起こすとこのようになります。

ここでは1つの処理をCloud Tasksに登録するのに0.5秒かかっている想定です。(実際はもっと早いけどあくまでもイメージ)

以前の図と違うところは文章ファイルの校正を全ファイル処理する前にWebブラウザに完了通知を出しているところです。
この仕事やっておきますね〜というような完了通知になると思います。

人間の言う「やっておきますね〜」はまあやってくれないかもしれないけど機械は設定しだいでやってくれるので大丈夫!!

で、結局どうすればいい?

Cloud Tasksを使って処理を分散したのはよいけど、分散した処理がいつ終わるのかわからないですよね。
そこで進行状況をCloud SQLやCloud Datastore/Firestoreに記録するのがよいです。

なので最終的には下記のイメージになります。 進行状況がわかる画面は別途作らないとだめだけどね!

分散しなきゃいけないほどのデータを処理しなきゃいけないということはその分だけ存在的なエラーがあるということです。
汎用的なエラーへの対処をする仕組みは用意しておいたほうがよさそうですね。


株式会社grasys(グラシス)は、技術が好きで一緒に夢中になれる仲間を募集しています。

grasysは、大規模・高負荷・高集積・高密度なシステムを多く扱っているITインフラの会社です。Google Cloud、Amazon Web Services (AWS)、Microsoft Azureの最先端技術を活用してクラウドインフラやデータ分析基盤など、ITシステムの重要な基盤を設計・構築し、改善を続けながら運用しています。

お客様の課題解決をしながら技術を広げたい方、攻めのインフラ技術を習得したい方、とことん技術を追求したい方にとって素晴らしい環境が、grasysにはあります。
お気軽にご連絡ください。