Skip to content

Instantly share code, notes, and snippets.

@mesummery
Last active October 10, 2017 09:09
Show Gist options
  • Save mesummery/19b2a938bd04f2f6c0d0f890eb2c3583 to your computer and use it in GitHub Desktop.
Save mesummery/19b2a938bd04f2f6c0d0f890eb2c3583 to your computer and use it in GitHub Desktop.

ミドルウェア

コンピュータを制御するオペレーティングシステム(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サーバー

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を返す

Apache

  • WEBサーバとして求められる機能を満遍なく拡充させる
  • プロセス駆動アーキテクチャでマルチプロセス
  • リクエストが大量に来た際、プロセスが同時に起動するのでオーバーヘッドが非常に大きくなるというデメリット

Nginx

  • イベント駆動アーキテクチャ、シングルスレッドモデル
  • シングルスレッドでループ処理をまわし、キューに溜まったイベントを処理していく処理方式
  • C10Kが解決する

TIPS:

「C10K問題」(クライアント1万台問題)とは、ハードウェアの性能上は問題がなくても、あまりにもクライアントの数が多くなるとサーバがパンクする問題のこと。 万を超える接続に対応するプロセスやスレッドを生成するとメモリ上にプロセスやスレッドの管理領域が確保され、使われるメモリサイズもばかにならない。2012/05/04

以下の3つの側面をもつ。

  • WEBサーバ
  • リバースプロキシサーバ
  • メールプロキシサーバ

IIS

  • Microsoft Windowsの標準Webサーバー(アプリケーションサーバー)サービスで
  • マルチスレッドモデルよりだが、ワーカープロセスによるマルチプロセスも組み合わさっているので、ハイブリッドアーキテクチャとしてもよいかも

Apache vs Nginx

IISは普及率などからみて、比較対象から除く。

参考:

Performance

Static Content

静的コンテンツでは、明らかにNginx > Apache

1000つの非同期通信のベンチマークテストでは、その差は2.5倍。別の512つの非同期通信のベンチマークテストでは、Nginxが4%少ないメモリ消費で2倍の速さを実現した。

Dynamic Content

動的コンテンツでは、Nginx == Apache

あるベンチマークテストによると、同じコンカレンシーだったが、理由としては処理が行われるのがWebサーバ上というよりもPHPの実行環境であったことにありそう。とはいえ、他のベンチマークテストでも、同じような結果が出ている。

Operating System Support

Nginx <= Apache

  • ApacheはUnix系の環境とWindowsのフルサポート
  • Nginxは、モダンなUnix系の環境とWindowsのサポート少々

ここにきてなんとか、Apacheさん優勢。

Security

どちらにも脆弱性はあるが、Nginxの方が桁違いに小さい。

Flexibility

動的共有モジュールに関しては、Nginx < Apache

動的共有モジュール(Dynamic Shared Object)のサポートはApacheだけだったが、2016年からNginxでも採用されはじめた。ただ、まだほとんどのモジュールの対応はこれからとなりそう。

動的モジュールとは

nginxは多数のモジュールから構成されており、nginxをビルドするときにモジュールがnginxバイナリに静的に組み込まれます。 追加したいモジュールがあるときにも、同様にnginxのビルド時にそのモジュールを指定することによりnginxバイナリにそのモジュールが静的に組み込まれます。 このようにnginxのモジュールを追加したり変更したりするたびにnginxバイナリ自体をビルドし直す必要があり、運用が煩雑でした。

Apache .htaccess

Documentation

Nginx <= Apache

Support

なんともいえないけど、Nginx => Apache

  • Apacheは、メーリスとIRC、StackOverflow、サードパーティからのサポートがある
  • Nginxは、メーリスとIRC、StackOverflow、フォーラム、企業は商用向けのプロダクトも販売している

TIPS: こういう見解もある。
http://vitalify.jp/blog/2012/08/apacheとnginxを比較してみた感想.html

○負荷が高くなく、早期セットアップが必要な場合は「Apache」
○負荷が高く、スケーラビリティが要求される場合は「nginx」
○静的ページに同時多数のアクセスが想定される場合は「nginx」
※動的ページは処理内容やサーバスペックによるため現状では判断できない(要調査) ○ある程度の同時アクセスが見込めない場合は「Apache」
○同時アクセス数は小さく、単純にリクエスト数が多い場合は「Apache」

AP(アプリケーション)サーバ

APサーバは、Webサーバから受けたリクエストをもとにJavaやPHPなどで作成されたアプリケーションを実行して動的コンテンツを生成する。また、必要であればDBサーバへリクエストを行い、返ってきたデータを加工して「動的コンテンツ」に埋め込む。

Cosminexus Application Server

  • 日立製作所のAPサーバ
  • Java

JBoss

  • RedHatのAPサーバ

Tomcat

  • Apache Tomcat
  • オープンソースなのでライセンスは無料

WebLogic Server

  • OracleのAPサーバ
  • 高い
  • 札束で殴る系PJで、大手ベンダーのフルサポートを受けたい企業向け

WebSphere Application Server

  • IBMのAPサーバ

選定基準

長期的なコストを考える

Tomcatはオープンソースなので一見低コストに思える。
でも、大規模システムの保守性や拡張性を考えると、関連製品・サポート体制の充実した商用のAPサーバの方が安価になるケースもある。

TIPS: APサーバを選択して、比較できる。
https://www.g2crowd.com/categories/application-server

DB(データベース)サーバ

データが大量に保管された場所は、ストレージ。DBサーバーはストレージに新たなデータを書き込んだり、必要な情報を引き出したり更新したりする。

TIPS: データストアとデータベース

データストアとは、データを決められた形式で記憶装置などに永続的に保存・蓄積するソフトウェア、および、そのような機能・処理のこと。データを保存する機能一般を抽象的に表す用語で、ファイルシステムやデータベースもデータストアの具体的な実装の一つということができる。

DB2

  • DB2ユニバーサルデータベースと呼ばれるRDBMSを中核とする、管理ツールや開発ツールなどを含めた一連の製品群
  • 言語はSQL

MySQL

  • オープンソースのDBMS(データベース管理システム)の中で最も広く使われているものの1つ
  • LAMPの1つに挙げられているように、PHPなどと組み合わせて、Webサイト構築時のパックエンドを支えるDBMSとして利用されることが多い

Oracle Database

  • Oracle社が提供している商用データベース
  • 高いスケーラビリティ、信頼性、管理性、セキュリティを備えている
  • 各種UNIX系、Windows、MacOS Xなど、多くのプラットフォームに対応

PostgreSQL

  • オープンソースのRDBMS
  • New BSD Licenseにより配布
  • Linux、UNIX、Windows、Mac OS Xなど多くのOS・プラットフォームで稼動
  • 中小規模のシステムにおいては、OracleやIBM DB2などの商用DBMS製品の代替となりうる機能・性能を持つ

SQLServer

  • Microsoft

NoSQLという分類

関係データベース管理システム (RDBMS) 以外 のデータベース管理システムを指すおおまかな分類語。

TIPS: RDBMS

  • 個々のデータ(レコード)がいくつか属性(カラム)を持ち、データの集合が表として保持される
  • データやデータの集合に対して関係演算(結合/射影/制限/和など)が行える

データモデル

NoSQLのデータモデルには大別して次の4つがある。

キー・バリュー型

  • Key : Valueを単位としてデータを格納する
  • シンプルで応答が早い

カラム志向型

  • 一般の行志向型DBと同様に表の構造を持ちつつ、カラム単位でデータを保持する
  • 行志向では苦手な列単位の大量集計、大量更新が得意

グラフ型

  • ノード、リレーションシップ、プロパティによって定まるデータを単位とし、全体でグラフを形成する
  • グラフ型の名前の通り、Facebookの知り合い機能等で有効に利用できる

ドキュメント志向型

  • JSONやXMLのような構造を持ったドキュメントを単位としてデータを格納する
  • スキーマレスで格納できる
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment