WebサーバーとAPサーバの分離について


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

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

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

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

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




一番大きな理由は、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サーバの接続が全くない形になります。




一番大きな理由は、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サーバの接続が全くない形になります。

