EnterpriseZine(エンタープライズジン)

EnterpriseZine(エンタープライズジン)

テーマ別に探す

抄録:『絵で見てわかる ITインフラの仕組み 新装版』 ITインフラのキホン:3階層型システムを見てみよう【前編】

  2020/09/14 16:30

 前回は、書籍『絵で見てわかる ITインフラって何だろう 新装版』(翔泳社 山崎 泰史、三縄 慶子、畔勝 洋平、佐藤 貴彦著)の第一章「まずはインフラアーキテクチャーを見てみよう」を前編・後編に分けて紹介しました。今回は、3階層型システムを知ることができる第三章から抜粋して紹介します。

 ※見出しの数字は本書の章立ての番号となります。

3.1 3階層型システムの図解

 第1章で紹介した3階層アーキテクチャについて、まず主要構成要素であるWebサーバー、アプリケーション(AP)サーバー、データベース(DB)サーバーをまとめて1つの図としてみました(図3.1)。

図3.1 3階層システムの全体像
図3.1 3階層システムの全体像

 まず最初に目につくのは棒人間ですよね。これが何かは次節で説明しますが、本書では彼の姿を何度も見かけることになりますので、慣れ親しんでおいてください。

 下から見ていきましょう。3台のサーバーは、スイッチ経由で接続されています。それぞれのサーバーについてズームアップしてみると、CPU、メモリ、ディスク、NIC/HBAといったハードウェア機器が並んでいます。これらは、前章で紹介した物理機器です。

 その上に、CPUとメモリ領域をズームアップした枠組みがあります。この部分が、本章のメインテーマとなる、論理構成です。この枠組みは「オペレーティングシステム(OS)」領域を表わしています。棒人間とカーネル(Kernel)については、次節で説明します。

 データの流れを見ていく前に、論理構成における主要要素について見ていきます。

3.2 主要概念の説明

 OSを理解する上で欠かせない概念である、プロセスおよびスレッドと、カーネルについて簡単に説明していきます。さらに詳しいことが知りたくなった方は、姉妹書『絵で見てわかるOS/ストレージ/ネットワーク 新装版』(ISBN:978-4-7981-5848-8)も併せて読んでみてください。

3.2.1 プロセスおよびスレッドとは?

 まずは注目の棒人間から説明します。皆さんも、インターネットからプログラムをダウンロードし、PCにインストールしたことがありますよね。プログラムをインストールし、アイコンをダブルクリックして起動すると、ウィンドウが表示されますよね。もう1回ダブルクリックすると、別のウィンドウが起動することもあります。これらが、プロセスやスレッドと呼ばれるものです。図3.2をご覧ください。

図3.2 プロセス起動時に何が起きているか
図3.2 プロセス起動時に何が起きているか

 プロセスやスレッドは、プログラムの実行ファイルそのものではありません。OSの上で起動し、ファイルからは独立して、自分で動いている状態になっているものを指します。多くの書籍でも「人型」として記載されるように、プロセスやスレッドが起動するということは、息が吹き込まれ、まるで人間であるかのように活動を開始すことを表わします。本書を読み終わるころには、プログラムを起動するたびに棒人間が脳裏に浮かぶようになりますよ。

 さて、プロセスおよびスレッドが活動するには、メモリ空間が必要です。これはカーネル(後述)により、メモリ上に確保されます。このメモリ空間は、棒人間が自分のために所有する空間、さながらパーソナルスペースとでも言うべき領域です。さまざまな処理を行ない、データのやり取りを行なう上で、このメモリ空間を利用します。図3.2にあるように、プロセス起動時にこの空間が確保されます。

 では、3階層型システムにおけるサーバーごとに具体的にどういったプロセスが起動しているのか、見ていきましょう。図3.3をご覧ください。

図3.3 プロセスとスレッドのメモリ空間の違い
図3.3 プロセスとスレッドのメモリ空間の違い

 まず、Webサーバーを見てみましょう。ここではApache HTTP Serverを用いて説明します。「httpdプロセス」とラベルが貼られている棒人間がプロセスです。その周りを囲むような白い空間がありますよね。これがプロセスのメモリ空間を表わしています。プロセスの具体的な動きについてはあとで出てきますが、ここでは、個々の棒人間が独立したメモリ空間を所持している点に注目してください。

 APサーバーも見てみましょう。「スレッド」とラベルが貼られている棒人間が、スレッドです。Webサーバーとは異なり、APサーバー上の棒人間は1つのメモリ空間を共有していますよね。これがプロセスとスレッドの大きな違いです。プロセスは、自分専用のメモリ空間を主に利用して動きます。スレッドは、ほかのスレッドとメモリ空間を共有した運命共同体となります。

 たとえば、プロセスは夫婦共働きで、財布は別々に管理しているイメージです。一方のスレッドは、奥さんは旦那さんの扶養家族というイメージです。子どもがたくさんできれば扶養家族が増えますが、お財布1つをやりくりすることになりますね。どちらの家族も構造こそ違いますが、生活するという目的は同じです。プロセスとスレッドの関係も似たようなイメージです。

 プロセスとスレッドのどちらを利用するかは、アプリケーション開発者が決めます。その際は、それぞれの特性を理解した設計、プログラミングを行なう必要があります。

 たとえば、プロセスは独自のメモリ空間を持つため、生成時のCPU負荷が、スレッドと比較して高くなります。ですので、マルチプロセスのアプリケーションでは、プロセスの生成コストを下げるために、あらかじめプロセスを起動しておくといったことを行ないます。その実例がコネクションプーリングと呼ばれるものであり、第7章で詳しく説明します。

 複数同時起動を前提とした場合での、プロセスとスレッドのメリットとデメリットを簡単にまとめておきます(表3.1)。

表3.1 プロセスとスレッドの比較
表3.1 プロセスとスレッドの比較

 ただし、プロセス同士がメモリ空間を共有できないわけではありません。たとえばOracle Databaseにおいては、図3.4のように、複数のプロセスが「共有メモリ空間」を相互利用するアーキテクチャを取ります。

 それとは別に、プロセスごとの独自のメモリ領域もあり、用途ごとに使い分けています。各プロセスで共有したいようなデータ、たとえばキャッシュとして格納しているデータ(第4章で詳しく説明します)は共有メモリ上に置きます。一方で、各プロセスのみ利用するようなデータ、たとえば自らの計算結果は、自分専用のメモリ領域に置きます。

図3.4 共有メモリ型DBMSにおけるメモリ管理
図3.4 共有メモリ型DBMSにおけるメモリ管理

関連リンク

著者プロフィール

  • EnterpriseZine編集部(エンタープライズジン ヘンシュウブ)

    「EnterpriseZine」(エンタープライズジン)は、翔泳社が運営する企業のIT活用とビジネス成長を支援するITリーダー向け専門メディアです。データテクノロジー/情報セキュリティの最新動向を中心に、企業ITに関する多様な情報をお届けしています。

バックナンバー

連載:翔泳社の本

もっと読む

All contents copyright © 2007-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5