クラウド・ネイティブのお作法(1)「非同期処理」~24時間365日ダウンタイムがゼロのシステムのために必要なこと
AWSの深いところ見せちゃいます! by AWSクラウドサポートエンジニア 第6回
非同期処理 - ユーザー画面はレスポンス良くしたい(2)
ELBおよびSQSを用いた非同期処理のシステム構成
便利なリクエストキューではありますが、単一のサーバーで実装してしまうと単一障害点になってしまいます。
AWSでは、リクエストキューのために、Amazon SQSというサービスを提供しています。先ほどの事例で言えば、図6のような位置でリクエストを受け付けることが可能です。
Amazon SQSでは、複数のサーバーにリクエストを保持し冗長化しています。また、メッセージが増加しても高スループットで処理することが可能で、簡単に使用することができます。
ポーリング(pull型)とイベント(push型)
非同期処理を実装すると、利用者は待たされることがなくなりますが、キューイングされたリクエストが実際に処理完了したか否かについては、別途確認しなければなりません。また、処理完了後に実行させたい処理もあるかもしれません。このとき、プログラム設計のアプローチとして2通り考えることができます。
1つめのアプローチとして、データ更新を依頼したアプリケーションが自ら定期的にステータスを確認する方法が考えられます。これをポーリング、もしくは、データを引っ張ってくるという意味合いから、pull型と呼びます。
2つめのアプローチとして、実際のデータ更新を担当するバックエンド側プログラムが、アプリケーションに対して、「データが完了した」という旨のイベント通知を行う設計も考えられます。アプリケーションに対してイベントをプッシュするという意味合いでpush型と呼びます。
AWS APIにおける非同期処理
AWSのAPIには、同期処理を想定したAPI(同期API)と非同期処理を想定したAPI(非同期API)があります。多くのAPIは非同期処理を想定して実装されています。
先ほどご説明した通り、非同期APIの場合、APIのレスポンス返信時点では処理は完了していないため、当該処理の完了を別途確認する必要があります。また、その確認方法として、ポーリング(pull型)とイベント(push型)が考えうることをご説明しました。
AWSのAPIでは、ポーリング(pull型)の手法として、リソースの状態をDescribeするAPIを繰り返し発行することを想定しています。後続の処理を記述したい場合には、ポーリングを繰り返すループ処理によって状態変化を検知したのち、後続の処理を行います。
イベント(push型)の場合、リソースの状態変化はイベントとして通知されます。このイベントを契機に後続の処理を加えることができます。
この記事は参考になりましたか?
- AWSの深いところ見せちゃいます! by AWSクラウドサポートエンジニア連載記事一覧
-
- クラウド・ネイティブのお作法(2)「リトライ」~効率的なリトライ手法「Exponentia...
- クラウド・ネイティブのお作法(1)「非同期処理」~24時間365日ダウンタイムがゼロのシス...
- Amazon EC2のイベント対応を楽にするためのアイデアと「Design for Fai...
- この記事の著者
-
小武 三博(アマゾン ウェブ サービス ジャパン株式会社)(コタケ ミツヒロ)
AWSクラウドサポートエンジニア。国内SIerにて業務システム、障害監視システムの設計・開発に携わる。その後、国際税務コンサルに転職し、社内ITとしてデータセンター運用、オフィスネットワーク設計構築、セキュリティ監査対応、税務システム開発などに携わる。アプリケーションからインフラまで、また、Lin...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
