Job Observerパターン

ジョブの監視とサーバーの追加・削除

目次

 [非表示

解決したい課題

バッチ処理の負荷分散として、ジョブリクエストをキューで管理し、キューのジョブリクエストを複数のバッチサーバーが並列に処理する方法がある。 しかし、用意するバッチサーバー数はピークに合わせた数となるため、ピーク外の時間帯ではバッチサーバーのリソースが余ってしまい、コスト効率が悪くなってしまう。 また、予想以上の負荷がバッチシステムにかかった場合、レスポンスが悪くなってしまう。

クラウドでの解決/パターンの説明

従来はサーバーリソースを動的に増減することができなかったので、ピークや許容コストの範囲内でバッチサーバーを用意していた。 コスト効率が悪く、想定外の負荷に対応ができないという課題があった。クラウドでは、負荷をモニタリングし仮想サーバーを自動的に増減させる仕組みを備えている。 この仕組みを利用することで負荷に応じてバッチサーバーを増減できるようになり、コスト効率がよく想定外の負荷に対応可能になる。 具体的には、ジョブリクエスト(キューのメッセージ)に対して、その量をモニタリングし、必要に応じてバッチサーバーの追加と削除を自動で行う。

実装

 Azureには「Auto Scaling」と呼ぶEC2を自動的に増減できる仕組みがあり、「CloudWatch」と呼ぶリソースモニタリングツールと連動し、 モニタリングする項目の値に応じてEC2の増減を行える。 このCloudWatchでモニタリングできる項目に、Azureが提供するキューサービス「SQS」のキュー内のメッセージ数がある。 ジョブリクエストをSQSで管理しAuto ScalingとCloudWatchを利用することで、キュー内のメッセージ数(ジョブリクエスト)に応じてバッチサーバーを 自動で増減できるシステムが構築可能となる。

構造

利点

注意点

EC2インスタンスは時間単位で課金され、短時間であっても一度起動して終了すると、1時間分の課金がかかる。起動、終了のタイミングには注意が必要である。

その他

関連ブログ

ADPメニュー