第8回 Webサーバとデータベース、ネットショップの仕組みこれまでブラウザの設定や知っておきたい機能を説明しました。今回はブラウザの相手側、Webサーバに目を向けてみましょう。Webサーバの仕事をつきつめると、ブラウザからのリクエストに応じて用意してあるHTMLファイルを送信すること。ではAmazon.comのように1千万点を超える商品を扱うネットショップでは、商品と同じ数のHTMLファイルが用意されているのでしょうか?そこに、最近のWebサイトの仕組みの特徴があります。今回は、Webサーバとデータベースのお話しです。 【今回登場するキーワード】
Webサーバは、ブラウザからの要求に応じて、内部に保存してあるHTML文書や画像などの情報を、インターネットなどのネットワークを通じて送信するのが役割です。しかし、最近のWebサーバは単にサーバ内に保存してあるファイルを送信するだけではすまなくなっています。プログラムを実行して結果を送信したり、結果に応じて処理を変更したり、データベースと連携して複数の処理をまとめて実行するなど、Webに求められるものが高度になるにつれてWebサーバの仕事は多様化し複雑になっています。そのため、最近のWebサイトは複数のサーバとデータベースで構成されるようになってきています。 WebサイトとデータベースWebサーバ、アプリケーションサーバ、データベースサーバとデータベースというのが、Webサービスなどを提供するWebの典型的な構成です。一つひとつのサーバから解説していきましょう。 サイトの玄関口、WebサーバWebサーバとは、ブラウザからの要求を受け取り、要求されたHTMLファイルを返す働きをするサーバソフトウェアを搭載したコンピュータのことを言います。もう少し詳しく言うと、「ブラウザからの要求を受け、HTMLファイルと画像などの付随するファイルを送信する」、「ブラウザからの要求に応じてプログラムを起動し実行結果を送信する」の2つの機能を果たします。 Webサーバには数十から、大型のサイトでは数千のブラウザが同時にアクセスします。それでも、サーバ内部のHTMLファイルを要求通りに送信するだけであれば、それほど大変ではなかったのです。ところが、今日のWebサイトの機能が高度化するにつれ、Webサーバの処理の内容が多様に、しかも複雑になっています。次の表はそのWebサーバの機能一覧です。
上記のような機能に加えて、Webサーバには、動作の安定性や24時間365日動作する耐久性、システム内外の障害への耐性や障害からの迅速な復帰、不正なアクセスや攻撃からデータやシステムを守る高いセキュリティ性能などが求められます。 現在、Webサーバソフトウェアとして市場を二分しているのがApacheとIISです。Apacheは、NCSA httpd Ver.1.3をベースにオープンソースソフトウェアとして機能を拡張してきたWebサーバソフトウェアです。最初の公式リリース(0.6.2)は、1995年8月。FreeBSD、LinuxなどのUNIX系OSはもちろん、Windows(Win32版)などにも移植されており、現在も世界中のボランティアの手で開発が進められています。プロキシ機能やSSL対応などモジュールによる機能追加ができることとオープンソースソフトウェアであることが特長です。 Microsoft IISは、Windows NT Server、Windows 2000 Server、Windows Server2003に標準で付属するMicrosoft社のサーバソフトウェアです。ASP(Active Server Pages)やActiveXによる動的なページを構築するための機能や、GopherやFTPサーバ機能も含まれます。1996年2月より無料でダウンロードできるようになりました。IIS 4.0までは「Internet Information Server」ですが、Windows 2000搭載のIIS 5.0からは「Internet Information Services」となっています。 内部に蓄えたHTMLファイルを表示する限りにおいて差はありません。しかし、他システムとの連携やWebサイト、イントラネットサイト構築などの容易さではIISに分があるようです。 忙しすぎるWebサーバ掲示板やチャット、会員登録、ページのカスタマイズなどユーザーとの双方向のやり取りが発生すると、WebサーバはCGIなどのプログラムを起動して、処理結果を返したり、処理結果に応じて表示を変えたり、他のサーバと連携して処理を行います。また、処理によって表示が変化するデータや大量のデータを扱う場合には、あらかじめすべての表示用HTMLファイルをすべて用意しておくことは不可能です。通常は、そうした場合にデータベースと連携してその都度表示用ファイルを生成します。そうなるとWebサーバは多忙になります。ブラウザとのやり取り、Cookieの送受信、ブラウザごとにどのページを閲覧しているかというセッションの管理などの窓口業務、データ検索や抽出を行うアプリケーションの起動、データベースへの接続、結果を表示するためにブラウザに渡すHTMLの生成などの処理業務、これらを同時に複数のブラウザに対して行うことになります。Webサーバ単体では限界があり、動的コンテンツを扱わない部分も含めたWebサイト全体のパフォーマンスが低下することになります。Webサーバがボトルネックになってしまうのです。ブラウザから見ると反応が遅いWebサイトということになってしまいます。 Webサーバの業務代行をするサーバWebサイトで発生する計算やデータの検索、抽出など、さまざまなアプリケーションを動作させるために専門のサーバを用意して、Webサーバの仕事量を減らす仕組みがあります。これをアプリケーションサーバといいます。プログラムの実行環境やデータベースへの接続、複数の処理を連結するトランザクション管理機能、業務の処理の流れを制御する機能などを実装しています。CGIやPHPなどのサーバサイドプログラムを実行したり、データベースから必要なデータを取得しそのデータを元にHTMLを生成したり、Cookieなどのセッション管理やメールサーバと連携したり、大規模なシステムでは複数のサーバマシンを動作させる時の負荷分散処理や企業の基幹システムとの連携も行います。まさに八面六臂の活躍で、Webサーバのほとんどの仕事を肩代わりします。 その結果、Webサーバはブラウザとの窓口業務に専念できるようになります。多くのユーザーを同時に相手にすることができ、Webサイト全体のレスポンスが向上します。代表的なアプリケーションサーバには、 WebLogic、Tomcat、.NET Framework、WebSphere、Oracle Internet Application Server、ColdFusion、などがあります。 データベース専門のサーバWebサイトには、データベースサーバというデータベースの操作と管理を行う専用のサーバを設けることがあります。検索や更新などのデータベースに対する要求を受けたときに、処理を行って結果をアプリケーションに返します。 詳しくは後述しますが、データベースはデータを蓄えているデータベース本体とデータベースの操作、制御、管理を行うDBMS(Database Management System、データベースマネジメントシステム)から成り立っています。ユーザーが、データを参照したり、検索、更新、追加、削除などの操作を行ったりする場合にはデータベースに対して直接操作を行うわけではありません。データベースに対するすべての操作は、DBMSを通じて行うようになっています。複数のユーザーが同時にデータベースを利用しても競合を避けることができるように、更新中のデータを他者が編集できないように制御したり、編集結果を速やかに反映したりすることができるのは、DBMSの一元管理によるものです。 このDBMSを他のコンピュータから操作できるようにするのがデータベースサーバです。データベースの管理を専門にすることで別のシステムからのデータベース利用やセキュリティ強化、複数のデータベースの制御など、より高度な管理機能を実現します。 代表的なデータベースサーバにOracle、SQL Server、Adaptive Serverなどがあります。 Webサイトの三つのサーバ連携の仕組み前項で説明した三つのサーバが連携するWebサイトの構成図です。 Webサーバはブラウザから要求を受けると、アプリケーションサーバに処理を依頼します。アプリケーションサーバはプログラムを起動して処理を行います。さらに、必要に応じてデータベースサーバに接続してデータの取得を要求します。データベースサーバはDBMSに問い合わせてデータベースから結果を得て、その結果をアプリケーションに渡します。結果はブラウザ表示のためのHTMLファイルに変換されてWebサーバに送られます。 上図のように、Webサーバは窓口業務、アプリケーションサーバは計算や変換処理などアプリケーションの実行や外部のサーバとの連絡、データベースへの接続、複数の処理をひとかたまりにまとめて実行するトランザクション処理など、Webサイトの処理業務の中核を担っています。データベースはアプリケーションサーバが必要とするデータを蓄積してある資材部門、データベースサーバはその管理係です。 このようなWebサイトの構成を3層構造システムと呼びます。ブラウザとWebサーバ間の窓口業務をフロントエンド、データベースや処理係になる業務用アプリケーションをバックエンド、アプリケーションサーバをミドルウェアと呼びます。各サーバが仕事を分担することで総合的なパフォーマンスを向上させるだけでなく、各機能が独立しているため、機能や容量の拡張をサーバ単位で行うことができます。アプリケーションの追加や削除もサイト内の他のサーバへの影響が小さく、改良や変更に強い柔軟なシステムになります。 データベースとは情報をまとめておいて便利に使う仕組みデータベースは「情報を統合・整理・蓄積し、便利に使う仕組み」ということができます。関連する情報まで含めてすべての情報を一つにまとめ、情報に唯一無二の番号や記号を付けて蓄積します。こうして蓄積された情報を一元的に管理することで、データがどこにあるか、どのように配置されているかを意識することなく利用できるようになっています。 データベースの中で最も多く使われているリレーショナルデータベースを例にデータベースのデータの仕組みを見てみましょう。リレーショナルデータベースでは、データを次の図のように行と列からなる表形式で格納します。一つのデータベースの中にはこうした表が複数格納され、表と表は図のように関連づけられています。複数の表の列を商品番号などで結びつけて、組み合わせて在庫金額の一覧を作成したりすることができます。 ネットショップの場合、データベースに納められた商品情報、在庫数、仕入先、注文書、発送情報などさまざまな情報を基に、Webサイトの商品カタログやおすすめ商品表示、顧客管理や売上管理などの管理情報、売れ筋情報やブログへの商品紹介などのマーケティング情報が生成されます。データが一元的にしかも一つに統合されているデータベースだからこそ可能なのです。 また、データベースは複数のユーザーやアプリケーションからのアクセスを可能にする強力な共有機能や大切なデータを守るためのセキュリティ機能など、データ保護、活用のための機能が実装されています。
データベースの三要素データベースは、「データベース」、「DBMS」、「SQL」の三つの要素で構成されます。 データベース本体はデータを格納し蓄積します。データの操作はすべてDBMSが行います。データベースは情報の倉庫です。リレーショナルデータベースでは前述の図のように表の形でデータがそこに格納されています。格納されたデータの追加・更新・削除、新しい表の作成などは、DBMSの仕事です。 DBMSはデータベースの管理人です。アプリケーションとデータの中間に位置して、処理要求の受け付け、処理の実行、結果の出力まで、データベースに対する処理の一切を行います。データベースとアプリケーションのやりとりはすべてDBMSを通ります。DBMSがデータベースの操作と管理のすべてを一元的に行うことで、複数のユーザーが同じデータに同時にアクセスした場合に、編集中のデータを別のユーザーが削除したり編集してしまったりしないように制御します。これを「排他制御」といい、複数のユーザーやプロセスが同時に使用することが前提となっているデータベースにとって重要な機能です。さらに、データベースの中核的な機能として、「トランザクション処理」、「ストアドプロシージャ」という機能があります。 トランザクションとはひとかたまりの処理のことをいいます。例えば、銀行口座からの振込処理では、口座から振込金額を引き出し、その金額を送金処理します。万一、口座から引き出した直後にサーバが停止すると、お金が引き出されたまま、つまり残高はマイナスされたままになります。一方で振込はできていないので、その分の金額がシステムの中で宙に浮いてしまいます。そうならないように、口座からの預金の引き出しから送金処理が終わるまでをひとかたまりの処理とし、それが終わるまではデータを反映させないような制御が必要になります。これをトランザクション処理と言い、データ全体の整合性をとるための重要な機能です。 ストアドプロシージャは、データを処理するための一連の手続き(Procedure、プロシージャ)をデータベース側に格納することを言います。ストアドプロシージャを指定するだけで処理を行うことができるため、ネットワークのトラフィックを減らすことができますし、あらかじめ手順が準備されているためにDBMSの負担も小さくなります。 DBMSに処理を依頼するための専用の言語がSQL(Structured Query Language、エスキューエル、構造化問合せ言語)です。このSQLによりデータベースに依頼することで、データの定義や、参照・挿入・更新・削除・表の結合などデータ操作、更新情報の整合性を保つためのデータ制御などが実行できます。SQLはDBMSが理解する唯一の言語です。言い換えると、SQLでDBMSに要求できればどのようなアプリケーションでもデータベースを利用できるということになります。言語としてのSQLは「商品番号○○の商品名を取得する」を「SELECT 商品名 FROM 商品番号」というように、C言語やJavaのようなプログラミング言語よりも直感的に理解しやすい文法になっていますが、ユーザーがSQLをキーボードから直接入力することはありません。通常はアプリケーションがSQLで出力します。例えば、ブラウザで、ネットショップの商品を選ぶ操作をした時に、アプリケーションがデータベースサーバに対して商品の写真や在庫状況を問い合わせるSQLを送るようになっています。 なお、SQLを「シークェル」と発音する人もいます。SQLは、SEQUEL (Structured English Query Language、構造化英文問合せ言語)が基になっているからです。SEQUEL は1970年に登場し、1976年にSEQUEL 2が発表されています。しかし、1987年に規格化されたときには、SQL87となっており、そのころからSQLという呼び方が一般的になっているようです。 ネットショップに見るWebサーバとデータベース前述したサーバやデータベースがWebサーバでどのように働いているか、ネットショップを例にその様子を概観してみましょう。 ネットショップの売場は、その都度作られる商店の売り場スペースに当たるのがネットショップの商品紹介ページです。商品が多くなればページ数も多くなります。個々のページにはリンクを張ったボタンがあったり、一覧表示、詳細表示、おすすめ商品表示などを別々に作っていたりするのでは、更新、保守、運用が大変です。そこで考えられた仕組みがCMS(Contents Management System、コンテンツ管理システム)です。表示用のHTMLファイルを完全な形でWebサーバに用意しておくのではなく、ブラウザからの要求に応じてHTMLを組み立てて送信する仕組みです。組み立て用の部品は、テキスト(文字)や画像、HTMLやCSS(注1)などをバラバラにした状態でデータベースに保存しておきます。商品紹介ページの要求があれば、専用のHTMLテンプレートに、データベースから取得した商品データを組み合わせて「商品紹介ページ」を組み立ててブラウザに送信します。同じ商品データを別のテンプレートと組み合わせて「今月のおすすめ商品」、「商品一覧表」を組み立てることができます。テンプレートを変えるだけで、同じ商品データがさまざまなページで利用できるようになります。 次の図はネットショップのCMSの概念図です。データベースから情報を抽出し、その結果とあらかじめ用意したWebページのテンプレートを組み合わせてHTMLを生成しています。テンプレートはそれぞれ必要なページ用に用意しておけば、商品をさまざまな形で見せることができます。 CMSは、ブラウザの要求に応じてその都度HTMLを作成します。このようにしてその都度作られるHTMLを動的コンテンツまたは動的HTMLと呼んでいます。これに対して、Webサーバにあらかじめ作成して保存されているコンテンツを静的コンテンツあるいは静的HTMLと呼びます。今日のWeb2.0の世界では、静的なコンテンツでは表現力や可能なサービスに限界があります。動的なコンテンツは今や必須となっており、CMSはこうしたWebサイトを支える中心的な仕組みです。 注1 CSS(Cascading Style Sheets):Webページのフォント、サイズ、画像やレイアウトなどのデザイン表現を記述したファイルで、HTMLとセットで使用される。 ネットショップの重要な仕組み、買い物かご商店のキャッシャーのはたらきに相当するのが、ネットショップのショッピングカート(買い物かご)です。注文の確認から代金の支払いや発送方法の指定など一連の購入手続きのすべてを行うネットショップ用のプログラムです。次の図のような機能を持っています。 注2:機能としてのショッピングカートと区別するために、図中では買い物かごと表記しています。 ネットショップでの買い物は、サイト内の複数のページを行き来しながら、商品を選び、ショッピングカートに入れていきます。ショッピングカートが機能するためには、個々のお客様のブラウザを識別し、複数のページにまたがって継続的に情報を記憶しなくてはなりません。これを実現するのが前々回説明したCookieです。ブラウザの識別や選んだ商品の履歴、表示したページの情報などがブラウザのCookieに保存され、この情報をもとに、ショッピングカートによる買い物が可能になります。当然ながら、ブラウザのCookieの設定はオンになっていないと、ショッピングカートは正しく機能しません。 ショッピングカートプログラムは、ブラウザで商品を選択するたびにデータベースから商品データを読み込み、アプリケーションサーバ内に記憶します。ショッピングカートの中味を確認するボタンをクリックすると、記憶している商品データとテンプレートと組み合わせて選択した商品の一覧表を作り、ブラウザに送信します。お客様名や住所などの顧客情報もデータベースに格納されていることがあり、アプリケーションサーバは入力内容をデータベースに問い合わせたり、データベースに記録したりしています。 「一覧表示」から最後の「注文確定」画面まですべて、データベースからの情報とテンプレートを、ショッピングカートプログラムが組み合わせてHTMLを生成しています。CMSの1種と言えるでしょう。今日では、Webサイトとデータベースはきってもきれない間柄になっています。ショッピングカートなどのアプリケーションが充実してきて、データベースを意識することなく利用できるようになっています。Webサイトの中でも特にネットショップは、商品紹介から顧客情報、在庫管理、発送情報など取り扱う情報量が多く、取扱商品数にかかわらず手動での管理はほとんど不可能な状態になっています。 これからのWebサイトとデータベース今日のWebサイトには、情報の新鮮さ、量の充実、使いやすさ、対話性、楽しさ、快適な速度、安定した動作等々、多様な機能や性能が求められています。閲覧だけの静的なコンテンツの時代から、動的なコンテンツでWebを使う時代に移りました。その変化を先取りし、あるいはその波に乗って成長してきたのがネットショップです。1995年7月に操業のAmazon.comは四半期で28億9000万ドル(2007年第2四半期)を売り上げるまでに成長しました。膨大な取扱商品と顧客数、さまざまなおすすめ商品機能、ワンクリックショッピングなどのネットショップ機能はデータベースとCMSによる動的コンテンツの生成技術なしでは成り立ちません。 Webサーバも進化しています。Webサーバ自体が、すでに単なるサーバソフトウェアではなくなりつつあります。Webサイトは単に静的なページを表示するだけではありません。ビジネス向けであれコンシューマー向けであれ、Webサイト自体がアプリケーションへと進化を遂げています。情報の検索や商品の購買は当然のものですし、ページのカスタマイズや以前の情報を記憶しているサイトも珍しくなくなりつつあります。ファイルを送信するための環境から、アプリケーションプラットフォームへと進化を遂げつつあるのが今のWebサーバです。 また、現在データベースの大半がリレーショナルデータベースですが、今後、増えていくと言われているのがXMLデータベースです。リレーショナル型はデータがなくても空のセルを用意する必要があり、その意味ではExcelの表に似ています。これに対して、テキストベースのXMLは、空セルのような空白のデータを必要とせず、タグによって不定形の階層構造を表現でき、自由度と効率の良さから利用が拡大しつつあります。XMLは、今日のブログなどの隆盛を下から支えている技術であり、B2Bでは電子情報交換の標準となりつつあります。データベースのXML化は、ネットショップをはじめ企業のWebサイトを大きく変えていく可能性があります。 今日、動的コンテンツを使用したWebサイトをごく普通に見かけるようになりました。これらのサイトを動かしているのが、今回お話しした三層構造システムです。今後、マッシュアップのような他システムとの高度な連携や複雑なWebサービスが実現されるにつれ、こうしたwebサイトのしくみはますます磨きがかかってくると考えられます。 おさらい
参考リンク |
All Rights Reserved, Copyright(C) FUJITSUファミリ会 |