コンピュータを制御するオペレーティングシステム(OS)と、特定の処理を行うアプリケーションソフトウェアとの仲立ちをするソフトウェアのこと。 OSの基本的な機能だけでは、アプリケーションソフトが必要とする機能(サーバやデータベースとのやり取りなど)をカバーできない場合に、その必要な機能を集約してパッケージとしてまとめたものがミドルウェアで、OS上で作動し、OSよりも具体的な機能をアプリケーションソフトに提供する。
ミドルウェアの存在により、それぞれのアプリケーションは目的に特化した機能だけでよくなる。そのため、アプリケーション開発の際、共通部分を省くことができ、システムの開発や導入の効率化に役立つ。
構成 |
---|
アプリケーション |
ミドルウェア |
OS |
ハードウェア |
つまり、サーバーもミドルウェア。
Type | Example |
---|---|
Web | Apache HTTP Server, IIS, Nginx |
AP | Cosminexus Application Server, JBoss, Tomcat, WebLogic Server, WebSphere Application Server |
DB | DB2, MySQL, Oracle Database, PostgreSQL, SQLServer |
バックアップ | Arcserve, Backup exec, NetBackup, NetVault |
ジョブ運用 | JP1, Senju, SystemWalker, Tivoli, WebSAM |
監視 | Himenos, JP1, OpenView, Senju, SystemWalker, Tivoli, WebSAM, ZABBIX |
高可用性クラスタ | CLUSTERPRO, HACMP, HAモニタ, HeartBeat, LifeKeeper, MSCS, PRIMECLUSTER, ServiceGuard, VCS |
WebサーバーはWeb機能に特化している。
以降は、各ミドルウェアをかいつまむ。
Webサーバーには、主にクライアントからのリクエストに対して「静的コンテンツを見せること」と「APサーバに動的コンテンツを要求し、返ってきた結果を見せること」という2つの役割がある。
誰が見ても常に同じ内容を表示するもの。Webサーバ内のディスクに保存されている。 eg. 企業ホームページのトップ画像や事業内容のページが
見る人や時間などによって内容が変わるもの。クライアントからリクエストされる度に新たに作成される。 eg. 銀行の残高やECサイト(Amazonなど)のショッピングカート
上記の2つの役割を切り替える具体的な方法はURLで判断されることが一般的。
http://www.bfts.co.jp/aaa.html
の場合、Webサーバに保存されている静的コンテンツaaa.html
を返すhttp://www.bfts.co.jp/douteki/aaa.html
の場合には、APサーバに処理を流して動的コンテンツaaa.html
を返す
- WEBサーバとして求められる機能を満遍なく拡充させる
- プロセス駆動アーキテクチャでマルチプロセス
- リクエストが大量に来た際、プロセスが同時に起動するのでオーバーヘッドが非常に大きくなるというデメリット
- イベント駆動アーキテクチャ、シングルスレッドモデル
- シングルスレッドでループ処理をまわし、キューに溜まったイベントを処理していく処理方式
- C10Kが解決する
TIPS:
「C10K問題」(クライアント1万台問題)とは、ハードウェアの性能上は問題がなくても、あまりにもクライアントの数が多くなるとサーバがパンクする問題のこと。 万を超える接続に対応するプロセスやスレッドを生成するとメモリ上にプロセスやスレッドの管理領域が確保され、使われるメモリサイズもばかにならない。2012/05/04
以下の3つの側面をもつ。
- WEBサーバ
- リバースプロキシサーバ
- メールプロキシサーバ
- Microsoft Windowsの標準Webサーバー(アプリケーションサーバー)サービスで
- マルチスレッドモデルよりだが、ワーカープロセスによるマルチプロセスも組み合わさっているので、ハイブリッドアーキテクチャとしてもよいかも
IISは普及率などからみて、比較対象から除く。
参考:
- http://www.hostingadvice.com/how-to/nginx-vs-apache/
- http://www.eschrade.com/page/performance-of-apache-2-4-with-the-event-mpm-compared-to-nginx/
- http://www.speedemy.com/apache-vs-nginx-2015/
静的コンテンツでは、明らかにNginx > Apache。
1000つの非同期通信のベンチマークテストでは、その差は2.5倍。別の512つの非同期通信のベンチマークテストでは、Nginxが4%少ないメモリ消費で2倍の速さを実現した。
動的コンテンツでは、Nginx == Apache。
あるベンチマークテストによると、同じコンカレンシーだったが、理由としては処理が行われるのがWebサーバ上というよりもPHPの実行環境であったことにありそう。とはいえ、他のベンチマークテストでも、同じような結果が出ている。
Nginx <= Apache。
- ApacheはUnix系の環境とWindowsのフルサポート
- Nginxは、モダンなUnix系の環境とWindowsのサポート少々
ここにきてなんとか、Apacheさん優勢。
どちらにも脆弱性はあるが、Nginxの方が桁違いに小さい。
動的共有モジュールに関しては、Nginx < Apache。
動的共有モジュール(Dynamic Shared Object)のサポートはApacheだけだったが、2016年からNginxでも採用されはじめた。ただ、まだほとんどのモジュールの対応はこれからとなりそう。
nginxは多数のモジュールから構成されており、nginxをビルドするときにモジュールがnginxバイナリに静的に組み込まれます。 追加したいモジュールがあるときにも、同様にnginxのビルド時にそのモジュールを指定することによりnginxバイナリにそのモジュールが静的に組み込まれます。 このようにnginxのモジュールを追加したり変更したりするたびにnginxバイナリ自体をビルドし直す必要があり、運用が煩雑でした。
Nginx <= Apache。
なんともいえないけど、Nginx => Apache。
- Apacheは、メーリスとIRC、StackOverflow、サードパーティからのサポートがある
- Nginxは、メーリスとIRC、StackOverflow、フォーラム、企業は商用向けのプロダクトも販売している
TIPS: こういう見解もある。
http://vitalify.jp/blog/2012/08/apacheとnginxを比較してみた感想.html
○負荷が高くなく、早期セットアップが必要な場合は「Apache」
○負荷が高く、スケーラビリティが要求される場合は「nginx」
○静的ページに同時多数のアクセスが想定される場合は「nginx」
※動的ページは処理内容やサーバスペックによるため現状では判断できない(要調査) ○ある程度の同時アクセスが見込めない場合は「Apache」
○同時アクセス数は小さく、単純にリクエスト数が多い場合は「Apache」
APサーバは、Webサーバから受けたリクエストをもとにJavaやPHPなどで作成されたアプリケーションを実行して動的コンテンツを生成する。また、必要であればDBサーバへリクエストを行い、返ってきたデータを加工して「動的コンテンツ」に埋め込む。
- 日立製作所のAPサーバ
- Java
- RedHatのAPサーバ
- Apache Tomcat
- オープンソースなのでライセンスは無料
- OracleのAPサーバ
- 高い
- 札束で殴る系PJで、大手ベンダーのフルサポートを受けたい企業向け
- IBMのAPサーバ
Tomcatはオープンソースなので一見低コストに思える。
でも、大規模システムの保守性や拡張性を考えると、関連製品・サポート体制の充実した商用のAPサーバの方が安価になるケースもある。
TIPS: APサーバを選択して、比較できる。
https://www.g2crowd.com/categories/application-server
データが大量に保管された場所は、ストレージ。DBサーバーはストレージに新たなデータを書き込んだり、必要な情報を引き出したり更新したりする。
TIPS: データストアとデータベース
データストアとは、データを決められた形式で記憶装置などに永続的に保存・蓄積するソフトウェア、および、そのような機能・処理のこと。データを保存する機能一般を抽象的に表す用語で、ファイルシステムやデータベースもデータストアの具体的な実装の一つということができる。
- DB2ユニバーサルデータベースと呼ばれるRDBMSを中核とする、管理ツールや開発ツールなどを含めた一連の製品群
- 言語はSQL
- オープンソースのDBMS(データベース管理システム)の中で最も広く使われているものの1つ
- LAMPの1つに挙げられているように、PHPなどと組み合わせて、Webサイト構築時のパックエンドを支えるDBMSとして利用されることが多い
- Oracle社が提供している商用データベース
- 高いスケーラビリティ、信頼性、管理性、セキュリティを備えている
- 各種UNIX系、Windows、MacOS Xなど、多くのプラットフォームに対応
- オープンソースのRDBMS
- New BSD Licenseにより配布
- Linux、UNIX、Windows、Mac OS Xなど多くのOS・プラットフォームで稼動
- 中小規模のシステムにおいては、OracleやIBM DB2などの商用DBMS製品の代替となりうる機能・性能を持つ
- Microsoft
関係データベース管理システム (RDBMS) 以外 のデータベース管理システムを指すおおまかな分類語。
TIPS: RDBMS
- 個々のデータ(レコード)がいくつか属性(カラム)を持ち、データの集合が表として保持される
- データやデータの集合に対して関係演算(結合/射影/制限/和など)が行える
NoSQLのデータモデルには大別して次の4つがある。
- Key : Valueを単位としてデータを格納する
- シンプルで応答が早い
- 一般の行志向型DBと同様に表の構造を持ちつつ、カラム単位でデータを保持する
- 行志向では苦手な列単位の大量集計、大量更新が得意
- ノード、リレーションシップ、プロパティによって定まるデータを単位とし、全体でグラフを形成する
- グラフ型の名前の通り、Facebookの知り合い機能等で有効に利用できる
- JSONやXMLのような構造を持ったドキュメントを単位としてデータを格納する
- スキーマレスで格納できる