01 / 読書ガイド
読書ガイド
引用
Coulouris, G., Dollimore, J., Kindberg, T., & Blair, G. (2011). Distributed Systems: Concepts and Design (5th ed.). Pearson.
章の要約
本書は全21章からなり、著者はそれを7つの主題領域に配置しています。著者が掲げる目的は、インターネットをはじめとする分散システムの基盤となる原理と、そのアーキテクチャ、アルゴリズム、設計を説明することで、抽象モデル、アルゴリズム、詳細な事例研究というトップダウンの方法をとります。以下の章は、著者自身の構成に従ってまとめています。
第1〜2章:Characterization of Distributed Systems(分散システムの特徴);System Models(システムモデル)
最初の2章は概念的な概観を与えます。第1章は、分散システムの例、動向、資源共有、主な課題(序文は、スケーラビリティ、異種性、セキュリティ、障害処理を最も重要なものとして挙げています)を扱い、World Wide Web を事例研究とします。第2章は、プロセス間の相互作用、障害、セキュリティのための物理モデル、アーキテクチャモデル、基本モデルを構築します。
第3〜7章:Networking and Internetworking(ネットワークとインターネットワーキング);Interprocess Communication(プロセス間通信);Remote Invocation(遠隔呼出し);Indirect Communication(間接通信);Operating System Support(オペレーティングシステムの支援)
これらの基礎となる章は、まず分散システムに関係するネットワーク(ネットワークの種類、ネットワークの原理、インターネットプロトコル、事例研究としてのイーサネット・WiFi・Bluetooth)を扱い、次にインターネットプロトコルの API、データのマーシャリング、マルチキャスト、オーバーレイネットワーク、MPI を扱います。遠隔呼出しは、要求・応答プロトコル、遠隔手続き呼出し、Java RMI を扱います。この版で新しい第6章の間接通信は、グループ通信、パブリッシュ・サブスクライブ、メッセージキュー、共有メモリ方式を扱い、第7章はオペレーティングシステム層、保護、プロセスとスレッド、オペレーティングシステムレベルの仮想化を扱います。
第8〜10章:Distributed Objects and Components(分散オブジェクトとコンポーネント);Web Services(Web サービス);Peer-to-Peer Systems(ピアツーピアシステム)
ミドルウェアの章は、分散アプリケーションを支えるさまざまな方法を検討します。第8章は分散オブジェクト(事例研究は CORBA)からコンポーネント(Enterprise JavaBeans と Fractal)へ進みます。第9章は Web サービス、サービス記述とディレクトリサービス、XML セキュリティ、コーディネーション、応用を扱います。第10章はピアツーピアシステムを扱い、Napster からミドルウェア、ルーティングオーバーレイ(Pastry、Tapestry)、応用の事例研究(Squirrel、OceanStore、Ivy)へと進みます。
第11〜13章:Security(セキュリティ);Distributed File Systems(分散ファイルシステム);Name Services(名前サービス)
第11章は、セキュリティ技術、暗号アルゴリズム、デジタル署名、暗号の実務を示し、事例研究として Needham–Schroeder、Kerberos、TLS、802.11 WiFi を取り上げます。第12章はファイルサービスのアーキテクチャを、Sun NFS と Andrew ファイルシステムを事例研究として説明し、第13章は名前サービス、DNS、ディレクトリサービスを、Global Name Service と X.500 を事例研究として扱います。
第14〜15章:Time and Global States(時間とグローバル状態);Coordination and Agreement(調整と合意)
これらは、タイミングと調整のアルゴリズムを扱う章です。物理時計の同期、論理時間、グローバル状態、分散デバッグ、続いて分散相互排除、選挙、グループ通信における調整と合意、コンセンサスを扱います。
第16〜18章:Transactions and Concurrency Control(トランザクションと並行性制御);Distributed Transactions(分散トランザクション);Replication(レプリケーション)
データに関する章は、トランザクション、入れ子トランザクション、ロック、楽観的並行性制御、タイムスタンプ順序付けから、分散トランザクション(アトミックコミット、分散デッドロック、リカバリ)、そしてレプリケーション(耐障害サービス、ゴシップアーキテクチャ、Bayou と Coda、複製データを伴うトランザクション)へと進みます。
第19〜20章:Mobile and Ubiquitous Computing(モバイルとユビキタスコンピューティング);Distributed Multimedia Systems(分散マルチメディアシステム)
第19章は、アソシエーション、相互運用、センシングとコンテキストアウェアネス、セキュリティとプライバシー、適応を扱い、事例研究として Cooltown を取り上げます。第20章は、マルチメディアデータの特性、サービス品質と資源管理、ストリーム適応、Tiger、BitTorrent、End System Multicast の事例研究を扱います。
第21章:Designing Distributed Systems: Google Case Study(分散システムの設計:Google の事例研究)
最終章は Google のインフラストラクチャに関するかなり詳しい事例研究で、全体のアーキテクチャと設計思想、通信パラダイム、データ格納と調整サービス、分散計算サービスを扱います。序文はこの章を、本書のアーキテクチャの概念、アルゴリズム、技術が一つの設計にまとまる様子を示すものと位置づけています。
主要概念
第1〜7章:基礎
- 課題とモデル:スケーラビリティ、異種性、セキュリティ、障害処理。物理モデル、アーキテクチャモデル、基本モデルで捉える。
- 遠隔呼出しと間接通信:要求・応答、RPC と RMI、そしてグループ通信、パブリッシュ・サブスクライブ、メッセージキュー。
第8〜13章:ミドルウェアとサービス
- 分散オブジェクトとコンポーネント、Web サービス、ピアツーピア:分散アプリケーションを支える3つの方法。
- セキュリティ、ファイルサービス、名前付け:暗号と認証プロトコル、NFS と AFS、DNS とディレクトリサービス。
第14〜18章:アルゴリズムとデータ
- 論理時間とグローバル状態:共有の時計なしにイベントを順序づけること。
- 調整と合意:相互排除、選挙、コンセンサス。
- トランザクションとレプリケーション:並行性制御、アトミックコミット、耐障害な複製サービス。
第19〜21章:新しい分野と Google の事例
- モバイル・ユビキタスコンピューティングとマルチメディア:コンテキストアウェアネス、サービス品質、ストリーム適応。
- Google のインフラストラクチャ:本書の考え方のエンドツーエンドの応用。
批判的分析
長所
- 広さと事例研究の両立。 多くの章が概念を具体的な実システムと組み合わせています。Java RMI、CORBA、Enterprise JavaBeans、Pastry、OceanStore、NFS、AFS、Kerberos、Bayou と Coda などで、最終章は多くの考え方が Google のインフラストラクチャの中でどう組み合わさるかを示します。
- アルゴリズムが独立した章を持つ。 時間、調整と合意、トランザクション、レプリケーションにはそれぞれ専用の章があり、アルゴリズムの中核がシステムの記述から分けられています。
- わかりやすい読み進め方。 序文は各章を7つの主題領域にまとめ、本書の構成と推奨される読み進め方を示す図を載せ、第6章は内容が多いので教員がそこからいくつかの技術を選べると指摘しています。
- 授業の支援。 著者のサイトには、各章の講義のポイント、スライド、ラボプロジェクト、本書のプログラムのソースコード、補足資料があり、演習の解答は教員にのみ提供されます。
短所
- 非常に大きい。 21章と広い範囲のミドルウェアおよびアプリケーションの話題は、1つの授業ですべてを扱うことができず、教員や独習者は取捨選択が必要です。
- 2011年の本である。 この版は、その後の分野の発展より前のもので、Web サービス、分散オブジェクト、Google の各章の技術は、執筆時点の実務の状況を反映しています。
- 外に出された内容。 第4版の2つの章(CORBA の事例研究と分散共有メモリ)はもう本書にはなく、著者のサイトでしか入手できません。
- 前方参照。 序文は、いくつかの話題では前方参照が必要になると注意しています。たとえば、第9章の XML セキュリティの内容は、それが参照する第11章の節を読んだあとのほうが理解しやすくなります。
コースにおける位置づけ
Coulouris らの本は、分散システムの授業のための、幅広く事例の豊富な教科書です。van Steen と Tanenbaum の Distributed Systems は、アーキテクチャ、プロセス、通信、名前付け、調整、一貫性、耐障害性、セキュリティを原理優先で構成しており、より新しい版(2023年、著者のサイトで無料の写しを入手可能)です。2冊は互いに代替として使え、本書はミドルウェア、セキュリティ、詳細な事例研究により多くの紙幅を割いています。Vitillo の Understanding Distributed Systems は開発者向けの簡潔な入門書で、先に読めます。Kleppmann と Riccomini の Designing Data-Intensive Applications は、レプリケーション、パーティショニング、データシステムのトレードオフを実践的な角度から論じ、第16〜18章を補います。
Cachin、Guerraoui、Rodrigues の Introduction to Reliable and Secure Distributed Programming は、ブロードキャストとコンセンサスの抽象を厳密に規定する大学院レベルの教科書で、第14・15章の次に進むのに自然な本です。Pacheco の An Introduction to Parallel Programming は、並列マシンやクラスタのプログラミングに関心のある読者の相棒で、本書はこの分野に主に MPI を通じて触れるだけです。
本書の使い方
著者は、学部および大学院入門レベルの授業と、独習を想定して書いています。オブジェクト指向プログラミング、オペレーティングシステム、初歩的なコンピュータアーキテクチャの基本的な知識を前提とし、アルゴリズムは Java か ANSI C、およびそれらから派生した疑似コードで示されます。
実践的な進め方は次のとおりです。
- 中核: まず第1・2章、次に第4・5章と第6章の一部、続いてアルゴリズムとデータのための第14・15章と第16〜18章。
- 必要に応じて: ネットワークに不慣れなら第3章、オペレーティングシステムの支援を知りたければ第7章、ミドルウェア、Web サービス、ピアツーピアへの関心に応じて第8〜10章、セキュリティ、ファイルシステム、名前付けには第11〜13章。
- 任意: モバイル、ユビキタス、マルチメディアシステムに関する第19・20章。
- 総仕上げ: 概念になじんだあとで第21章を読み、Google のインフラストラクチャの中でそれらがまとまる様子を見ます。
- 実習: 著者のサイトにあるラボプロジェクトとソースコード、そして本書の演習を使ってください。
