分散コンピューティング / 概要


分散コンピューティング

分散処理システム

 ネットワークで接続されたコンピュータにある要素が,メッセージの受け渡しのみによって通信し,それら要素の動作を協調させるシステム.

  • 利点
     経済性・速度・本質的(物理的)に分散しているデータの処理・信頼性(ダウン時)・拡張性・共有性・情報交換・資源の有効活用
  • 欠点
     ソフトウェアの構築・ネットワーキング(過負荷時など)・セキュリティ(ネットワーク上)
  • 課題
     多様性・公開性・セキュリティ・スケーラビリティ・障害処理・並行処理・透過性・処理能力

コンピュータの構成における協調

 ソフトウェアの視点からの分散コンピューティングにおける要素の協調について

ネットワークOS

 各マシンのOSとは別に,システムのマシンを管理するためのOS.システム全体に渡って統一する.

NetworkOS.gif

分散OS

 分散処理であることを気づかせないための,単一システムのイメージあるいは仮想的なシングルプロセッサという考え方.
 この場合,すべてのマシンが同じOSを使う必要がある.

DistributedOS.gif
  • システム内のどのプロセスとも同じように通信できる.(共通のプロセス間通信機能)
  • 各マシンに共通のアクセス制御機能.
  • プロセス管理機能(生成,消滅,開始,停止)の統一
  • ファイルシステムがどのマシンにおいても同じ(マシンによる制限などはない)
  • システムコールがどこでも同じ
  • 各マシンのカーネルは,各そのマシンの資源の管理を行う

ミドルウェア

 その下のシステムの違いを,実行しているアプリケーションから隠蔽することが出来る.
 アプリケーションソフトウェアとネットワークOSの間に追加された階層(共通のOSを実行しなくてもよくするための階層)

middleware.gif

3つの比較

 ネットワークOS分散OSミドルウェア
単一プロセスと見られるか×
全てのマシンが同じOS××
ファイル共有がちゃんとできるか通常は×

コンピュータ資源

プログラム

 命令を順番にならべたもの,その命令を順に解釈し,指定された処理を行うことでプログラムが実行される.

 一続きの命令ではなく,ひとまとまりの処理を関数として定義し,それら関数を呼び出すことによって大きなまとまりの処理を行う.

プロセス

 プログラムに必要な資源のこと.(プログラム自体,データ,スタック,カウンタ,スタックポインタ,レジスタ,メモリなど)
 3つの状態(Run,Blocked,Ready)を持つ.
 → 複数のプロセスを仮想的に並列に実行するものがプロセッサ

process.gif

レジスタ

 短い遅延でアクセスできるメモリ.頻繁にアクセスするデータを格納(プログラムカウンタや,スタックポインタなど)
 → プロセッサチップの中にある.


プログラムカウンタ

 プログラム内の現在実行している命令を指し示すもの.

program.gif

スタック

 特殊な使い方をするメインメモリ上の領域.LIFO(Last-In-First-Out)のデータアクセスなので,最後に格納されたデータが最初にアクセスされる.

 主に関数呼び出しに便利なメモリ領域で,どのプロセッサでも使われる.

  • スタックポインタ
     一番上の(最後に格納された)アドレスを指し示すレジスタがスタックポインタ
stack.gif
  • 関数呼び出し
     関数からの戻りアドレス・引数をスタックに積んで,プログラムカウンタの値を関数のプログラムのアドレスに設定して,関数の実行を開始する.

 関数の中では関数の中だけで有効な変数であるローカル変数を定義し,それを使って必要な処理を行う.このローカル変数のメモリ領域はスタック上に確保される.

 ローカル変数は,関数から呼び出し元のプログラムに戻る時に無効化される.この無効化がスタックを使うことによって簡単に実現できる.

kansuyobidashi.gif

プロセス間通信

 共有メモリやメッセージ通信などによって行われる.そのために排他制御が行われる.

processkan.gif

アクセス制御機能

  • アクセス制御リスト
     アクセスされる側が持つ,アクセス制御情報
  • ケイパビリティ
     アクセスする側が持つ,アクセス制御情報

分散モデル

 分散された資源へのアクセスをどうするかで4つに分かれる.何をもってアクセスが可能になるか.

  • ファイルモデル
     ファイルにアクセスする.
  • RPCモデル
     関数呼び出しによりアクセスする.
  • 分散オブジェクトモデル
     オブジェクト(データとそのデータに対する処理をセットとしたもの)にアクセスする.
  • 分散ドキュメントモデル
     ドキュメント(Webなど)にアクセスする.

分散システム設計上の課題

透過性(Transparency)

 分散システムをまるでシングルプロセッサシステムのように用意に利用できるようにするイメージを作ること.

  • アクセス透過性
     データや資源のアクセスの仕方が一貫している
  • 位置透過性
     資源が実際にどこにあるかを意識させない
  • 移動透過性
     資源を移動しても名前が変わったりしない
  • 複製透過性
     コピーしてもそれを意識させない
  • 並行透過性
     資源の共有をしている間でも,それを利用している他のユーザの事を意識させない
  • 障害透過性
     障害が起こってもユーザに気づかせない
  • 性能透過性
     性能を向上させるため,負荷がかかるとそれに応じて設定を変える
  • 拡張透過性
     スケールを変えても,システム構成やアプリケーションプログラムを変えることはない

性能(Performance)

 複数のコンピュータ間で行う通信によって,時間がかかってしまう.
 そのために並列処理が必要となり,発生する必要な通信をいかに少なくするかが問題となる.
 

  • 並列処理するプログラムの粒度
    • 細かい粒度での並列処理
       小さなプログラムを並列で実行する
        → 通信がたくさん発生し,オーバーヘッドで性能ダウン
  • 荒い粒度での並列処理
     大きなプログラムを並列で実行する
      → 通信のオーバーヘッドは少ないが,計算時間はかかる.

スケーラビリティ(Scalability)

 拡張性を満たすための,分散システムにおける潜在的なボトルネックは集中的な制御部分.
  → 非集中型アルゴリズムだけを使うべきである

  • 非集中型アルゴリズム
    • システム状態をすべて把握しているマシンがない
    • マシンはローカルな情報だけで判断を下す
    • 1つのマシンの故障がアルゴリズムに影響を与えない
    • グローバルなクロックがあることを仮定しない

信頼性(Reliability)

 1つのマシンがダウンしても,他のマシンが代替になることにより,救済が可能である.

  • 可用性(Availability)
     システムが使用可能である時間率のこと.(usable time)/(total time)
  • セキュリティ
     アクセス制御と認証による信頼性
  • 障害耐性(Fault tolerance)
     分散システムでの故障をユーザから隠すことでの信頼性.

多様性(Heterogeneity)

 多様なコンピュータから構成される分散システムであるが故の課題

  • ネットワーク
     同じプロトコルでも,異なるネットワークでは実装が異なる.
  • データ
     ハードウェアが異なると,データの内部表現も異なる.
  • インタフェース
     オペレーティングシステムが異なると,メッセージ交換のためのインタフェースも異なる.
  • 言語の表現
     プログラミング言語によって,文字やデータ構造の表現が異なる.
  • 実装
     共通の標準に従わない限り,ベンダ(会社)が異なると通信が出来ない.

公開性(Openness)

 新たにサービスを追加したり,異なるクライアントによってサービスを使えるように公開する.