
クラウドアプリケーション開発ガイド
クラウドによってソフトウェア開発がどのように変わるのかを紹介します。
クラウドの拡張性と弾力性は、時に同義語として用いられることがあります。たしかに関連する言葉ではありますが、違う意味合いを持っているため、混同すべきではありません。パブリッククラウド、プライベートクラウド、ハイブリッドクラウドの使用が増えるにつれ、変動するワークロードへの対応が求められるビジネスをコスト効率よく計画・実行するために重要になってきたのが、クラウドの拡張性と弾力性です。
ここでは、クラウドの拡張性とクラウドの弾力性を定義し、どちらをどのような場合に使用すべきかを紹介します。
米国国立標準技術研究所(NIST)は、クラウドコンピューティングの定義に必須の特性として迅速な弾力性を挙げています。
需要に合わせて迅速に拡張・縮小できるよう、機能のプロビジョニングやリリースを弾力的に、かつ場合によっては自動的に行うことができる。ユーザー側からは、機能のプロビジョニングは無制限であり、量を問わず常時供給されるように見えることが多い」
この定義で注目すべきなのが、弾力性は拡張性に機能面で依存しているという点です。つまり、弾力性のあるシステムには拡張性が不可欠なのです。
まずはこの点から見ていきましょう。拡張性とは
このGartnerレポートでは、ソフトウェア開発におけるAIの適用事例をご覧いただけます。
Gartnerレポートを見る拡張性とは、システムの既存リソースの範囲内で、ワークロードに合わせてリソースを追加したり削減したりするシステムの能力を指す言葉です。拡張性はあらかじめ計画された永続的なものであり、予測可能で長期的な成長やワークロード増加への対応に適しています。
拡張性が必要な場合、企業は必要な増分リソースを算出し、それを既存のインフラに追加して、ピーク需要を計画することになります。
クラウドの拡張性は、企業の物理的なハードウェアリソースによる制限を受けません。ハードウェアは物理的であるため、拡張プロセスに時間がかかりますが、クラウドでは効率よく効果的に拡張を行うことができます。
クラウドで拡張を行うと、自動化により、需要に合わせて迅速にシステムを拡張できるようになります。クラウドでの拡張は通常、プライベートクラウド環境で実行されます。この場合、拡張の種類は基本的にスケールアップかスケールアウトのどちらかとなります。
スケールアップは、垂直スケールとも呼ばれます。
スケールアップでは、既存のクラウドサーバーにリソースを追加します。追加できるリソースとしてはCPUの処理能力、メモリ、ストレージなどがあり、通常は既存のハードウェアで利用可能なものに限定されます。
たとえば処理能力を追加する必要がある場合、コア2つの仮想サーバーからコア3つの仮想サーバーに移行するなど、小規模なリソースからよりパフォーマンスの高い大規模なものへと移行することになります。クラウドでの拡張は自動で行うことができ、新たなコンテナの追加は数秒、仮想マシンでも数分以内で完了します。ただし、新しいハードウェアの導入にはある程度時間がかかります。
スケールアウトは、水平スケールとも呼ばれます。これは、高可用性や、ダウンタイムがゼロ(またはほぼゼロ)のアプリケーションを求める企業に向いています。
スケールアウトでは、同等の機能を追加して複数のサーバーにワークロードを分散させます。そうすることで、高いパフォーマンスを維持し、利用可能なストレージを増やすことができます。
スケールアウトは、コンテナ化されたアプリケーションに適しています。この拡張方法では、仮想マシンを必要に応じてスピンアップして、コンテナ化されたマイクロサービスを実行するノードを新規作成します。要は、実行中のサービスと同じタイプのサービスを追加してワークロードを拡張し、高パフォーマンスを維持するのです。
拡張すると、プロビジョニングが過剰となり、不要なアイドル状態のコンピューティングリソースにコストがかかってしまうことがあります。逆に、プロビジョニングが足りず、ワークロードに対する容量が少なすぎることでサービス停止に陥ることもあります。こうした理由から一部の企業に適していると考えられるのが、弾力性のあるクラウドシステムです。
弾力性のあるクラウドシステムは、必要とされるリソースに極力近くなるよう自動的に拡張/縮小します。「弾力性」は、適応性と迅速な拡張能力を意味します。
変化の激しい状況で高いパフォーマンスを保ちつつ高い効率性を発揮するには、こうした能力が欠かせません。ワークロード需要が短期的に増大することが頻繁にある企業は、弾力性のあるシステムが向いているでしょう。
弾力性のあるシステムでは、リソースがアイドル状態になることも不足することもなく、常に利用可能となります。また、弾力性のあるシステムは、監視と自動化を活用し、リソースをリアルタイムで利用可能にしたり、不要になり次第削除したりすることで、ワークロード需要に合わせた増減に動的に対応します。弾力性は、変動の多い環境への迅速な対応に向いています。
弾力性のあるコンピューティングを選ぶことが多いのは、主にパブリッククラウドを活用して弾力性のあるソリューションの実現を図る比較的小規模な企業です。弾力性のあるモデルでは、ダウンタイムや深刻な遅延を伴うことなく、ピーク需要への対応に必要なだけリソースを追加することができます。ブラックフライデーの小売業界をイメージするとわかりやすいかもしれません。RAM、CPU、処理能力、帯域幅など、必要なリソースを必要なだけ追加できます。
拡張を行う場合は、追加したリソースを、使用するかしないかにかかわらず維持することになります。一方、弾力性のあるシステムの場合は基本の状態があり、必要が生じたときに必要な分だけ追加で利用します。そして、必要がなくなった時点で「通常」の状態に戻ります。
拡張性のあるシステムも弾力性のあるシステムも、価格面での効率とシステムのパフォーマンスを実現する従量課金モデルになっています。弾力性のある拡張では、システム規模に応じた課金という側面もあります。これは、需要急騰に向けたリソース拡張の追加を意味します。この場合、需要が落ち着いた時点で従量課金モデルに戻ります。
デプロイ方法の選択も料金に関係してきます。選択肢として考えられるのが、サービスとしてのインフラ(IaaS)プラットフォームや、サービスとしてのプラットフォーム(PaaS)でのデプロイです。Microsoft Azure、Amazon AWS、Google Cloudといったクラウドサービスベンダーでは、アーキテクチャ面での選択に応じてデプロイの課金方法が変わってきます。
OutSystemsのクラウドアプリケーション開発ガイドをぜひご一読ください。クラウドの選択肢の詳細や、デジタルトランスフォーメーションの一環としてクラウドとクラウドネイティブ開発を成功へと導く方法を紹介しています。