私は.NET開発者です。 ASP.NET MVCフレームワークがセルフホスティング機能の提供を開始しました。それは(私にとって)とても理にかなっています。自己ホスト型アプリケーションは、外部に依存することなく完全な感じがします。
私が頭に浮かぶ質問は、なぜ誰もがセルフホストしたくないのかということです。つまり、IISがセルフホスティングよりも優れている点はありますか。そうでなければ、Microsoftがasp.netコアとのIIS統合の作成を気にしなかったので、いくつかの利点があると確信しています。
質問を.NETに限定したくありません。だから、私は一緒に行くつもりです-なぜセルフホスティングの代わりにIISまたはApache Tomcatを使用するのですか?
IISには、セルフホストWebサービスではデフォルトで利用できない多くの共通機能が用意されています。スーパーバイザー:Webアプリケーションの状態を監視し、アプリケーションが異常に見え始めた場合(メモリ、CPUなどを多用し、設定可能)、アプリケーションを強制終了または再起動します。 CPU使用率、接続制限などのリソース制限。最小限の特権セキュリティのために特定のユーザーとして実行します。証明書/ SSLを管理します。 1つのポート/インターフェイスを介して多くのアプリケーションをホスト/管理します。コンソールアプリケーションへのリバースプロキシ。リクエストロギングのように、私が言及しなかった他の多くのこと。
私はTomcatに慣れていませんが、同じ話だと思います。セルフホスティングではデフォルトで提供されない追加のホスティング機能を利用でき、自分で実装するのは非常に難しい場合があります。
多くの場合、セルフホストWebサービスを公開する製品は、本番環境でリバースプロキシまたは他のスーパーバイザの背後に置くことを推奨します。これは、クラッシュが発生しても、ネットワークが中断しても正常に機能するようにするためです。たとえば、Dockerサービス用のNGINXを考えています。 .NET空間では、 KestrelはIISを介してリバースプロキシされます が標準的な方法(またはLinux/Mac上のNGINX)として考えられます。
従来、ASP.NETアプリはInternet Information Server(IIS)でWindowsのみでホストされていました。 WindowsでASP.NET Coreアプリケーションを実行するための推奨される方法は、引き続きIISを使用していますが、リバースプロキシサーバーとして使用しています。 IISのASP.NETコアモジュールは、アウトプロセスでホストされているKestrel HTTPサーバーへの要求を管理およびプロキシします。