・分散システムは最も複雑なソフトウェアシステムである。
・日々ソフトウェアアーキテクチャの研究が進んでいる。
・分散システムに適したアーキテクチャパラダイムは?
- Layers
- Client-server
基本的な考え方
・複雑なシステムをLayersとservicesによって構成する。
- layer : とても密接な関係のある機能の集まり
- service : 上のレイヤーへ提供される機能
・Layer構造をとったアーキテクチャの例
- オペレーティングシステム(カーネル等)
- コンピュータのネットワークプロトコルアーキテクチャ
分散システムにおける典型的なLayer構造
| Application |
| Middleware |
| Opereting System |
| Computer |
・プラットフォーム : ハードウェアやOS
- WindowsNT / Pentium Processor
- Solaris / SPARC processor
・ミドルウェア : プラットフォームのレベルの異種性を気にさせないことを達成
- 通信や資源の共有が可能に
- 例
・CORBA (OMG)
・DCOM (Microsoft)
・ODP (ITU - T/ISO)
・Java Remote Method Invocation (SUN)
- 注意:すべての機能に関した通信がぼかせるわけではない。
基本的なモデル(1つのサーバ 対 たくさんのクライアント)
・Client:違うPCにてデータアクセス、資源の使用、プログラムの実行をしたがってるプロセス
・Server:データやClientとServerの間の共有資源の管理をするプロセス。また、資源にアクセスする許可をClientに出したり、プログラムの実行をするプロセス。
・例
- httpサーバ : Clientがページをリクエストし、Serverがページを送る。
・キャッシングサービス(プロキシサーバ)
- 頻繁にアクセスされるWebページをキャッシング
他のモデル
・複数のサーバから構成されるモデル
- パフォーマンスと信頼性が高い
インターフェース
・Client-Serverアーキテクチャの使用用途にソフトウェアアーキテクチャは影響される。
- ClientとServerの間で同期しなければいけないメカニズムは何なのか。
- どのようなリクエストやレスポンスが容認されるのか。
設計で頑張らなきゃいけない点
・サービスのクオリティ
- パフォーマンス(レスポンス・スループット等)、信頼性、柔軟性
スループット:データのかたまりを1秒でどれくらい送れるか。
・信頼性
- エラーを起こしてもシステムがダウンせず、正しく動き続ける
- セキュリティ
分散システム
・分散した複数のプロセス
・互いに通信することで繋がっている。
分散アルゴリズム
・プロセス間の通信は同期式
パフォーマンス系の用語
・レイテンシ : プログラムからプログラムの通信にかかる時間
・スループット : データの塊を1秒で何個送れるか。
・BandWidth : データを1秒でどれくらい送れるか。
・Delay Jitter : データが来たときに、遅く来たり早く来たりするズレのこと。
Synchronous(同期式)分散システム : 通信にかかる時間に上限がある。
Asynchronous(非同期式)分散システム : 通信にかかる時間に上限がない(インターネット)
Event Ordering
・E1とE2が同プロセスで、E1がE2より先に起きたなら E1→E2
・E1がE2にメッセージを送る E1→E2
Omission Failure(データが壊れている)
・Process Omission Failure : プロセスのクラッシュ
- タイムアウトを利用してプログラムがクラッシュしているか検出。が、返答を求めても永遠時間かかるかもしれない。
タイムアウト : 大丈夫か?大丈夫か?と聞き続ける。
- Fail-stopはまだ実現されてない。
・Communication Omission : メッセージが送られて来ない
- 考えうる原因
・ネットワークの通信エラー
・受信側のバッファオーバーフロー
Arbitrary Failure(どんなものでも障害と捕らえる)
通信するもの
・共有メモリ
・メッセージパッシング : 言語拡張かAPIcall
IPCの原理
・Concurrent Program : 擬似並列と本物の並列、両方に対応。
IPCにおける相手先の指定
・Direct Naming : 相手を指定する。
・Global Naming : 相手を指定しない。
・Mailbox: 分散コンピュータのどこかにある。多くの場合ポートと言う考え方を採用。どの分散コンピュータからでも受信可能。
Semantics of MessagePassing
・Blocking
non-Blocking:メッセージパッシングによってプロセスが遅れることはない。
・Synchronization
- asynchronousメッセージパッシング:non-Blocking。受け取り側が受信しなくても、送り手がデータを送ることができる。バッファがあることが前提。メモリはいくらでもあると仮定している。
- synchronousメッセージパッシング:受信側が受信準備OKにならないと送信できない
- buffered message passing : メモリの上限がある
Data Representation(データの表現方法)
ビッグインディアン・リトルインディアンなどの話。
ユーザが何も考えないでOKにする
・Unmarshalling : ネットワークからもってきたデータをローカルのデータにする
・Marshalling : ローカルのデータをネットワークのデータに変換する