
システムの仕組み
4
.
各コンピューターがどのように組み合わさって、一つのシステムを構成しているのでしょうか。
一般的に、システムはクライアントとサーバーと呼ばれるコンピューターに分かれて処理を分担して機能を実現しています。クライアントからサーバーに対して指示を出し、サーバーで処理を実行して結果をクライアントに返します。クライアントではそれを引き継いで処理を行い、結果をユーザーに提示します。ユーザーはクライアントのコンピューターを利用してシステムの操作を行います。
ユーザーが利用するスマートフォンや地図アプリはクライアントであり、地図アプリの背後にある地図サービスの本体は、サーバー側に存在しています。サーバーはユーザーから直接見えなくても、サービスの全体にとって必要不可欠な機能を担っています。
現在、世の中で一般的なWebサービスやモバイルサービスは、以下のようなコンピューター群で構成されています。サービスの規模や複雑さによって構成は千差万別ですが、最も基本となる構成を記載します。
<全体の協調動作:ユーザー<->クライアント<->アプリケーションサーバー<->DBサーバー>
クライアントは、ユーザーが使用するPCやスマートフォン、PCやスマートフォンにインストールされているアプリを指しています。
アプリケーションサーバーとDBサーバーは、サービス提供者が運用しており、ユーザーからは直接見えないようになっています。ユーザーから直接見えるのは、PCのブラウザやスマホのアプリです。
アプリケーションサーバーには、プログラムが格納されています。プログラムがDBサーバーから必要なデータを取得し、データに対して決められた処理を行い、その結果データをクライアントに送っています。ユーザーからの入力データを受け取り、必要な処理を行ってDBサーバーに対してデータを渡すことも、アプリケーションサーバーの役割になります。アプリケーションサーバーからDBのデータを直接操作(データ更新等)するわけではなく、DBサーバーに対してDBに格納されているデータの操作を依頼します。
サービスの利用者が多くなった場合は、「アプリケーションサーバーの能力を増強する」または「複数台のアプリケーションサーバーを使用して分散処理する」という対応を行います。前者のことを“スケールアップ”、後者のことを“スケールアウト”と呼びます。スケールアップは現状使用しているコンピューターの能力を上げることであるため、一番お手軽な方法です。しかし、現状のコンピューターの能力を上げることでは目標を達成できない場合、スケールアウトの方法を選択します。
DBサーバーには、データが格納されています。
アプリケーションサーバーからデータ操作の依頼を受け、その依頼に基づいてDBのデータを操作します。システム全体を見渡したとき、一般的にDBサーバーがシステム全体の性能上のボトルネックになることが多いと感じています。
DBサーバーはアプリケーションサーバーのようにスケールアップとスケールアウトを行って処理能力を高めることが可能ですが、DBサーバーのスケールアウトは技術的にとても複雑になります。複数のコンピューターに分散したデータの整合性を取ることは容易でないためです。そのため、簡単に実現できる“スケールアップ”の方法で対応することが多くなります。ちなみに、データの整合性とは、例えば「Aさんの住所に関するデータが、DBサーバーXとDBサーバーYで同じであるか否か(異なっている状態が発生するか)」を指しています。同じであれば整合性がある、同じでなければ整合性がない、となります。
データの整合性に神経質にならなくてもよいサービスの場合は、スケールアウトの方法で処理能力を向上させることが可能です。
<クライアントの構成:ハード(PC)~OS(Windows・MacOS)~ブラウザ
ハード(スマホ)~OS(Android・iOS)~アプリ>
クライアントのコンピューターの構成を見ていきましょう。
一番下にある層がハードウェアです。人間が直接手に触れることができる対象です。
PCやスマホがそれに該当します。
ハードウェアの1つ上にある層が、OSになります。
PCの場合は、WindowsやMacOSがそれに該当します。
スマホの場合は、AndroidやiOSがそれに該当します。
そして、OSの層の上にアプリケーションの層があり、私たちはそれらを操作して、様々なサービスを利用しています。Webサイトを閲覧したり、メッセージングアプリを使ったり、地図を確認したり、表計算ソフトを利用したりすることがそれに該当します。
ハードウェア・OS・アプリケーションの3つが問題なく連携動作することで、はじめて正常に全体が機能するようになります。どれか1つでも正常に動作していなければ、全体として正しく動作しない仕組みになっています。
OS・アプリケーションは全てプログラム(ソフトウェア)であり、電源が入っていないときは補助記憶装置に格納されています。電源が入ると、補助記憶装置から主記憶装置にデータとともに読み出されて、必要な処理を行います。
<アプリケーションサーバーの構成:ハード、OS、Webサーバー、アプリケーションプログラム実行環境、自社開発したアプリケーションプログラム・外部から購入したアプリケーションプログラム>
アプリケーションサーバーと同様に、一番下の層がハードウェア、そのすぐ上がOSの層になっています。
OSの上の層にWebサーバーがあります。代表的な製品がApache(アパッチ)やNginx(エンジンエックス)です。クライアントから来る処理要求を受け取り、アプリケーションプログラムに仲介します。Webサーバーだけではアプリケーションプログラムは実行できないため、アプリケーションプログラム実行環境と組み合わせて利用します。
アプリケーションプログラムには大まかに2種類存在しており、1つは自社開発したプログラム、もう1つは外部から調達したプログラムです。アプリケーションプログラムによって、必要な処理を行います。DBのデータを操作したい場合(DBからデータを読み込んだり、DBのデータを更新したりする場合)は、アプリケーションプログラムからDBサーバーに対してデータ操作依頼を送ります。
Webサーバー、アプリケーションプログラム実行環境、アプリケーションプログラムはそれぞれプログラム(ソフトウェア)であり、電源が入る前は補助記憶装置に格納されています。電源が入ると主記憶装置に読み出されて動作します。
<DBサーバーの構成:ハード、OS、DBMS、DB>
DBは、データを保存しているファイルのことです。
PCのWindowsやMacOSで日常的に操作している、あのファイルです。
DBは、複数のファイルやフォルダによって構成されています。
DBMSはDBに保管されているデータを管理・操作するためのプログラムです。
DB利用者やアプリケーションプログラムは、DBに保管されているデータを直接操作することはできないため(もしそれを行えばDBが壊れてしまいます)、DBMSを通じてデータを操作することになります。
Oracle、SQLServer、DB2、MySQL、Postgres、Amazon Aurora、Tsurugi等のDB製品に対しては、SQL(データ問合せ言語)と呼ばれるデータ操作言語の命令を出して、DBデータの操作をDBMSに依頼します。DB製品には、例に挙げた製品以外にも様々な別ジャンルの製品が存在し、SQLとは異なる固有のデータ操作言語が存在しています。
たとえば、大量データがリアルタイムに発生するセンサーデータを扱うCQL(継続的な問合せ言語)では、SQLとは異なり、一定の時間内に到着したデータが一定の条件を満たしたときに処理を行います。SQLは来たデータを全てDBに格納しますが、CQLはデータを捨てる仕組みになっています。
<データの流れ:ブラウザもしくはアプリ→アプリケーションサーバー→DBサーバー、DBサーバー→アプリケーションサーバー→ブラウザもしくはアプリ>
データに注目して、システム全体の処理の流れを見ていきましょう。
あるサービスに対するログイン処理の例を取り上げます。
サービスの利用者はブラウザやアプリを立ち上げて、サービスにアクセスします。ブラウザにサービスの住所であるURLを入力するか、アプリのアイコンをタップします。
その後、ブラウザやアプリの認証画面が表示されたらユーザーIDやパスワード等を入力して送信ボタンを押すと、入力データがWebサーバー経由でアプリケーションサーバーに送られて、アプリケーションプログラムによって処理されます。
アプリケーションプログラムはDBサーバーのDBMSに対してデータ取得の問合せを行ってデータを取得し、入力されたユーザーIDとパスワード等が正しい組合せであるかどうかを確認します。正しい組合せであった場合、クライアントのブラウザやアプリに対して必要とするデータを返して、ブラウザやアプリはそのデータを画面に表示します。