【AWS】信頼できるアプリケーション構成を考える為の知識 #4
1. マイクロサービス
・従来のアプリケーションは、モノシリックサービスと言われ、コンポーネント間が密結合。
・そのため、1箇所で障害が起きると全システムに影響が波及する
・対し、AWSはマイクロサービス *1) で構築できる。システムを"細かい機能"の単位で分割し、それぞれが独立したモジュールとして稼働する。
・一つに障害が起きても、影響が波及しにくくなる
→影響が軽微で済む
→フォールバック *2)*3) の考え方とマッチしているので、工夫して設計すれば、より耐障害性や機能性を高められる
2. Amazon Simple Notification Service (Amazon SNS)
2-A) Pub/Subとは?
・Pub/Subとは、「パブリッシャー」が Amazon SNS トピックを使用して、サブスクライバーに(ウェブサーバー、E メールアドレス、AWS Lambda 関数)通知を出す機能のこと。
・多種多様なSNSへの通知機能を一本化できる *4)
2-B) Pub/Subとはサーバーレスアーキテクチャ
・サーバーレスとは、サーバーを用意しなくとも、クラウドに処理を登録することで適切なサーバーを割り当て実行するアーキテクチャ。
・利用者はサーバーのリソースを意識することなく、サービスをスタート・管理・運用することができます。
・代表的な思想として、FaaSがある
→Function as a Service …関数のコードを実装すれば、関数を実行する環境を提供するアーキテクチャ *4)
・使用例
→飲食店のニュースレターの会員への通知など
2-C) LambdaとEC2の違い
EC2
・AWS上で仮想サーバーを構築するので、サーバーの構築、保守が発生する
Lambda
・既にAWS上に用意された環境上で、処理を記述(プログラミング)できるので、構築は不要。運用管理もAWSが自動で行ってくれる。
※ EC2とLambdaのメリット・デメリットは補完関係にあるので、それぞれのメリットだけ記述する
Lambdaを使うメリット
・サービスの立ち上げが楽
→インフラやミドルウェアは既に用意済(DBやストレージ) *6)
・運用管理が楽
→最適化や最新パッチの適用が自動でされる *6)
・関数実行回数に応じて課金されるので、小規模サービスではコスパ良い *6)
EC2を使うメリット
・ミドルウェアを自分で選定できるので、自由度高い *6)
・Lambdaは関数の実行時間に制限があるので、LambdaでできないことはEC2で行うようになる *6)
3. Amazon Simple Queue Service (Amazon SQS)
・ソフトウェアコンポーネント間でメッセージを送信、保存、受信させるもの
・上記で触れたマイクロサービスの実現方法でプロトコルのようなもの *7)
・非同期通信が可能
→ プロデューサーとコンシューマーがデータの送受信のためにお互いと同期を取る必要が無い。
→ プロデューサーがキューに送信したメッセージを、コンシューマーが任意のタイミングで取得できるようになります。
リンク
*1) マイクロサービスについて(耐障害性、スピード)
2) フォールバック
https://www.ap-siken.com/kakomon/24_haru/q16.html
3)フォールバック用のロジックを使って対処。
4) Pub/Sub
5) サーバーレス
https://blog.qbist.co.jp/?p=2654
6) EC2とLambdaのメリット・デメリットにおける違い
https://www.users-digital.com/2021/03/10/system_serverles_architecture/
7) Amazon SQSでマイクロサービスを構築する
https://aws.amazon.com/jp/builders-flash/202105/awsgeek-sqs/?awsf.filter-name=*all