クラウドのプログラミング
クラウド向けのプログラムを設計するには、特別な考慮が必要です。 開発者は、アプリケーションの種類と予想される負荷に応じて、クラウド プロバイダーから提供される機能の一部を利用して、プログラムのスケーラビリティと保守性を強化することができます。 自動スケーリング システムとロード バランサーを使用すると、開発者は、ハードウェアの使用率またはプログラムで計算された負荷係数に基づいてインフラストラクチャを動的に拡大または縮小できます。
アプリケーションを開発するときやクラウドに移行するときに開発者が検討する必要がある考慮事項がいくつかあります。特に、パフォーマンスとセキュリティに関するものです。
クラウド上のアプリケーションのパフォーマンス要因
クラウド中心のデータセンターの環境は、所有するインフラストラクチャ上でアプリケーションを設計し、展開するときの使い慣れた環境とは異なります。 パブリック クラウド上の物理ハードウェア レイアウトや仕様にアクセスできないため、アプリケーションのパフォーマンスの微調整や強化が難しいと感じる開発者もいます。 ここでは、クラウド上のアプリケーションのパフォーマンスに影響する要因に特に重点を置き、主な考慮事項を挙げます。
リソースの帯域幅と待機時間
クラウド アプリケーションの開発とデプロイに関する主な考慮事項は待機時間です。 開発者は、厳格な待機時間要件を考慮してアプリケーションを計画する必要があります。 1 つの方法は、クライアントの場所の分布をまとめることです。 これにより、開発者は、エンドユーザーのパフォーマンスと応答性を最適化するために使用できるデータセンターの場所の最適なセットがわかります。 これは Web アプリケーションに特に当てはまります。というのも、静的 Web コンテンツに対する個々の HTTP 要求が Web ページの読み込み時間の重要な部分を占める可能性があるからです。
アプリケーションには、待機時間とは別に厳格な帯域幅要件も存在する場合があります。特に、オーディオやビデオなどのリッチ マルチメディア コンテンツを処理する場合です。 多くのクラウド プロバイダーでは、クラウド開発者は、プロビジョニング中に、コンピューティング リソースとストレージ リソースの IOPS 要件の形式でパフォーマンス パラメーターを指定できます。 さらに、多くのクラウド プロバイダーでは、開発者が仮想ネットワークを設定できます。 ソフトウェア定義のネットワークとストレージ (後のモジュールで説明します) を実装し、導入することにより、複数のクライアントからのトラフィックを管理するためにデータセンターで使用される新しい手法について詳しく分析できるようになります。さらに、クライアント SLO に指定された個々の要件を管理することができます。
前述の手法は、主に静的コンテンツを対象としています。 分散データ ストレージ システム、特に書き込みと更新を処理する必要があるシステムへのアクセスの待機時間を最適化することは、はるかに困難です。 このような問題については、後のモジュールで少し詳しく説明します。
マルチテナント
パブリック データセンター上のアプリケーションは、通常、共有インフラストラクチャ上で実行されます。 クラウド サービスのこの側面により、いくつかの重要な問題が生じます。 最新の仮想化テクノロジを使用すると、アプリケーション環境とセキュリティの観点から分離された環境を実現できますが、通常、パフォーマンスの分離を保証できません。 そのため、クラウド上の仮想化リソースでは、常に一定のパフォーマンスを保証できません。 任意の時点でのリソースのパフォーマンスは、リソースに対するすべてのテナントからの総負荷の機能です。これは、同じハードウェアを共有する他のテナントから発生する干渉とも呼ばれます。
Azure などの一部のクラウド プロバイダーは、専用ハードウェアに特定の種類のリソース (VM など) をプロビジョニングする機能をクライアントに提供しています。 これにより、リソース パフォーマンスの大きな変動に対する保護を実現し、リソースのパフォーマンスがかなり一貫したものになります。 ただし、Azure でサーバーをリソース専用に割り当てる必要があるため、専用ハードウェア インスタンスのコストは通常のオンデマンド インスタンスよりもかなり高くなります。
マルチテナントの関連する側面として、プロビジョニングのバリエーションの問題があります。パブリック クラウド上の仮想リソースに対する同じ要求が物理リソースに同じようにマップされないため、パフォーマンスが変化します。1 たとえば、仮想マシン (VM1
と VM2
) に対する 2 つの同一の要求を 2 つの異なる物理マシン (A
と B
) にルーティングできます。 物理マシン A には、他に 4 つのテナントがあり、同じマシン上のリソースについて競合している一方、マシン B には 2 つしかない場合があります。 クライアントは、仮想マシン VM1
と VM2
に対して同じように課金されますが、これらのマシンのパフォーマンスは異なる可能性があります。
セキュリティの設定
ユニット 1 で見たように、パブリック クラウドは攻撃ベクトルの増加の影響を受けます。 開発者は、クラウド上にアプリケーションをデプロイして保守する際に、ベスト プラクティス、プロトコル、および手順を確実に実行するように慎重に確認する必要があります。 その結果、パブリック クラウドによって義務付けられているセキュリティ プロトコルが使用されるため、パフォーマンスがさらに低下する可能性があります。
これらのプロトコルについては前のモジュールで説明したので、改めて詳しく説明しません。 パブリック クラウドにデプロイされたコードは、手動および自動のソース コード レビューと静的分析の厳格なプロセスに加えて、動的な脆弱性分析や侵入テストを行う必要があります。 アプリケーションを安全にデプロイするためのガイドラインを次のページに示します。
関連項目
- Rehman, M.S および Sakr, M.F (2010 年)。 「クラウド コンピューティングにおけるプロビジョニング バリエーションの初期の結果」(2010 IEEE Second International Conference on Cloud Computing Technology and Science (CloudCom))