技術メモ

技術メモ

ラフなメモ

分散システムを読んだ

分散システムについて勉強しています。以下の書籍を読みました。

分散システム (未来へつなぐデジタルシリーズ)

分散システム (未来へつなぐデジタルシリーズ)

全体として何に関する本か?何がどのように詳しく述べられているか?

分散システムを実現するために必要な技術を解説する教科書

著者はどのような構成で概念や知識を展開しているか?

  • 1章:分散システムの概要
  • 2章:分散システムの種類
  • 3章:分散システムのアーキテクチャ
  • 4章:プロセスとスレッド
  • 5章:クライアントサーバとソケット通信
  • 6章:通信
  • 7章:名前付け
  • 8章:同期
  • 9章:複製と一意性
  • 10章:フォールトトレラント
  • 11章:セキュリティ
  • 12章:分散ファイルシステムとオブジェクト
  • 13章:分散Webシステム
  • 14,15章:分散システムの例

予備知識:コンピュータネットワーク

この本を読んで達成したいこと

分散システムの基礎を整理し、分散アーキテクチャのデザインに活用する

書評

ざっくりと3行でいうと

  • 分散システムを支える技術の教科書
  • 全般的に適度な深さでカバーしている
  • より詳細を学ぶための手引き

この本の紹介

「はじめに」にもあるようにこの本は、15週講義用の教科書として使用することを想定されています。各章の終わりには演習問題があり、問題を解くことで読者の理解度を確かめることができます。また章立てはある程度独立しているので、興味ある章のみ読むことも可能です。

分散システムは,コンピュータとネットワークの両者を統合化するための技術であり,本来1台単独で動いていたコンピュータをネットワークで結び付けようとするものである。それも単に回線で結び付けるものでなく,複数のコンピュータを相互に有機的に結び付け,全体が巨大な情報システムとして動作させるものである。このような分散システムを実現するためには,分散システムアーキテクチャ,プロセス,クライアントサーバ,通信,名前付け,同期,一貫性と複製,フォールトトレラント性,セキュリティ,分散ファイル,オブジェクト,分散Webシステム,パーベイシブシステム,分散組み込みシステム,密結合型分散システムなど各種の新しい技術が必要となってくる。これら技術を本書ではわかりやすく,かつ親切に説明している。

この本1冊で分散システムを支える技術を理解できるように、幅広い領域について解説されています。

この本の3つのポイント

分散システムを支える技術の教科書

目次からわかりますが、分散システムの特定の領域の解説ではなく、全般的に支える技術を網羅的に学ぶことができる一冊です。分散システムを支える技術要素のインデックスとしても活用することができそうです。

全般的に適度な深さでカバーしている

各章を読むことで、その領域での重要な概念や基礎を知ることができます。教科書でありながら、Google File System、 Hadoop や Chord のアーキテクチャなども記載されており、重要なプロダクトのアーキテクチャを知ることができます。

教科書でありながら、実践的に考慮すべき内容について考えることもでき、その一つに10章のフォールトトレラント性があります。分散システムにおいて、耐障害性をどこまで検討するかによってシステムデザインの難易度が大きく変わってくると考えています。フォールトトレラント性の章では故障の定義について触れられていて、非常に参考になりました。分散システム内のプロセスに対する代表的な故障モデルは以下の4つがあります。

故障モデル 説明
クラッシュ故障(crash fault) プロセスは故障が起きるまでは正常に動作し、故障発生後は停止する
オミッション故障(omission fault) プロセスはメッセージの送受信に失敗する
タイミング故障(timing fault) プロセスが時間の仮定に違反する。※例えば仕様で決められた時間内に応答できない場合
ビザンチン故障(byzantime fault) 故障したプロセスの動作に仮定をおかない。プロセスは任意の動作を実行可能である

本書ではプロセスの故障から回復を実現する技術として、プロセス間における合意モデルについて説明されています。

より詳細を学ぶための手引き

各章末には参考文献が記載されており、より詳細を学ぶために必要な文献がわかります。

まとめ

分散システムを支える技術要素について知ることができる教科書です。一度読んだだけでは、すべてを理解することは難しいですが、知識のインデックスとしては十分に活用できます。現場で使用する特定のプロダクトのデザインに直接活かすことのできるポイントは少なそうですが、分散システムをデザインするためのベースとなる概念を知ることができたように感じます。

その他参考