導入

完了

クラウド プログラムを開発する (つまり、大規模に分散されたコンピューティング リソースの機能を正常に活用するソフトウェア システムを設計および実装する) ことが、大きな課題となります。 多くのソフトウェアとハードウェアのコンポーネント間で考えられる論理的な相互作用と一時的なインタリーブの多様性によって、問題が発生しています。 プログラムのバグは再現が困難な場合があります。また、一部のクラウド プログラムのパフォーマンス動作が不明確であることが原因で、システムの動作を分析して論理的に考えることが、単なる人間の能力を超える可能性があります。

研究者と専門家はこの問題の理解を徐々に深めながら、クラウド システム固有の複雑さを軽減するプログラミングとコンピューティングのモデルを開発しました。 これらのモデルは、ソフトウェアおよびハードウェア システムに組み込まれており、開発者と基になるコンピューティング リソースの間に位置し、定型化された設計パターン、分散プログラミングの比較的簡単な考え方、およびアプリケーション、データ、リソースへの柔軟なインターフェイスをプログラマに提供します。

現世代のクラウド プログラミング モデルは、共有メモリとメッセージ パッシングに基づくプロセス間通信をサポートする、従来の先行バージョンを基に構築されています。 これらの以前のバージョンでは、分散タスク間の相互作用ための基本的な機能が提供されますが、タスクを自動的に並列化および分散し、障害から回復させる機能はありません。 Hadoop MapReduce、Pregel、GraphLab など、これらの最新の後続バージョンでは、より高度な機能が提供され、特に、クラウド環境での分散プログラミングとコンピューティングの需要に対応します。 数ある利点の中で特に、これらの現在のモデルでは、開発者を分散プログラミングの多くの難しい側面に対する懸念から解放し、プログラマが一連のアプリケーションのアルゴリズムに集中できるようにするというものがあります。

Babbageの最初のプログラミング可能なコンピュータのための1837の設計をエコーして、私たちは それらを分散分析エンジンと呼ぶことによって今日のクラウドプログラミングモデルを区別します。 このモジュールでは、クラウド コンピューティングの概念と課題を調べ、クラウド アプリケーションを開発するための分析エンジンの現在の例を提供します。

学習の目的

このモジュールでは、次のことを行います。

  • プログラムをシーケンシャル、同時実行、並列、分散に分類する
  • なぜプログラマが通常はシーケンシャル プログラムを並列化するのかを示す
  • クラウド プログラムが複雑なコンピューティングの問題を解決するうえで重要な理由について説明する
  • 分散システムを定義し、分散システムとクラウドの関係を示す
  • 分散プログラミング モデルを定義する
  • 共有メモリ システムで同期が必要な理由を示す
  • メッセージ パッシング プログラミング モデルを使用してタスクで通信できるようにする方法について説明する
  • 同期プログラムと非同期プログラムの違いを概説する
  • バルク同期並列 (BSP) モデルについて説明する
  • データの並列化とグラフの並列化の違いについて概説する
  • 分散プログラム single program, multiple data (SPMD) と multiple program, multiple data (MPMD) を区別する
  • クラウド内の通信のボトルネックに対処するために、分散プログラムに組み込むことができる 2 つの主な手法について説明する
  • 異種および同種クラウドを定義し、クラウドで多様性が求められる主な理由を特定する
  • クラウドで同期が必要な状況と、その理由を示す
  • クラウドでフォールト トレランスを実現するために使用できる主な手法を特定する
  • タスク スケジュールとジョブ スケジュールの違いを概説する

前提条件

  • クラウド サービス モデルや一般的なクラウド プロバイダーなど、クラウド コンピューティングの概要を理解している
  • クラウド コンピューティングを実現するテクノロジを把握している
  • クラウド サービス プロバイダーのクラウドの料金と課金について理解している
  • データセンターとは何か、それはなぜ存在するのかを把握している
  • データセンターの設定、稼働、およびプロビジョニングの方法を理解している
  • クラウド リソースのプロビジョニングとメータリングの方法について理解している
  • 仮想化の概念について知識がある
  • さまざまな種類の仮想化について把握している
  • CPU の仮想化について理解している
  • メモリの仮想化について理解している
  • I/O の仮想化について理解している
  • さまざまな種類のデータとその格納方法について把握している
  • 分散ファイル システムとそのしくみについて知識がある
  • NoSQL データベースとオブジェクト ストレージ、およびそれらの機能について知識がある