CDP:Queuing Chainパターン

提供:AWS-CloudDesignPattern
移動: 案内, 検索
寄贈したアーキテクト

システムの疎結合化

目次

解決したい課題

 複数システムで処理を連携させて逐次的な処理(例えば、画像処理の場合、画像のアップロード、保存、エンコーディング、サムネイル作成、などの逐次作業)を行う場合、システム同士が密に結合しているとパフォーマンス面でボトルネックが発生しやすい。また、障害時の復旧作業が煩雑になってしまう。できるだけシステムを疎結合にすることがパフォーマンスやメンテナンスの面で好ましい。

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

 システムを疎結合にする一つの方法は、システム間をキューでつなぎ、ジョブの受け渡しをメッセージの送受信で行うことである。こうすれば非同期でシステム連携できる。この方法の場合、メッセージを受け取って処理する仮想サーバーの数を増やして並列処理できるため、ボトルネックを解消しやすい。また、仮想サーバーに障害が発生しても、未処理のメッセージはキューに残っているので、仮想サーバーが復旧次第、処理の再開も容易である。

 このパターンはクラウドでなくても利用可能だが、キュー自体がクラウドサービスとして提供され、また仮想サーバーを柔軟に調達可能であるクラウドの特性により、以前よりも格段に利用しやすくなっている。

実装

 ある処理を担当するEC2インスタンスから、次の処理を担当するEC2インスタンスへの処理の受け渡しは「SQS」を介して行う。SQSは、AWSのキューサービスである。EC2上の処理は、ジョブ(メッセージ)の受信 → ジョブの処理 → ジョブ(メッセージ)の送信を繰り返すことになる。ジョブの性質によっては、複数のEC2上で処理を稼働させることも可能。

構造

6wNg0ISJczU5Pz1m-914F9.png

利点

  • 非同期処理にすることで、すぐにレスポンスを返すことができる。
  • システムを単純な処理(EC2)の疎結合で構成することが可能。
  • パフォーマンスやサービスの要件に対し、ジョブ処理に利用するEC2の増減のみで対応が可能。
  • EC2に障害が起きてもキューサービスにメッセージ(ジョブ)が残っているため、EC2が回復次第、すぐに処理を続けることができ、障害に強いシステムとなる。

注意点

  • SQSでは、キューから取り出す際のメッセージの順番は完全には保証されていないため、厳密に順番に処理を行なう必要があるシステムでは注意が必要となる。

その他

  • Priority Queueパターンを組み合わせることも可能である。
  • Amazon Simple Workflowを用いると、単純なキューイングだけでなく、複雑なワークフローも比較的簡単に実装できる。
  • Job Observerパターンを参照。

寄贈したアーキテクト

Ninja of Three

個人用ツール
名前空間
変種
操作
CDPメニュー
ツールボックス