18449


WebサーバとAPサーバの分離のメリット・デメリットはなんでしょうか?

現在一台のサーバに、Webサーバとしての役割とAPサーバとしての役割を両方乗せようと思っております。

ですが、もう一台サーバーを立てて分離させることによって、かかる費用よりも大きいメリットが得られるのなら、そうしたいのですが、決め手となる判断材料がなくどうしたらいいか迷っております。

ざっと調べた限り、メモリの量が足りなくなりがちなので分離するといった理由がよく挙げられているようです。そうだとしたら、メモリが足りていれば分ける必要はないということでしょうか?  
それとも他に分離すべきメリットというのは存在するのでしょうか?

どうぞよろしくお願いいたします。


CC BY-SA 3.0
2015-11-05T03:39:58.727
18417
2017-06-19T11:16:54.520
2015-11-05T06:55:16.780
7290
9078
question
詳細設計 メモリ管理
WebサーバーとAPサーバの分離について


１台のサーバで両方を稼働させている時に、(1)メモリの不足、(2)CPUの高負荷、(3)実行プロセス数増大、といった原因でレスポンスが悪くなる兆しがみられるのであれば、複数のサーバを検討すべき時だと思います。

サーバを増やして期待されるのは性能（レスポンス）の良さです。１台構成でレスポンスが悪いのなら複数化のメリットが大きく、１台でもレスポンスが悪くないのなら複数化のメリットが感じられないという事になります。  
こうした事から「１台でレスポンスが悪くなった時」に複数台化の検討を始めるのが良いと考えられます。


CC BY-SA 3.0
2015-11-05T07:25:59.427
18427
2015-11-05T07:25:59.427
217
18417
answer


WebサーバとAPサーバを分離する目的としては、挙げられているようなハードウェアリソースの分散化目的以外に、セキュリティ対策を目的として実施されることが多いです。

Webサーバ(外部から接続される)とAPサーバの間にファイアウォールを敷いてネットワークを分離することで、外部からAPサーバへのアクセスを制限できるようにするわけです。

公的/準公的なドキュメントでわかりやすそうなのが見つからなかったのですが、[IPAのこちらのPDF](http://www.ipa.go.jp/files/000025497.pdf)の図の「公開Webサーバ」と「CMS用機材」のような形でWebサーバ/APサーバをそれぞれ配置することになります(実際にはAPサーバが処理する情報の性質によって配置する場所は変わりますが、典型例として)。

"APサーバ", "Webサーバ"に加えて"DMZ"や"ファイアウォール"といった単語を加えて検索してみると、関連する情報がヒットするかと思います。

* * *

私は[suzukisさんの回答](https://ja.stackoverflow.com/a/18449/2808)とは意見が異なります。

>
> APサーバがセキュリティ侵害を受けた結果2次的な攻撃の発信源になる、というところまで考えると、保護すべき他のサーバと同じネットワークに配置するのは最悪の選択なので、DMZにおいて置いた方が遙かにましということになります。

とありますが、確かに扱う情報によってはファイアウォールの外(DMZ)に置いておいたほうが良い性質のAPサーバもあるかとは思います。  
が、ある特定のAPサーバを考えた場合、ファイアウォール内にあろうが外にあろうがアクセス可能な資源は当然ですが同じなので、一旦乗っ取られてしまえば被害は同程度に発生します。  
(ファイアウォール内に設置するのはセキュリティ侵害を抑えるためであって、セキュリティ侵害後の影響抑制のためではない。)

最近話題に挙がった[Javaの主要APサーバに存在すると言われた脆弱性](http://blog.trendmicro.co.jp/archives/12577)(Apache
Commons Cllections由来のもの)を用いた攻撃として

> Weblogic や WebSphere
> に対して可能だと言われているのは、アプリケーションサーバを起動または停止するために通常、組織内で使用する管理ポートへの攻撃です。

というものがありますが、例えばこの問題に対しては、ファイアウォールの内にAPサーバを置いていれば外部から管理ポートへアクセスできないが保証されていますので、「直ちに影響はない」と即答することが可能になります。


CC BY-SA 3.0
2015-11-05T07:40:46.130
18428
2015-11-29T09:29:36.880
2017-04-13T12:52:38.920
-1
2808
18417
answer


Web3層アーキテクチャで調べると色々出てくると思いますが、サーバーを機能で分割することで、システムより柔軟性を得られ、それにより幾つかメリット享受できます。

  * 性能の向上 
    * 静的コンテンツと動的コンテンツの負荷が分散される
    * ハードウェアリソースの最適化 (WebとAPだと必要なリソースが違ったりする)
  * セキュリティ施策が取れる 
    * ネットワーク分離 （※）
    * 不正アクセスによる被害のリスクが下がる（無くなるわけじゃない）
  * 拡張性や保守性、耐障害性の向上 
    * AP が落ちても かろうじてWebだけは動く（ソーリーページを表示させるなどできる）
    * Web と AP それぞれ単独にメンテナンスできる

デメリット

  * 台数が増えるのでライセンスや保守のコストが増える。
  * ネットワークトラフィックが増える
  * それぞれを2重化しないと稼働率はより低くなる事が考えられる
  * 柔軟な運用が求められる（より面倒になる）

※APにはDBの接続情報を持ってたりしますので、APが非公開NWにあるのはそれだけで十分なメリットのような気もします。1台の場合、せっかくDBを分離しても接続情報が分かれば芋づる式にヤラれてアウトです。


CC BY-SA 3.0
2015-11-05T13:59:04.133
18440
2015-11-05T13:59:04.133
5008
18417
answer


一番大きな理由は、WebサーバとAPサーバでは求められる特性に正反対の部分があると言うことです。

## Webサーバ

  * 接続数 多い～極めて多い
  * 一接続で消費されるリソース 少ない
  * スケールアウト 容易
  * セキュリティリスク 低い

## APサーバ

  * 接続数 1～多くても数100
  * 一接続で消費されるリソース 多い
  * スケールアウト 容易ではない
  * セキュリティリスク 極めて高い

特に問題なのは、ネットワークの接続数です。これはCPUやメモリなど容易に増やせるリソースとは違うところで上限が出てきます。いわゆるC10K問題というやつです。接続数が極めて多い場合、サーバを複数にしないとさばききれません。

一方、APサーバはそれに合わせて複数台構成にする、というわけには簡単にはいきません。APサーバは一般にスケールアップで容易に性能が増やせるので、その点からも複数台構成にする、というのは無駄になります。

最初から極端に負荷が高いことが見込まれている場合はAPサーバも複数台構成を前提にすることもありますが、それにしてもWebサーバの数とは全然違います。

･･･というわけで、これを考える意味があるのは、「サーバ1台では処理しきれない」場合です。サーバ1台で十分で、性能-
コスト比で考えるなら、サーバを分離する意味は全くありません。

## セキュリティ？

これ勘違いしてる人が非常に多いです。

Webサービスに対するセキュリティ侵害のほとんどは、正規に外部に公開されているI/Fを経由してAPサーバ(アプリケーションかミドルウェア)の脆弱性を攻撃されるものです。一方、Webサーバ(HTTPサーバ)にはリスクの高い脆弱性というのはほぼ無いと言っていいでしょう。したがって、

  * APサーバがWebサーバと分離されているかどうか
  * APサーバがDMZにあるか別ネットワークか

とかいうのは、攻撃耐性という観点ではほとんど違いがありません。

非公開ファイル(アプリケーションの内部ログなど)の誤公開、といったポカミスのようなものは防げるかもしれませんが、まぁその程度の話です。

APサーバがセキュリティ侵害を受けた結果2次的な攻撃の発信源になる、というところまで考えると、保護すべき他のサーバと同じネットワークに配置するのは最悪の選択なので、DMZにおいて置いた方が遙かにましということになります。

セキュリティ上の観点では、CMSやEコマースシステムなどのように、

  * 外部に公開するサービス
  * 組織内部からのみ利用する管理システム

みたいなものがある場合に、

  * 外部接続はフロントエンドのWebサーバ経由
  * 内部接続はAPサーバを直接触るか、それ用に別のWebサーバを用意してそれ経由

という分け方をすることはあります。極端な例は静的ファイル出力型のCMSで、これはWebサーバ→APサーバの接続が全くない形になります。


CC BY-SA 3.0
2015-11-06T01:03:20.007
18449
2015-11-06T08:42:28.670
2015-11-06T08:42:28.670
5793
5793
18417
answer


サーバ機のスペックがあまりよくない場合は、ミドルウェアで役割をわけることができるので、その分複数台にわけることで負荷を軽減できるメリットが一番大きいでしょうか。機器の増設や更新・停止のしやすさもメリットになります。  
もちろん物理的・論理的にマシンがわかれてしまうのでネットワークのオーバーヘッドが発生しますから、ネットワーク構成によってはパフォーマンスに問題が出ます。

また、複数台の機器にわけることで保守・運用費用も増えるかも知れませんが、自動監視やアプリケーション搭載の自動化などができればコスト改善やトラブル緩和もできるかも知れません。

対して、超絶ハイスペックのサーバ機1台にてVMを複数立ち上げて行う方法もありますね。  
ただしこれは構築や運用面で恐ろしく高価になってしまうでしょうから、初期導入の段階でそれほど投資できるかどうか…でしょうか。

ご参考になれば幸いです。


CC BY-SA 3.0
2015-11-06T01:45:12.347
18450
2015-11-06T01:45:12.347
5778
18417
answer