コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

「Webアプリケーションサーバ」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
Sanchaman (会話 | 投稿記録)
Melan (会話 | 投稿記録)
 
1行目: 1行目:
{{mergeto|アプリケーションサーバ|Webアプリケーションサーバ}}
#redirect [[アプリケーションサーバ]]
'''Webアプリケーションサーバ'''とは、[[Web]]を使用した各種システムにおいて、ビジネスロジックなどの[[アプリケーション]]部分を提供する[[サーバ]][[コンピュータ]]もしくは[[ミドルウェア]]のこと。サービス[[プログラム]]群とその動作に必要な各種機能を提供する。

多くの場合、Web[[クライアント]]からの[[HTTP]]のレスポンス要求を処理する[[Webサーバ]]とバックエンドの[[RDBMS]]を中心とするDB中核層への橋渡しを担い、データの加工などの処理を行う。

なお、アプリケーションサーバを狭義なWebアプリケーションサーバ機能を前提として使用する場合、一般にJ2EEを採用したものを指すが、広義のアプリケーションサーバと呼ぶ場合、マイクロソフトによるCitrix WinFrameや.Net(ドットネット)に準じた独自のものも含む。
ただし、システムに携わるエンジニアやコンサルタントが、単にアプリケーションサーバと言った場合、一般的には狭義の(Web)アプリケーションサーバを指す。

== 概要 ==
Webアプリケーションサーバの基本的な機能は、以下の3つ。

* プログラムの実行環境やデータベースへの接続機能の提供
* 複数の処理を連結するトランザクション管理機能
* 業務の処理の流れを制御するビジネスロジックの実装
である。この3つの機能以外に、各ベンダによる機能強化が行われている事も多い。

なお、Webアプリケーションサーバの機能についての厳密な定義は存在しない。

== Web3層構成 ==
一般的なWebシステムの多くは『Web3層構成』と呼ばれる構成にて設計されている事が多い。このWeb3層設計は、以下の3つの層で構成されている。
* WebブラウザからのHTTPによるアクセス要求を分散処理するWebサーバ層
* HTTP[[トランザクション]]の一貫性を保持し、システム固有の処理を行い、バックエンドで動作するデータベースなどの検索/加工処理などを司るWebアプリケーション層
* システムのデータや管理情報を司るデータベース層

Webシステムをそれぞれ3つの層に実装を分け垂直分散したことで、それぞれの層単位でスケールアウト(サーバの増設で処理性能を向上できること)が可能となり、拡張性やコストパフォーマンスも大きく向上している。

一般に、3階層システムは、クライアントやバックエンド側にビジネスロジックを実装する方式(2階層システム)に比べ、システムの変更や更新、増強などが容易で、柔軟性が高いシステム構成といわれている。特にDB層とアプリケーション層を切り分けたことで、2層システムなどであったシステム更改の際の「高価な基幹データベース自体やそのサーバの必要諸元の変更にあわせて買い換えなければならない」といった悩みが解消されることになった。

== 歴史 ==
[[1990年代]]前半のクライアントサーバベースのシステムでは、クライアント側を専用端末とし、各種機能を用意するリッチクライアント型のシステム構築が主流であった。これは、データベースなどを含むサーバーが非常に高価であり、変更(買い換え)が容易でなかったことによる。
そのため、業務プロセスが変わったら、端末側のプログラムを入れ替え、更新する必要があったが、多くの場合、利用者は社内の人間などに限られていたため大きな問題とはならなかった。

1990年代後半に、インターネットが普及をはじめると、Webブラウザを用いた電子商取引などのニーズが広がってくる。Webでは、サービスの対象者が不特定多数になることが多く、システムの変更にあわせて利用者全てのの環境を更新することは事実上不可能である。そこで、サーバサイドに業務プロセスなど各種アプリケーションを用意することが求められるようになった。
アプリケーションのクライアントからサーバへのシフトは、サーバサイドコンピュータの高性能化(UNIXサーバなどに代表される比較的安価で高性能なサーバの登場)とネットワークの高速化、Javaなどのプログラム言語の処理高速化技術等の進展などにより可能となった。1990年代後半には、Webブラウザをクライアントとして使用し、様々な処理をサーバー側で行うシステムが一般化している。

インターネットを利用したクライアントサーバーシステムでは、サーバー側に多種多様な機能が求められる。例えばeコマースサイトでは、商品情報を表示し、複数の商品の購入チェックボックスをチェックして、最終的に商品の決済を行うには、対話型の処理と、認証/個人情報の保護といったセキュリティ面の確保、安定性・可用性の確保といった各種要件・機能を保障する必要がある。

サーバーが高性能化したとはいえ、大規模なシステムにおいては、これらの要求に全て対処していくのは困難である。そこで、従来Webサーバーだけで処理してきた内容をWebサーバーとWebアプリケーションサーバーの2つに分離することで、より大量のトランザクション処理にも対応できる方式(3層構造システム)が実用化された。
1998年頃から本格的な製品が登場し始めている。

== Webアプリケーションサーバに求められる機能 ==
Webアプリケーションサーバは、以下のような要件を取り込むべく作成が進められ、実装されている。

;システムの拡張性と可用性
:コンシューマを対象とした電子取引商用システムなどの場合、処理要求数が非常に多く(数万件/分といったものも多い)なり、水平(サーバを増やす)/垂直(サーバを機能単位に切り分ける)方向の負荷分散を考慮する必要がある。Webアプリケーションサーバにおいては、垂直方向として認証機能とそれに付随する認証用DBを[[LDAP]]サーバとして切り分ける事が一般化している。水平方向においては、サーバの台数を動的に増やして対処し、ロードバランサ及びWebサーバの振り分け機能により1台辺りの処理要求アクセス数を調整する。
;トランザクションの高速処理
:従来のCGIと比較して、サーバーサイドJava及びスクリプティング環境ではプロセス内の処理はスレッド単位で時分割処理される。1つのプロセス内に複数のスレッドを同時に起動できるため、効率的に処理を行うことができ、必要スペックを小さく出来る。
;トランザクション管理の必要性
:Webブラウザを使用する場合、当然、HTTPを用いたものとなり、トランザクションは要求―応答の単発とならざるを得ない。そのため、一連のアクセスを一貫性を持たせたトランザクションとして管理する必要が発生する。こういったトランザクションの一貫性を保持するトランザクションモニターの機能も必要となる。
;セッション管理の必要性
:システムへの接続や処理リクエストが増えると、単一のWebアプリケーションサーバのみにてサービスを提供する事が不可能となる。そのため、Webアプリケーションサーバのプロセスを増やしたり、サーバ自体を増やす水平分散が必要となる。
:その際、ロードバランサのセッションパーシステンス機能により、仕掛かり中の処理が特定のアプリケーションサーバに割り当てられるが、アプリケーションサーバに異常が発生した際に、他アプリケーションサーバへ処理が引き渡される。これをセッション管理機能によって、再ログイン処理や最初からの対話処理のやり直しをおこなうのではなく、特定の位置までのロールバック処理にて情報を引き継ぎ、ユーザにストレス無く処理を続ける必要がある。
;データベースとの接続性/応答性の確保
:ユーザの要求処理毎に、データベースとの接続とその開放を繰り返すと、大きな[[ボトルネック]]になる。これを回避するため、JDBCプーリングといったDB接続を保持し、それを使い廻す機能を提供する。
;セキュリティ機能
:アプリケーションサーバとして、処理を行う上での各種セキュリティ要件が発生する。これを単にHTTPベースのセキュリティ面(SSLの採用/電子認証)だけでなく、トランザクションベースでも確保する必要がある。
;システム開発期間の短縮化
:Webアプリケーション採用の利点として、Javaなどのプログラム言語とそのフレームワークの採用による開発工程の簡易化と短縮がある。Webアプリケーションサーバでは、開発環境やプログラム群の利用環境を整備することで、それらの利点を活かせるようにしている。

== 製品群 ==
現在、Webアプリケーションサーバーは、マイクロソフト社製品とJavaベースの製品とに大別できる。特に[[J2EE|Java platform Enterprise Edition]]の成功により、'''アプリケーションサーバ'''という用語は ''J2EEアプリケーションサーバ''を示すことが多くなった。

=== J2EEアプリケーションサーバ ===
J2EEアプリケーションサーバ製品上でのアプリケーション動作を規定する言語として採用しているのは[[Java言語]]である。Webモジュールは[[Java Servlet|Servlet]]や[[JavaServer Pages]](JSP)で構築され、ビジネスロジックは[[Enterprise JavaBeans]](EJB)で開発さている。J2EEはWebコンポーネントも含めた標準とJavaによるモジュールを格納するコンテナ機能を提供する。

[[Java Servlet|Servlet]]は、Webコンテナ内で実行されるJavaプログラムで、[[Common Gateway Interface|CGIスクリプト]]に相当する。JSPはサーバロジックへのリファレンスを埋め込んでおくことで[[HyperText Markup Language|HTML]]ページを生成する方法である。HTMLを使う人やJavaプログラマは、並んで作業して互いのコードを見ながら作業することになる。[[Java Beans]]は[[サン・マイクロシステムズ]]のJava2アーキテクチャ上の独立なクラスコンポーネントである。

また、このサーブレットコンテナ上で動作させるWebアプリケーションのフレームワークとして[[Apache Struts|Struts]]([[Apache]] [[Jakarta]]プロジェク)などがある。このフレームワークにも多くの種類があり、互いに影響を与え合って、発展している。

{|class="wikitable"
|- bgcolor="#efefef"
! 製品名
! ベンダー
! バージョン
! リリース日
! J2EE対応
! ライセンス
|-
! [[Geronimo]]
|align="Center"| [[Apacheソフトウェア財団|ASF]]
|align="Center"| 1.0
|align="Center"| 2006年1月5日
|align="Center"| 1.4
|align="Center"| Apacheライセンス
|-
! [[JBoss]]
|align="Center"| JBoss, Inc.
|align="Center"| 4.0.4 RC1
|align="Center"| 2006年2月6日
|align="Center"| 1.4
|align="Center"| LGPL
|-
! WebSphere
|align="Center"| [[IBM]]
|align="Center"| 6.0.2.3
|align="Center"| 2005年10月28日
|align="Center"| 1.4
|align="Center"| プロプライエタリ
|-
! BEA WebLogic
|align="Center"| [[BEAシステムズ]]
|align="Center"| 9.1
|align="Center"| 2005年3月
|align="Center"| 1.4
|align="Center"| プロプライエタリ
|-
! Sun JSAS
|align="Center"| [[サン・マイクロシステムズ]]
|align="Center"| 8.2
|align="Center"| 2006年1月6日
|align="Center"| 1.4
|align="Center"| フリー
|-
! Oracle AS
|align="Center"| [[オラクル]]
|align="Center"| 10g (10.1.3)
|align="Center"| 2005年3月23日
|align="Center"| 1.3
|align="Center"| [[プロプライエタリ]]
|-
! Orion
|align="Center"| Orion
|align="Center"| 2.0.6
|align="Center"| 2005年3月23日
|align="Center"| 1.3
|align="Center"|
|-
! SAP WAS
|align="Center"| [[SAPジャパン|SAP AG]]
|align="Center"| 6.40
|align="Center"| -
|align="Center"| 1.3
|align="Center"| [[プロプライエタリ]]
|-
! WebOTX
|align="Center"| [[日本電気]]
|align="Center"| 6.1
|align="Center"| 2005年3月23日
|align="Center"| 1.4
|align="Center"| [[プロプライエタリ]]
|-
! Cosminexus
|align="Center"| [[日立製作所]]
|align="Center"|
|align="Center"| 2005年3月
|align="Center"| 1.3
|align="Center"| [[プロプライエタリ]]
|-
! Interstage
|align="Center"| [[富士通]]
|align="Center"| 7.0
|align="Center"| 2005年12月
|align="Center"| 1.4
|align="Center"| [[プロプライエタリ]]
|-
! JOnAS
|align="Center"| ObjectWeb
|align="Center"| 4.5.3
|align="Center"| 2005年8月19日
|align="Center"| 1.4
|align="Center"| LGPL
|-
! AppDev Studio
|align="Center"| [[SAS Institute]]
|align="Center"| 3.1.4
|align="Center"| 2005年3月
|align="Center"| 1.3
|align="Center"|
|-
! Blazix
|align="Center"| Desiderata Software
|align="Center"| 1.2
|align="Center"| 2005年3月
|align="Center"| NO
|align="Center"| フリー
|-
! Borland ES
|align="Center"| [[ボーランド]]
|align="Center"|
|align="Center"| 2005年3月
|align="Center"| 1.3
|align="Center"|
|-
! ColdFusion
|align="Center"| [[マクロメディア]]
|align="Center"| 7.0
|align="Center"| 2005年3月
|align="Center"| 1.3
|align="Center"|
|-
! Dynamo AS
|align="Center"| ATG
|align="Center"| 6.3
|align="Center"| 2005年3月
|align="Center"| 1.3
|align="Center"|
|-
! EAServer
|align="Center"| サイベース
|align="Center"| 5.1.9
|align="Center"| 2005年3月23日
|align="Center"| NO
|align="Center"| フリー (GPL)
|-
! Enhydra
|align="Center"| Lutris
|align="Center"| 5.1.9
|align="Center"| 2005年3月23日
|align="Center"| NO
|align="Center"| フリー (GPL)
|-
! exteNd
|align="Center"| [[ノベル (企業)|ノベル]]
|align="Center"| 5.1.9
|align="Center"| 2005年3月23日
|align="Center"| NO
|align="Center"| フリー (GPL)
|-
! JEUS
|align="Center"| Tmax Soft
|align="Center"| 5.0.0
|align="Center"| 2005年5月5日
|align="Center"| 1.4
|align="Center"|
|-
! JRun
|align="Center"| [[マクロメディア]]
|align="Center"| 5.1.9
|align="Center"| 2005年3月23日
|align="Center"| 1.3
|align="Center"| フリー (GPL)
|-
! Apusic
|align="Center"| Kingdee
|align="Center"| 4.0
|align="Center"| 2005年3月23日
|align="Center"| 1.4
|align="Center"|
|-
! OnceAS
|align="Center"| [[中国科学院]]
|align="Center"| 2.0
|align="Center"| 2005年3月23日
|align="Center"| 1.4
|align="Center"|
|-
! Pramati
|align="Center"| Pramati
|align="Center"| 4.1 SP1
|align="Center"| 2005年3月23日
|align="Center"| NO
|align="Center"| フリー (GPL)
|-
! Resin
|align="Center"| Caucho
|align="Center"| 3.0.12
|align="Center"| 2005年3月23日
|align="Center"| NO
|align="Center"| Dual GPL
|-
! Trifork
|align="Center"| Trifork
|align="Center"| T4
|align="Center"| 2005年3月23日
|align="Center"| 1.4
|align="Center"|
|-
! [[WebObjects]]
|align="Center"| [[アップルコンピュータ]]
|align="Center"| 5.3.1
|align="Center"| 2005年11月10日
|align="Center"| NO
|align="Center"| フリー
|-
|}

=== J2EE 以外のアプリケーションサーバ ===
広義な意味での'''アプリケーションサーバ'''という用語は、J2EE(Java)ではなく、他の言語で記載されたアプリケーションを動作させるサーバサービスも包含する。

その最たる例として、[[Windows]]2000以降の安定性とWindowsでのユーザ認証機能を基に、多くの機能を含有した[[.NET]]フレームワークに準じたものがある。ただし、.Net連携の場合もWindowsのユーザ認証機能とそのLDAPを利用したもので、アプリケーションサーバとして採用したシステム数は非常に低く、公式なリリースも報じられていない。

また、.Netフレームワークに準じたもので、[[オープンソース]]や商用のアプリケーションサーバもある。[[Base4アプリケーションサーバ]]や[[Zope]]が例として挙げられる。マイクロソフトの[[Windows Communication Foundation]]はアプリケーションサーバというよりも、通信フレームワークか[[ミドルウェア]]と言うべきものである。

=== ポータルサイト ===
[[ポータルサイト]]は、組織が情報を管理することができる非常に一般的なアプリケーションサーバ機構と言える。ポータルサイトは1つのエントリポイントから全てを提供する。どんなデバイスからも透過的に[[Webサービス]]にアクセスでき、非常に柔軟性に富んでいる。ポータルサイトは組織の内部向けにも外部向けにも提供される。

多くのポータルサイト製品は、J2EEアプリケーションサーバ製品とユーザ認証機能を提供するLDAP、さらにシングルサインオンを実現する拡張機能を連携させたもので、WebSphereやOracleApplicationServer、BEA WebLogicなどの統合化された有償の商用製品によって提供されている。

== Webシステムの分散処理 ==
また、Webサーバにアプレットを置き、それをクライアント側にて自動ダウンロードさせ、アプレットとサーブレットでの処理分散を図る事も多い。
この場合、Javaに拘らずWindows系の.NetやActiveXでのスクリプティングを利用する事もあるが、統一したスクリプトを使用しないがためのセキュリティの脆弱性や問題点を抱え込むことが多く、一般的ではない。

==関連項目==
* [[クライアントサーバモデル]]
* [[コンテンツマネジメントシステム]]
* [[Webブラウザ]]
* [[Java]]
* [[Webサーバ]]
* [[HTTP]]
* [[UNIX]]
* [[Windows]]

==外部リンク==
*[http://www.atmarkit.co.jp/flinux/special/ctl_as/javaas01.html @IT:Linuxで動くJavaアプリケーションサーバ・カタログ]
*[http://www.theserverside.com The Server Side(英語)] : サーバサイド技術専門のWebサイト
*[http://www.microsoft.com/japan/technet/prodtechnol/windowsserver2003/serverroles/appserver/default.mspx Microsoft - アプリケーションサーバーの役割]

== 注記 ==
<references/>

[[Category:Webサーバ|*]]
[[Category:サーバ]]
[[category:World Wide Web]]
[[Category:アプリケーションソフト]]
[[Category:分散処理|うぇふあふりけいしおんさあは]]
[[Category:サーバ|うぇふあふりけいしおんさあは]]


<!--
[[de:Application Server]]
[[en:Application server]]
[[es:Servidor de aplicaciones]]
[[fr:Serveur d'applications]]
[[it:Application server]]
[[nl:Applicatieserver]]
[[pl:Serwer aplikacji]]
[[pt:Servidor de aplicação]]
[[ru:Сервер приложений]]
[[sv:Applikationsserver]]
[[vi:Máy chủ cho chương trình ứng dụng]]
-->
{{comp-stub}}

2006年9月2日 (土) 02:02時点における最新版