[書評] 分散システム 第2版 -1/15-
分散システム
技術書籍 未来へつなぐデジタルシリーズ31 分散システム 第2版 を紹介します。本書は分散システムの概要から、分散システムを支える技術要素や用語の解説までを幅広く丁寧に解説した技術教科書です。この書評では、私が重要だと感じた箇所を引用し、私自身が解釈・咀嚼した内容を交えながら全15回に分けて紹介していきます。
第Ⅰ章|分散システムの概要
1.1 分散システムの定義
上記が、分散システムの定義を端的に表現しています。詳しく紐解いていきます。
利用者に対して単一で首尾一貫したシステムとして見えるイメージを図1-1-1に図示しました。分散システムでは、スマートフォンを含む全ての独立したコンピュータの集合が、利用者から見てひとつのサービスシステムに見えています。
独立したコンピュータの集合の説明のため、図1-1-2で「独立した部品」と「独立していない部品」の比較をしました。独立していない部品は、組み合わさることで役に立ちますが、それ単体では役に立たないという特徴があります。一方で、独立した部品はそれ単体でも役に立つという特徴があります。図1-1-1のそれぞれのノード(独立したコンピュータ)は、それ単体でも役に立つので独立した部品です。独立した部品は転用や再利用がしやすいという特徴もあります。
図1-1-3に示す通り、分散処理システムと対になる概念として集中システム(集中処理システム)があります。
分散処理システムと集中処理システムの比較を図1-1-4に記載しました。〇×評価は比較の見やすさを重視して、やや誇張して表現しています。分散システムは利用者の増加などに伴う規模の縮小や拡大がし易い特徴があります。この規模の変化に対応できる特性をスケーラビリティ(Scalability)と呼びます。分散システムはその特性上、自身のシステム周辺以外の全体を把握できないため、システム全体の最適化が難しいという特徴があります。
尚、本書に記載はありませんが、「分散(distributed)」に似た概念として「非中央集権(decentralized)」があります。前者はシステム構造という観点での分散を指し、後者は権限・権力の観点での分散を指すことが多い様です。本書(分散システム)の原典である「DISTRIBUTED SYSTEMS」では下記のように記述されていています。
1.2 分散処理と並列処理
「分散処理」と「並列処理」は似ているように見えますが、全く異なる概念です(同一のものでも、排他的なものでもない)。「並列処理」と対になる用語は「逐次処理」なので、この二つの比較を図1-2-1に図示しました。
複数の処理を時間的に複数人数で同時並行で処理することを「並列処理」、複数の処理を時間的に一人で順番に処理することを「逐次処理」と呼びます。人間の能力が均一であれば「並列処理」の方が、複数の仕事を短時間で終えることができます。
次に、マイケル J. フリンによって提案された、並列処理の分類方を転載します。
Instruction poolは、命令(コマンド)セットの集合です。Data poolは、命令対象のデータの集合です。図1-2-2は、これらがPU(Processing Unit:処理単位)に引き渡されて処理するパターンを図示しています。図1-2-3でそれぞれの特徴を説明します。MIMDは分散システムで広く利用される平行処理になります。
最後に、「並列性(Parallelism)」と「並行性(Concurrency)」の違いです。英単語のConcurrencyは同時実行性という意味もあります。本書では下記のように説明されています。
前述したMIMDやSIMDのように複数のデータに対して同時に命令が実行できる並列処理が出現したことから、プログラムの処理時間を短縮する並行プログラム言語が出てきました。並行プログラミング言語では時間的に同時に実行できる部分を明示的に記述できるという特徴があります。
1.3 分散システムの目的
集中システムに対して分散システムを構築する主な目的として、3つの特性が記述されています。それぞれの特性の説明を図1-3-1に記載しました。
次に、それぞれの特性に対する分散処理システムと集中処理システムの比較を図1-3-2に記載しました。〇×評価は比較の見やすさを重視して、やや誇張して表現しています。図1-1-4とも連動していることが判ります。
これらの3つの特性においては、集中システムよりも分散システムが優れています。局所性が高いと、セキュリティリスクや情報保護を行う目的を達成しやすくなります。
1-4 分散透過性
分散システムが、分散システムであることを利用者に気づかれないという特徴を透過性(Transparency)または透明性と呼びます。1-1で前述した「利用者に対して単一で首尾一貫したシステムとして見える」という性質と読み替えられます。透過性の種類は以下の7点に分類されます。
リソースは資源のことで、大まかに言うとデータやサービスのことです。具体例を挙げるとWebページもリソースです。
アクセス透過性の例は、スマートフォンでアプリが通信するプロトコルをユーザが意識しないことなどが挙げられます。位置、移動、再配置の透過性の例は、Webサイトが物理的にどこにあるのか気付かないこと、またWebサイトの物理的なアクセス先が変わっても気付かないことなどが挙げられます。
複製透過性は、Webブラウジングのキャッシュ(一時的にページを利用者の近くに保存すること)などが挙げられます。並行透過性や障害透過性は、サービスシステム全般で既にどこでも実現されており、この仕組みを利用者が知ることは殆どありません。
1-5 開放性
本項の最初にプロトコルの説明があるので、図1-5-1にまとめました。
次に、プロトコルの2つの種類とその特徴を図1-5-2にまとめました。言うまでもなく、開放性(Openness)を持つのはオープンプロトコルになります。
オープンプロトコルは新規事業者の参入が容易で、製造企業間の競争を促し、製品の低価格化をもたらします。分散システムは独立したコンピュータの集合体(1-1項参照)であるため、分散システムを構成する機器はオープンプロトコルに従うことが推奨されます。
1-6 分散システムの制約
米国のサン・マイクロシステムズのPeter Deutsch、James Goslingらが提唱した分散コンピューティングの落とし穴8つを紹介していますので、図1-6-1でまとめました。
6番以外は、全てネットワークに関するものであることが見て取れます。ネットワークはしばしば使えなくなる(切れる)ものであること、無線通信やベストエフォート型の通信経路では不安定であることを前提に分散システムを設計する必要があることが判ります。5番はネットワークトポロジーを指しており、物理的な接続構成やデータの流れる経路等は動的に変化することを考慮するように注意喚起しています。
ー この書評は、次回(2/15)に続きます ー