1.3 垂直分割型アーキテクチャ
分割型においては、サーバーの分割方式、すなわち役割分担を考える必要があります。複数のサーバーでまったく別のことを実施するのか、または似たようなことを実施するのかという観点です。
本節では、サーバーごとに別の役割を担う形とする、「垂直分割型アーキテクチャ」を紹介します。垂直型と記しているのは、特定のサーバーから見たときに、別の役割を持つものは「上」や「下」のレイヤーに位置するという考え方に基づいています。
1.3.1 クライアントサーバー型アーキテクチャ
クライアントサーバー型は、垂直分割型の1つの例です。図1.6のように、業務アプリケーション、ミドルウェア、データベースなどのソフトウェアをそれぞれ「物理サーバー」で動かします。
それらのソフトウェアに対して、「クライアント」または「端末」と呼ばれる小型コンピュータからアクセスし、利用する形となります。クライアントとサーバーは、「クラサバ」やClient/Serverの頭文字を取って「C/S」とも呼ばれます。
![図1.6 クライアントとサーバーの役割分担](http://ez-cdn.shoeisha.jp/static/images/article/13340/13340_06.png)
クライアントサーバー型の特徴は、クライアント側に専用ソフトウェアをインストールする必要があることです。クライアント(端末)には主にPCが利用されますが、最近ではスマートフォンやタブレットも端末となり得ます。
たとえば、株式売買システムでは、グラフ表示や株価の傾向分析はPCで実施し、必要に応じてサーバーから株価データを取得する方式が多いです。この方式では、サーバー側はデータの入出力のみを実施すればよいため処理1件当たりの負荷が少なく、多くのPCからのリクエストを同時にさばくことが可能となります。
しかし、特に企業のITシステムでは、業務アプリケーションの機能追加やバグ修正などで、必ず定期的な更新(アップデート)が必要となります。クライアントサーバー型では、業務アプリケーション変更のたびに、クライアント側のソフトウェアのアップデートも生じます。
皆さんのPC上でも、Microsoft社のWindows UpdateやOracle社のJavaのアップデートがあると思いますが、面倒に感じてスキップしたことはありませんか? 利用者から見ると使い勝手が悪くなりますし、必ずしも利用者がアップデートしてくれるとは限らず、システムのリスクとなり得ます。
また、サーバーに処理の多くが集中することで、拡張性に限界が生じる可能性があります。これらのデメリットを改善しようとしたのが、次に紹介する3階層型です。
■メリット
- クライアント側で多くの処理を実行できるため、少数のサーバーで多数のクライアントを処理できる
■デメリット
- クライアント側のソフトウェアの定期アップデートが必要
- サーバーの拡張性に限界が生じる
1.3.2 3 階層型アーキテクチャ
3階層型は、垂直分割型のもう1つの例で、クライアントサーバー型を発展させたものです。図1.7のように「プレゼンテーション層」「アプリケーション層」「データ層」の3層に分割されていることから、3階層型と呼ばれます。
![図1.7 3階層でのサーバーの役割分担](http://ez-cdn.shoeisha.jp/static/images/article/13340/13340_07.png)
それぞれの層の役割は明確に分かれています。
プレゼンテーション層
- ユーザーからの入力を受け取る
- Webブラウザ向けの画面表示を行なう
アプリケーション層
- ユーザーからのリクエストに応じて、業務処理を行なうデータ層
- アプリケーション層からのリクエストに応じて、データの入出力を行なう
3階層型システムでは、ユーザーはWebブラウザからシステムにアクセスします。たとえばインターネット検索システムでは、ユーザーがWebブラウザに入力した画面は、まずプレゼンテーション層のWebサーバーに送られます。
Webサーバーはそのリクエストを、後ろのアプリケーション層にいるアプリケーションサーバー(APサーバー)に渡します。APサーバーが検索キーワードをもとに何を検索すべきか判断し、後ろのデータ層にいるデータベースサーバー(DBサーバー)に対してデータをリクエストします。この処理の流れは、第3章でもう少し詳しく紹介します。
クライアントサーバー型と比較してのメリットは、特定のサーバーへの負荷の一極集中がなくなったことが挙げられます。また、業務アプリケーションの更新に伴うクライアントのアップデートが必要ではなくなり、ユーザーはWebブラウザを準備するだけでよくなります。
それに、このアーキテクチャでは、すべての処理がAPサーバーやDBサーバーを必要とするわけではありません。たとえば、画像ファイルを読むだけであればWebサーバーのみで処理が完結するため、そこで処理を折り返すことで、ほかのサーバーに負荷を与えません。
ただし、システム全体の仕組みとしては、クライアントサーバー型よりは複雑であると言えます。
■メリット
- サーバーへの負荷集中の改善
- クライアント端末の定期アップデートが必要ない
- 「折り返し」によるサーバー負荷低減
■デメリット
- 仕組みがクライアントサーバー構成より複雑となる
皆さんが今日利用しているインターネットサイト、スマホ/携帯サイト、社内業務システムの多くは、この3階層型アーキテクチャ、またはその発展系を採用しています。
エンジニアとして日々活躍されている方は業務で扱い慣れていることでしょう。本書でも、3階層型アーキテクチャを基本形として、さまざまなアルゴリズムや特性について説明していきます。