MessageServiceを理解するtechblogみなさん、こんにちは。エンジニアのpiyohikoです。Service」についてご紹介したいと思います。Cloudに限らずですが、クラウド上でのシステム構築にキューイングサービスはとても重要ですので、その魅力についてご紹介いたします。クラウド上で様々なサービスを展開していくと、サービス同士の連携方法に頭を悩ませることが多々あると思います。アプリ上で複雑な連携や同期を構成してしまうと、相互の依存性が高くなり、場合によってはクラウドの良さである柔軟性や拡張性を損ねてしまうこともあります(これを密結合といいます)。今回は密結合と逆の結合方法、疎結合(マイクロサービス化)を実現する、キューイングサービスをご紹介したいと思います。疎結合ではシンプルな非同期構成や分散構成を、スケールを気にすることなく構築することができ、また、システムが追加になっても構成変更を容易に実施できます。Service」といいます。キューイングシステムとはもう少し詳しくキューイングシステムについて説明します。キューイングシステムとは、キューに入れたメッセージをやり取りすることで、システム間を連携させる仕組みです。メッセージの送り手と受け手は非同期で処理するため、一方のシステムがダウンしても直接影響を受けないのが特徴です。Serviceをより深く理解するために、この特性を生かした活用例を2つ紹介します。1.画像処理などの逐次作業を並列処理させる例えば、Webサイトから画像処理などの時間のかかる処理を要求するシステムがあったとします。このようなシステムの場合に、メッセージキューを活用できます。メッセージキューを使わない同期的なシステムでは、画像処理が終わるまでブラウザを開いたままにする必要があります。ブラウザのタブを閉じてしまったり、通信環境が悪くなったりした場合には処理が中断してしまいます。メッセージキューを利用して非同期的なシステムにした場合、Webサイト側では、「画像処理の要求を受け付けました」とレスポンスを返し、裏で画像処理を行うことができます。画像処理の動作中にサーバに障害が発生したとしても、未処理のキューが残っているので、サーバが復旧次第処理を再開できます。(画像処理例:画像のアップロード、保存、エンコーディング、サムネイル作成、等)2.アプリケーションの追加や運用ルール変更時のシステム変更を楽にする例えば以下のようなECサイトがあったとします。1.顧客管理サービスを呼び出し、会員として登録する。2.ポイントサービスを呼び出し、新規会員登録時のポイントを付与する。3.メール送信サービスを呼び出し、会員登録サンキューメールを送信する。後からECサイトの追加と、メールアドレスを持たない人用にDM発送の運用ルールを追加したとします。このシステムをアプリケーション同士で連携していた場合、ECサイトを追加したり、DMメールを送るような運用ルールを追加したりすると、各アプリケーションごとに変更が必要です。キューイングシステムを利用して連携すれば、ECサイトが追加になっても運用ルールが追加になっても、変更はキューイングシステムだけで済みます。Serviceを使ってシステムを構築してみます。Webページの「登録」ボタンが押されたらメールを送信するシステムを構築する今回はこの構成を実装してみます。Webサイトの「登録」ボタンが押されたら、メッセージキューを利用して登録処理の実行とメールを送信します。1.「登録」ボタンが押されるとWebページが更新されます。2.メッセージキューを送るコマンドが実行されます。3.一定間隔でメッセージキューを受信するコマンドが実行されています。4.メッセージを受けたら登録処理とメール送信を要求するコマンドを実行し、メッセージキューを削除します。※メールはSendGridという外部サービスを使って送信されます。基本的な操作と環境設定SDKをインストールします。インストールにはGitを使用します。Gitをインストール後、PythonのSDKをインストールします。install「mnscmd」コマンドがインストールができたか確認します。mnscmdでオプションの一覧が表示されたらインストール完了です。MNS管理コンソールからエンドポイントをコピーし、サーバーにコマンドで登録します。コピーすることができます。http(s)://<アカウントID>.<リージョンID>.aliyuncs.com/configコマンドで設定します。--endpoint=」の後に、エンドポイント、アクセスキー、シークレットキーを追記します。.httpdとphpをインストールし、httpの再起動後indexページを編集します。/var/www/html/index.htmlブラウザーからみたWebページ登録ボタンを押すと、ページが更新され、メッセージを送るコマンドが実行されます。--body="サービス処理側へ引き渡すパラメータを指定"ブラウザからみたWebページメッセージを監視するコマンドを実行しておきます。メッセージが受信されると、DB登録処理やメール送信処理が実行されます。}「test-send.py」はメールを送信するようなプログラムです。メールを送信する手順は以下のテックブログを参考に実施しました。動作確認Web画面の「登録」ボタンを押すと、Web画面が更新され、メール送信コマンンドの「test-send.py」で指定した宛先にメールが送信されました。まとめ今回は1つのメッセージ送信に対して1つのメッセージ受信を実装しましたが、一度に16以下のメッセージを受け取ることもできます。ある程度まとめて受信をしたい場合に活用できます。このようにアプリと実際の処理を分けることで、スケールや障害を気にすることなくすぐにレスポンスを返すことができます。キューイングサービスを実機で実装しようとすると、サーバの手配からミドルウェアの選定、テスト等、非常に手間とコストがかかります(もちろん運用も)。MessageServiceを利用すれば、必要になるのはエンドポイントの取得と利用した分の料金くらいです。今回は単純な構成でご紹介しましたが、他にも色々なケースで活躍できる機能です。低コストで、非同期処理や分散処理を実現する手段として、活用していただきたいと思います。reserved.スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。