CDP:Priority Queueパターン

From AWS-CloudDesignPattern
Jump to: navigation, search

優先順位の変更

Contents

解決したい課題

バッチ処理として、ジョブリクエストをキューで管理し、キューのジョブリクエストをバッチサーバが処理する方法がある。同様の優先順位でジョブリクエストを処理する分なら問題ないが、優先順位を変えて処理を行う必要なケースも多々ある。 例えばプレゼンテーションファイルをWebからアップロードして公開できるサービスで、無料ユーザーと会員ユーザーでサービスレベル(公開までの時間)の異なる場合が該当する。 ユーザがPPTファイルをアップロードすると、システム側で公開するための変換処理などをバッチ処理で行い、その変換後のファイルを公開する。そのバッチ処理の優先順位を、どのように変更するかが課題となる。

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

キューを用いたバッチ処理はよく使われる手法だが、この場合キューの信頼性(可用性/耐久性)が非常に重要となり、バッチシステムの信頼性も決定してしまう。そして、信頼性の高いキューを用意するには非常にコストがかかってしまう。

クラウドには信頼性の高いキューがサービスとして提供されており、それを用いることで容易に信頼性の高いバッチシステムを構築することができる。このキューを優先順位に応じて複数用意し、ジョブリクエストを優先順位によってキューに入れ分けることで、バッチ処理の優先順位付けをすることができる。当然キューごとに、ジョブリクエストを処理するバッチサーバの性能(数)は優先順位に応じたものにしておく必要がある。

実装

AWSにはAmazon SQSと呼ばれるキューシステムが用意されており、SQSのキューを複数用意することで優先順位別のキュー(プライオリティキュー、セカンダリキュー)を用意することが可能となる。またメッセージの遅延送信機能を利用することで処理実行をあえて遅延させることもできる。

  • SQSを用いて優先順位ごとに複数のキューを用意する。
  • 処理を急ぐもの(ジョブリクエスト)は、優先順位の高いキューに入れる。
  • 優先順位に応じてキューのジョブリクエストを処理するバッチサーバは然るべきもの(数/量性能)を用意する。
  • キューの設定をである、メッセージの遅延送信を利用することで、あえて処理にとりかかえるまでの時間を遅延させることも可能である。

構造

6wNg0ISJczU5Pz1m-96155.png

利点

  • プライオリティキュー、セカンダリキューの処理速度を動的に変更することができるので、優先具合も都合にあわせて変更できる。
  • パフォーマンスやサービスの要件に対して、ジョブ処理に利用するEC2の増減のみで対応が可能。
  • EC2に障害が起きてもキューサービスにメッセージ(ジョブ)が残っているため、EC2が回復次第、すぐに処理を続けることができ、障害に強いシステムとなる。

注意点

  • ジョブの失敗時にキュー上のメッセージが残り続けたり、二重処理や中途半端な状態を防ぐ必要がある。防ぐ方法として下記が考えられる。
    • ジョブ処理プログラムのメッセージの待ち受けタイミング(処理)を調整
    • メッセージのVisibility Timeout(受信したメッセージが再び可視化するまでの時間)の調整

その他

寄贈したアーキテクト

Ninja of Three

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox