見出し画像

Distributed Systems 3rd Edition

宮澤慎一 (セコム(株))

本画像

Maarten van Steen, Andrew S. Tanenbaum 著
【Paperback】
CreateSpace Independent Publishing Platform ; 3.01 edition(2017),596p., $33.25,ISBN:978-1543057386
【翻訳本参考情報】
日本語訳:分散システム 原理とパラダイム 第2 版,ピアソン桐原;第2 版(2009),ISBN:978-4894714984
日本語訳:分散システム 原理とパラダイム ,ピアソンエデュケーション (2003),ISBN:978-4894715561

※本記事のPDFは情報処理学会電子図書館にに掲載されています。(http://id.nii.ac.jp/1001/00185254/

 本書は,分散システムの基礎となる知識を網羅的に解説した教科書である.私は第1 版にも第2 版にもお世話になった.今回紹介するのは,昨年2017 年に出版されたばかりの第3 版である.

 表紙には,おそらく木製であろう立体パズルが描かれている.その理由は本書の著者のWeb サイト☆1 のトップページに書かれている.分散システムも立体パズルも,分解するのは簡単だが組み合わせるのは難しい,とのことだ.

 そう.分散システムの構築は難しい.間違いない.

 私が出会ってきた経験者は皆,口を揃えてそう言う.分散システムを構築するには,その構成やコンピュータ間のプロトコルを事前によく考え,綿密に設計をしておかないと早晩破綻することになる.したがって分散システムを構築するには,本書のような教科書を読んで巨人の肩までよじ登っておくことが重要である.

分散システムとは

 分散システムという言葉は曖昧で,人によって意味が違うことがある.本書では,分散システムを次のように定義している(p.2).

 A distributed system is a collection of autonomous computing elements that appears to its users as a single coherent system.

 意訳すれば分散システムとは「ユーザから見ると首尾一貫した1 つのシステムとして見えるが,実は複数のコンピュータで構成されているシステム」といえるだろう.

 たとえば,Google は1 つのWeb サイトのように私たちから見えているが,それは1 台のコンピュータで動作しているのではなく,その裏で膨大な数のコンピュータが連携して動作している.つまり,Googleのシステムは分散システムといえるだろう.

何が難しいのか

 分散システムを構築するには,解決すべき難しい課題がいくつもある.

 分散システムは,首尾一貫した1 つのシステムとしてユーザから見えている必要がある.そのため,分散システム内で扱うデータは,コンピュータ間で常に矛盾のない状態や同一内容の状態であることが望ましい.

 しかし,通信には必ず時間を要する.そのため,まったく同時に異なるコンピュータのデータを更新することはできない.したがって,常に矛盾のない状態や同一内容の状態を維持するということは理想論となり,想定する条件を緩和する必要がある.では,データが「矛盾のない」あるいは「同一」である条件をどの程度緩和できるのだろうか.そもそも,その「程度」とはどう定義すればよいのか.また,送受信される際のデータの順序などは,どう解釈すればよいのか.このような検討をしなくてはならない.

 また,分散システムは複数のコンピュータから構成されており,その数が増えれば増えるほど一部のコンピュータが故障してしまう確率も高くなる.そのため,分散システムを構成する要素の一部が故障しても,システム全体としては稼働し続けられるようにするための仕組みが必要となる.

 さらにセキュリティも重要な課題となる.たとえば,通信経路に流れるデータに対する盗聴/改ざん/なりすましや,コンピュータに対する不正侵入やDoS 攻撃など,悪意ある第三者によるさまざまな攻撃からシステムを守らなくてはならない.

 このような課題とその解決方法や事例を,本書では以下9 つの章で構成して解説している(章のタイトルは第2 版日本語版より).

1. 初めに
 分散システムの定義と目指すゴール
2. アーキテクチャ
 分散システムの構成要素や構成例
3. プロセス
 分散システムを論じる上での処理の実行単位となるプロセス
4. 通信
 プロセス間の通信
5. 名前付け
 分散システムの各要素に名前を付けて共有する方法
6. 同期
 プロセス間での協調や同期の方法
7. 一貫性と複製
 分散したプロセスが保持するデータの一貫性とレプリケーション方法
8. フォールトトレラント性
 分散システムを構成する要素の一部が故障しても,そのシステム全体とし
 ては稼働し続けられるようにするための方法
9. セキュリティ
 プロセス間の通信の暗号化や認証など

本書の歴史

 本書の著者はSteen 教授と,良質な教科書を書くことで有名なTanenbaum 教授である.第3 版から,筆頭著者の座がTanenbaum 教授からSteen 教授に譲られている.

 本書は,2002 年に第1 版が出版されてから版を重ねるたびに,内容の変更を大胆に行っている.特にページ数は毎回削減されており,第3 版では第2 版まであった事例研究の章5 つと推薦図書と論文を紹介した最終章が,バッサリ削除されてしまった.その代わりに,第3版では事例が必要に応じて紹介されるようになっている.

 一方,第3 版で追加された大きな点は,Python によって書かれた実際に動作するサンプルコードである.教科書でも一部が掲載されているし,完全なソースコードも著者のWeb サイトから手に入る.

 また,復活劇もあり,第2 版で一度削除されたLinearizability の概念についての解説が,より詳細な解説になって第3 版で復活した.一方,同じく第2 版で削除されてしまった,2 人の将軍問題,分散ガーベッジコレクション,電子支払いプロトコルなど,現在でも興味深いトピックが復活することはなかった.

 興味のある方は,版を重ねるごとに内容がどのように変遷してきたのか,読み比べて見るのも面白いだろう.

 なお,著者のWeb サイトから第3 版と第2 版のPDF ファイルを無料で入手できるので,購入する前に読んでみてはいかがだろうか.PDF ビューアの検索機能と併用することを前提としているのか,比較的ページ数が多い紙の教科書にもかかわらず第3 版からは索引ページが省略されている.

初学者におすすめの1 冊

 本書はそれなりに厚い.600 ページ近くある.尻込みする人もいるかもしれないが,その厚さの理由は丁寧な解説からきている.だからこそ初学者に推薦したい1冊である.

 この10 年ほどで,クラウド,IoT,Hadoop などの分散処理基盤,仮想通貨といったキーワードで,分散システムの仕組みについて論じた書籍や記事を見ることが多くなった.このような技術は,ある開発者グループがゼロから思いついたものではなく,過去の研究の積み重ねを元に開発されたものである.

 このような技術を使いこなすことが求められる現代のエンジニア,学生,研究者には,特に本書を推薦する.本書に書かれていることを前提知識として持っていないと,議論が空中戦になったり上手く噛み合わなかったりするだろう.

 分散システムの教科書はほかにもいくつかあるが,そのほとんどが学術寄りである.しかし本書は,理論と実践について,バランスよく解説している.ただし,理論の正しさを裏付ける証明については一切記載されていないので,必要な人は参考文献の論文を直接読むか,別の教科書を手に入れることをおすすめする.

☆1 https://www.distributed-systems.net

(「情報処理」2018年2月号掲載)

■宮澤慎一(正会員)
 セコム(株)IS 研究所コミュニケーションプラットフォームディビジョン主務研究員.警備に関する大規模分散システムの開発と電子署名を応用したシステムの研究を経験.現在は,大規模分散システムの研究に従事.

連載「ビブリオ・トーク」が1冊の書籍になった『IT研究者のひらめき本棚 ビブリオ・トーク:私のオススメ』も発売中です(2017年2月号まで掲載)。https://www.kindaikagaku.co.jp/science/kd0548.htm


この記事が気に入ったらサポートをしてみませんか?