poeaa ch7 Distribution Strategies
- Distribution Strategies
- The Allure of Distributed Objects
- Remote and Local Interfaces
- Where You Have to Distribute
- Working with the Distribution Boundary
- Interfaces for Distribution
- 英語
Distribution Strategies
- 分散コンピューティング
- オブジェクトを分散させるな
The Allure of Distributed Objects
- 分散オブジェクトの誘惑
- 「1ノード1オブジェクト」をしたくなる
- なぜしてしまうのか
- パフォーマンス目的
- ロードバランシング
- パフォーマンス目的
- 「その設計はクソだよ」と言って追い出されてしまうか
- 正道を時間をかけて示すか
- 後者のほうが儲かるが骨が折れる
- オブジェクト分散デザインが大好きな人たちを説得するのは大変
- なぜオブジェクト分散デザインはクソなのか
- 分散オブジェクトのツール(ミドルウェアとか)のベンダの甘言
- 透過性
- 「プロセス内だろうがプロセス間だろうが変わらず呼び出せます」
- 透過性
- でもパフォーマンスは透過的じゃない
- ノードをまたぐと遅くなる
- パフォーマンスのために分散システムにしたのに
- ビルドとデプロイも容易でなくなる
Remote and Local Interfaces
- クラス単位での分散がうまくいかない主たる理由
- コンピューターの基本的な事実
- プロセス内でのプロシージャコールはめっちゃ速い
- プロセス間でのプロシージャコールは桁違いに遅い
- 別マシンのプロシージャコールはさらに1-2桁遅くなる
- ネットワーク依存
- リモートコールされるオブジェクトと、同一プロセス内で呼び出されるオブジェクトとではインタフェース設計が変わってくる
- 同一プロセス内
- 古典的なデザインパターンがそのまま適用される
- 細かい粒度のインタフェースが正義
- fine-grained interface
- 例: 住所クラス
- getCity()
- getState()
- setCity()
- setState()
- リモート
- プロシージャコールが遅いので、なるべく回数を少なくしたい
- パフォーマンスのためにcoarse-grained interfaceが必要になる
- 例: city,state,zipをまとめて取得/更新
- 柔軟性や拡張性は犠牲
- ツールベンダは「オーバヘッドはありません」と言う
- ローカル呼び出しはローカル呼び出し相応の速さが得られる
- リモートプロシージャコールがローカル呼び出しほど速くなるという意味ではない
- だからリモート呼び出しだけパフォーマンス面をケアすればよい?
- しかしそれではfine-grained interfaceとcoarse-grained interfaceが混ざってしまう
- 2つのオブジェクトが連絡するたびにいずれかのインタフェースの選択を強いられる
- プロセス間通信ならcoarse-grained
- 柔軟性・拡張性を欠くためプログラムが大変になる
- First Law of Distributed Object Design: オブジェクトを分散させるな
- じゃあどうするか
- アプリケーションをクラスタリングせよ
- すべてのクラスを1つのプロセスに入れてプロセスのコピーを複数ノードに複製する
- プロシージャコールはプロセス内ローカルで行われる
- 速い
- 普段通りfine-grained interfaceで設計できる
- 保守性よい
Where You Have to Distribute
- プロセスを分けねばならないケースがある
- Client-Server構成
- Server-DBMS
- Webサーバ-アプリケーションサーバ
- 有り物のソフトウェアパッケージを使う場合
- 別プロセスで動くことしばしば
- 本当に必要なケース
- 必要性を祖父母を納得させてからやれ
- やるな、ってこと
- どうしてもやることになったら、鼻をつまみながら、coarse-grainedでリモートに配置
- 必要性を祖父母を納得させてからやれ
Working with the Distribution Boundary
- 分散システムの境界はなるべく制限する必要がある
- Remote Facade
- 分散システムの境界にcoarse-grainedなオブジェクトを据える
- プロセス内部のfine-grainedなオブジェクトに処理を委譲するだけのオブジェクト
- coarse-grainedなインタフェースがリモート呼び出しを明示してくれる
- 透過性には反する
- が、潜在的なリモートコール(によるパフォーマンス低下)は隠蔽してほしくない
- DTO: Data Transfer Object
- an objct that carries data between processes in order to reduce the number of method calls.
- coarse-grainedなオブジェクトをリモート間で伝送する
- Addressならcity,state,zipをまとめて1かたまりで伝送
- リモートコールの回数を少なくする
- リモートの彼岸・此岸両方で使う
- ので、プロセス内部のオブジェクトへの参照をもたぬこと
- 彼岸で使えなくなるから
- 例外
- 他のDTO
- スカラ型
- Lazy Load
- An object that doesn't contain all of the data you need but knows how to get it.
- GoFのVirtual Proxy的な
- プロセス間のオブジェクト伝送を仲介
Interfaces for Distribution
- リモートプロシージャコール
- XML over HTTPの利点
- オブジェクトのメソッドコールの利点
- OOのインタフェースをHTTPのインタフェースでラップすれば両対応できる
- 【補】今日「Web API」と呼ばれているヤツか
- ただし複雑性を生む
- Webサーバが新たに必要
- 同期RPCを前提に話をしてきた
- 非同期のメッセージベース通信使え
- メッセージベース設計は大きなトピックなので避ける
英語
- ple in general.
- cozy
- こぢんまりとした
- brochures
- A small book or magazine containing pictures and information about a product or service.
- パンフレット
- allure
- The quality of being powerfully and mysteriously attractive or fascinating.
- recur
- Occur again periodically or repeatedly.
- out and out
- 徹底的に
- show the door
- 出ていかせる
- get shown the door
- 追い出される
- remunerative
- Financially rewarding; lucrative.
- lucrative
- Producing a great deal of profit.
- cripple
- Cause (someone) to become unable to walk or move properly.
- the rub
- The central problem or difficulty in a situation.
- like a cornered rat
- 窮鼠のごとく
- genuine
- Truly what something is said to be; authentic.
- parsimonious
- Very unwilling to spend money or use resources.
- duck out of
- [informal] [with object] Evade or avoid (an unwelcome duty or undertaking)
- urge
- [with object and usually infinitive] Try earnestly or persistently to persuade (someone) to do something.