Distributed Systems / 分散システム ― 原理とパラダイム

Distributed Systems / 分散システム ― 原理とパラダイム


今や分散システムではないシステムというものは殆ど考えられなくなってきました。今回はその分散システムに関する有名な分厚い教科書を取り上げます。

教科書といっても、お堅い数学書のようなものではなく、分散処理に関する基礎技術を網羅し、かつ、私のような実務者にも理解できるような丁寧な解説書といった雰囲気の本です。

この本の初版のサブタイトルに「原理とパラダイム」とあるように、単なる理論書ではなく、その応用システムにも触れられているので実務者にも親しみやすいと思います。

分散処理技術は現代のシステム構築にはいわば必須の技術なので、実務者としても、その基礎的な原理は抑えておきたいところです。自分が今使っている技術が全体のどのあたりに位置するものかが分かります。

が、そんなにストイックに考えなくても、ざっと斜め読み流して世の中にはどのような分散処理技術があるのかという雑学的知識を得るとか、システム設計や構築におけるキモや選択肢を知るとか、何らかのアイディアを得るため、などのような読み方もできます。

ところで、初版は 2002年あたりですが、コンピューティング分野の進展はすさまじいので、改定が続けられています。

現在の最新版は、英語ですが第4版です。

日本語版は初版と第2版までのようです。

なお、英語版ですが、この本の第二版以降は、以下のサイトから無料でPDF版(personalized copy)を入手できます。

これらは著者の一人の Maarten van Steen 先生がホストしているようで、スライドやソースコード等の資料もダウンロードできます。

また、もう一人の著者 Andrew S. Tanenbaum 先生は、OSやネットワークなどの教科書でも超有名です。

<本の内容>

この本の改定を細かく追っていくと、技術の移り変わりが見えて面白いのですが、ここでは初版(日本語版)と第4版(英語版)の目次レベルの違いを見るにとどめます。

まず、初版のサブタイトルは「原理とパラダイム」となっています。

サブタイトルの通り、大きく二部構成になっています。
  • 原理
    • 通信、プロセス、名前つけ、同期、一貫性とレプリケーション、フォールトトレラント性、セキュリティ
  • パラダイム
    • 分散オブジェクトベースシステム、分散ファイルシステム、分散ドキュメントベースシステム、分散協調ベースシステム

具体的な目次は以下の通りです。

【初版(日本語版)の目次】
  • 第1章 始めに
    • 1.1 分散システムの定義
    • 1.2 目標
    • 1.3 ハードウェア概念
    • 1.4 ソフトウェア概念
    • 1.5 クライアントサーバモデル
    • 1.6 まとめ
  • 第2章 通信
    • 2.1 階層化プロトコル
    • 2.2 遠隔手続き呼び出し
    • 2.3 遠隔オブジェクトインボケーション
    • 2.4 メッセージ型通信
    • 2.5 ストリーム型通信
    • 2.6 まとめ
  • 第3章 プロセス
    • 3.1 スレッド
    • 3.2 クライアント
    • 3.3 サーバ
    • 3.4 コードの移動
    • 3.5 ソフトウェアエージェント
    • 3.6 まとめ
  • 第4章名前つけ
    • 4.1 エンティティに対する名前つけ
    • 4.2 モバイルエンティティの位置決定
    • 4.3 参照されないエンティティの除去
    • 4.4 まとめ
  • 第5章 同期
    • 5.1 クロック同期
    • 5.2 論理クロック
    • 5.3 グローバル状態
    • 5.4 選任アルゴリズム
    • 5.5 相互排他
    • 5.6 分散トランザクション
    • 5.7 まとめ
  • 第6章 一貫性とレプリケーション
    • 6.1 概要
    • 6.2 データ中心一貫性モデル
    • 6.3 クライアント中心一貫性モデル
    • 6.4 配信プロトコル
    • 6.5 一貫性プロトコル
    • 6.6 例
    • 6.7 まとめ
  • 第7章 フォールトトレラント性
    • 7.1 フォールトトレラント性の導入
    • 7.2 プロセスのレジリエンス
    • 7.3 高信頼クライアントサーバ間通信
    • 7.4 高信頼グループ間通信
    • 7.5 分散コミット
    • 7.6 回復
    • 7.7 まとめ
  • 第8章 セキュリティ
    • 8.1 セキュリティの概要
    • 8.2 セキュアチャネル
    • 8.3 アクセス制御
    • 8.4 セキュリティ管理
    • 8.5 事例:KERBEROS
    • 8.6 事例:SESAME
    • 8.7 事例:電子支払いシステム
    • 8.8 まとめ
  • 第9章 分散オブジェクトベースシステム
    • 9.1 CORBA
    • 9.2 分散COM
    • 9.3 Globe
    • 9.4 CORBA、DCOM、およびGlobeの比較
    • 9.5 まとめ
  • 第10章 分散ファイルシステム
    • 10.1 SUN ネットワークファイルシステム
    • 10.2 Coda ファイルシステム
    • 10.3 他の分散ファイルシステム
    • 10.4 分散ファイルシステムの比較
    • 10.5 まとめ
  • 第11章 分散ドキュメントベースシステム
    • 11.1 ワールドワイドウェブ
    • 11.2 ロータスノーツ
    • 11.3 WWW とロータスノーツの比較
    • 11.4 まとめ
  • 第12章 分散協調ベースシステム
    • 12.1 協調モデルの概要
    • 12.2 TIB/ランデブー
    • 12.3 Jini
    • 12.4 TIB/ランデブーとJiniの比較
    • 12.5 まとめ
  • 第13章 推薦図書および参考文献

これに対して第4版の目次は以下のようになっています。

【第4版(英語版)の目次】
  • 1 Introduction
    • 1.1 From networked systems to distributed systems
    • 1.2 Design goals
    • 1.3 A simple classification of distributed systems
    • 1.4 Pitfalls
    • 1.5 Summary
  • 2 Architectures
    • 2.1 Architectural styles
    • 2.2 Middleware and distributed systems
    • 2.3 Layered-system architectures
    • 2.4 Symmetrically distributed system architectures
    • 2.5 Hybrid system architectures
    • 2.6 Summary
  • 3 Processes
    • 3.1 Threads
    • 3.2 Virtualization
    • 3.3 Clients
    • 3.4 Servers
    • 3.5 Code migration
    • 3.6 Summary
  • 4 Communication
    • 4.1 Foundations
    • 4.2 Remote procedure call
    • 4.3 Message-oriented communication
    • 4.4 Multicast communication
    • 4.5 Summary
  • 5 Coordination
    • 5.1 Clock synchronization
    • 5.2 Logical clocks
    • 5.3 Mutual exclusion
    • 5.4 Election algorithms
    • 5.5 Gossip-based coordination
    • 5.6 Distributed event matching
    • 5.7 Location systems
    • 5.8 Summary
  • 6 Naming
    • 6.1 Names, identifiers, and addresses
    • 6.2 Flat naming
    • 6.3 Structured naming
    • 6.4 Attribute-based naming
    • 6.5 Named-data networking
    • 6.6 Summary
  • 7 Consistency and replication
    • 7.1 Introduction
    • 7.2 Data-centric consistency models
    • 7.3 Client-centric consistency models
    • 7.4 Replica management
    • 7.5 Consistency protocols
    • 7.6 Example: Caching and replication in the Web
    • 7.7 Summary
  • 8 Fault tolerance
    • 8.1 Introduction to fault tolerance
    • 8.2 Process resilience
    • 8.3 Reliable client-server communication
    • 8.4 Reliable group communication
    • 8.5 Distributed commit
    • 8.6 Recovery
    • 8.7 Summary
  • 9 Security
    • 9.1 Introduction to security
    • 9.2 Cryptography
    • 9.3 Authentication
    • 9.4 Trust in distributed systems
    • 9.5 Authorization
    • 9.6 Monitoring
    • 9.7 Summary

目次の章レベルでざっと比較すると、初版にあったパラダイムの章が無くなっただけになったように見えます。実際に「原理とパラダイム」というサブタイトルも無くなってます(第3版からこのような章構成になっているようです。)

しかし、実際には原理の中で具体的なシステムに言及する構成になっているため、パラダイムにあたるものが無くなったわけではありません。(が量は減っています。)

また原理の部分についても、章レベルの目次だけ見るとアーキテクチャが加わっている程度に見えますが、実際の内容は、P2P、仮想化、ブロックチェーン他の追加や説明の変化など、時代に応じて改定されています。

これらの変化は、時代にあった技術内容に改定しているという側面もありますが、本のページ数を抑えるという目的も強いようで、内容の追加変更だけでなく、以前の版にあった内容の削除もあります。これにより、初版も 600 ページ強の大著でしたが、第4版も同程度の分量に収まっています。

<感想>

私は昔 CORBA や DCOM を使っていた関係もあって、初版(日本語版)を購入していたのですが、分厚さもあって積読状態でした(笑)。しかし分厚いので書棚の中でも存在感はありました。

最近、ある調べものをきっかけに本をめくってみると、なかなか面白くて結果として全部読んでしまいました。(理解度は別にしても、それなりに時間がかかりました。)

そしてネット検索で第4版(英語版)の存在を知り、その内容に興味を持ちました。

さて、この本の初版では、分散システムを以下のように定義しています。
  • 分散システムはそのユーザに対して単一のコヒーレントシステムとして見える独立したコンピュータの集合である。
そして版を重ねるとそれに対する説明も変化し、第4版ではこの定義文もなくなったようです。

初版のころはクラウドという言葉もなければ iPhone もなかった時代であり、不思議なことに、今では想像できない世界です。今のコンピューティング環境を考えると、もはや分散システムの技術が関係しないシステムを考える方が例外的なくらいに思えます。そして今後も分散システムが扱う範囲はますます広がり、同時にその基礎技術の重要性が増すように思えます。

普遍的な基礎原理は時代が変わっても本から削除されることは殆ど無いと思いますが、具体的なシステムは版が変わると時代に応じて削除されます。

例えば、私が持っている初版には、それなりのページを割いて DCOM や(懐かしい)ロータスノーツの説明がありますが、既に第2版から削除されているようです。こうやってページ数を一定に保っているようですが、自分にとって思い出深いシステムの記載が削除されるのはなんだかさみしいです。この点で個人的に初版を買っててよかったと思いました(笑)。

それはともかく、以前『システム構築技術を俯瞰する(マイクロサービスアーキテクチャ 第2版)』という記事でマイクロサービスアーキテクチャの本を紹介しました。どちらも分散システムに関係する本ですが、主に以下のような違いがあるように思います。
  • 「分散システム」
    • 分散処理に関する基礎理論とその具体的な実装例等を広く俯瞰している。ちなみに第4版では分散システムのアーキテクチャスタイルの一つとして「マイクロサービス」に言及している。
  • 「マイクロサービスアーキテクチャ」
    • 「分散システム」のような基礎理論には言及しないかわりに、実装技術を多く取り上げ、さらに設計や構築のプロセス、運用、チームの組織構造まで、マイクロサービス構築に関連する事柄を広く俯瞰している。

実務書と教科書の違いもありますが、重なる部分もありつつもカバーする範囲が異なります。マイクロサービスを読んでも分散システム技術全体での位置づけは分かりませんが、かといって分散システムだけ読んでもマイクロサービスのシステムを構築する具体的なイメージは湧かないと思います。要するに、どちらも読むべき本という事でしょうか(笑)。

最後に、コンピューティング技術は今後も進展していく事は間違い無いので、今後もこの本が改定されていくと思います(そうあって欲しい)。年に一度くらいは「DISTRIBUTED-SYSTEMS.NET」のサイトをチェックしてその時代の技術を押さえておきたいところです。


コメント

このブログの人気の投稿

Google Document AIで画像から表形式データを抽出する(Vision API OCRとの違い)

VirtualBoxのスナップショット機能

オントロジーエディタ Protégé を使ってみる