grasys blog

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

文●nishino/grasys 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

本記事はgrasys が提供する「grasys blog」に掲載されたWebシステムのカイゼン(Cloud Tasks編)を再編集したものです。

~随時データを処理する仕組みからバッチ処理へ~

 実行ボタン押した後の処理時間が長くてウェブページのローディングが長いどうしよう😩🌀というときに見てください!

 とある物語のあらすじ

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

 現状のシステムはこのようなイメージです。

 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秒かかっている想定です(実際はもっと早いけどあくまでもイメージ)。

 以前の図と違うところは文章ファイルの校正を全ファイル処理する前にウェブブラウザーに完了通知を出しているところです。

 「この仕事やっておきますね~」というような完了通知になると思います。

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

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

 Cloud Tasksを使って処理を分散したのはよいけど、分散した処理がいつ終わるのかわからないですよね。

 そこで進行状況をCloud SQLやCloud Datastore/Firestoreに記録するのがよいです。

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

 分散しなきゃいけないほどのデータを処理しなきゃいけないということはその分だけ存在的なエラーがあるということです。

 汎用的なエラーへの対処をする仕組みは用意しておいたほうがよさそうですね。

■関連サイト

過去記事アーカイブ

2021年
03月
04月
05月
2020年
04月
05月
08月
09月
10月
11月
12月
2018年
09月
2017年
06月
2014年
07月