はじめに
こんにちは
今回は 「クラウドアーキテクチャの設計原理」 についてご紹介いたします。
簡単に言うと「クラウドのメリットを活かした設計をしましょう!」ということです。
AWSクラウドコンピューティングの6つのメリットを活かしたシステム設計を行うには
オンプレミスとは異なる設計原則があります。
今回は大きく4つに分類して取り上げたいと思います。
1.故障に備えた設計
2.コンポーネントの分離
3.弾力性の実装
4.並列化を考慮する
「AWS #2の復習」AWSクラウドコンピューティング:6つのメリット
その前にAWSクラウドコンピューティングのメリットについて簡単に復習したいと思います。
1.固定費から柔軟な変動費へ
2.コストの最適化
3.キャパシティ予測が不要に
4.スケールによる大きなコストメリット
5.スピードと俊敏性の向上
6.わずか数分で世界中にデプロイ
1.故障に備えた設計
結論として「故障に備えた設計」という考え方をアーキテクトに取り入れることが重要です。(Design for Failure)
形あるものは全て壊れてしまうものです。一例として、オンプレミスシステムではハードディスクの故障はよくあることです。万が一のために冗長化をとることがあります。
「故障に備えた設計」を実現するためには、単一障害点(Simple Point Failure → SPOF)をなくすという考え方が大切になります。
「具体例」
1.1つのデーセンターセンターのみで運用しない
2.1つのハードウェアのみで構成しない
2.コンポーネントの分離
クラウドはサービス指向アーキテクチャの設計原則に従います。つまり、システムのコンポーネントを疎結合にします。
「疎結合」
システム間の結び付けや関係性が弱く、個々のシステムの独立性が高いことを言います。
一例として図を作成しました。
上図のように「EC2」2台の前に「ELB」を置くことで、システムを疎結合にすることができます。
こちらの図の構成ではアクセス元から「ELB」に接続することで「EC2」にアクセスすることができます。
このように疎結合にすることで、たとえEC2が1台故障してもシステムを止めることなく稼働させることができます。
AWSではシステムを疎結合にできるサービスとして「ELB」「SOS」「SNS」「Lambda」などがあります。
これらのサービスを利用できないか検討してみましょう
さらにコンポーネントの分離を実現するためにはフルマネージドの「キューサービス」を利用して、それぞれのコンポーネント間のやり取りを管理することがポイントになります。
「Amazon SQS」… Simple Queue Service
SQSを利用して、非同期かつ疎結合な構成をとる
3.弾力性の実装
クラウドはインフラストラクチャに弾力性(Elastic) をもたらします。
弾力性、または伸縮性とは、スケールアウト(増やす)またはスケールイン(減らす)することを意味します。
固定されたリソースでなく、クラウドの利点である弾力性(伸縮性)を使用して動的にスケーリングを行う
4.並列化を考慮する
クラウドでは並列化を容易に行うことができます。
クラウドで同じ設定のサーバーなどを容易に複製ができます。
そのため可能であれば並列化したシステムを構築することが推奨されています。
「並列化したシステムの例」
この図では ALB(Application Load Balancer) を使用して、複数のEC2に受信リクエストを分散させます。
このように処理を分散させることで、処理速度、耐障害性の向上が見込まれるため並列化したシステムを構成することが推奨されています。
ロードバランサーを組み合わせて、並列処理を行う
高負荷時はスケールアウト、低負荷時にはスケールインを行う(弾力性を組み合わせる)
おわりに
大きく4つの分類(故障に備えた設計、コンポーネントの分離、弾力性の実装、並列化)について紹介させていただきました。
#5~ではAWSのセキュリティに関しての基本的な考え方などを紹介いたします。
最後までお読みいただきありがとうございました!
日頃より活用している参考書です。
「参考書」
AWS認定クラウドプラクティショナー改定第3版
「AWS公式サイト」
弾力性と拡張性(スケーラビリティ)の違い