29

私はシステム管理者にとって本当に初めてで、nginx(静的ファイルを提供する)とgunicornをWebサーバーとしてVPSをプロビジョニングしただけです。

私は最近、他のさまざまなものについて読んでいます。私は他のツールについて知りました:

nginx : 高性能 HTTP サーバーとリバース プロキシ、および IMAP/POP3 プロキシ サーバー

haproxy : 高性能ロードバランサー

varnish : HTTP リバース プロキシのキャッシュ

gunicorn : python WSGI http サーバー

uwsgi : 別の python WSGI サーバー

上記の 5 つのツールすべてについて読んでいますが、どのツールがどのような目的で使用されているかについて混乱しています。誰かが私に素人の言葉で私に説明してもらえますか?

4

3 に答える 3

83

新しいVPSでいくつかのWebサイトをホストすることを計画しているとしましょう。各サイトに必要なツールを見てみましょう。

HTTPサーバー

ウェブサイト「アルファ」は、純粋なHTML、CSS、およびJavascriptで構成されています。コンテンツは静的です。

誰かがウェブサイトAlphaにアクセスすると、そのブラウザはHTTPリクエストを発行します。VPSのIPアドレスに転送されるように要求するように(DNSおよびネームサーバー構成を介して)構成しました。ここで、VPSがそのHTTPリクエストを受け入れ、それをどう処理するかを決定し、訪問者のブラウザが理解できる応答を発行できるようにする必要があります。Apache httpdNGINXなどのHTTPサーバーが必要であり、調査を行って最終的にNGINXを決定したとします。

アプリケーションサーバー

ウェブサイト「ベータ」は動的であり、DjangoWebフレームワークを使用して記述されています。

WSGIは、 Pythonアプリケーション(djangoアプリ)とアプリケーションサーバー間のインターフェイスを記述するプロトコルです。したがって、今必要なのはWSGIアプリサーバーです。このサーバーは、Webリクエストを理解し、アプリケーションのさまざまなオブジェクトに対して適切な「呼び出し」を行い、結果を返すことができます。ここには、 gunicornuWSGIなど、多くのオプションがあります。あなたがいくつかの調査を行い、最終的にuWSGIを決定したとしましょう。

uWSGIは静的コンテンツのHTTPSリクエストも受け入れて処理できるため、必要に応じて、ウェブサイトAlphaを完全にNGINXで提供し、ウェブサイトBetaを完全にuWSGIで提供することができます。そしてそれはそれでしょう。

リバースプロキシサーバー

ただし、uWSGIは静的コンテンツの処理でパフォーマンスが低いため、Webサイトのベータ版であっても、画像などの静的コンテンツにはNGINXを使用することをお勧めします。しかし、その場合、何かがリクエストを区別し、適切な場所に送信する必要があります。それは可能ですか?

NGINXはHTTPサーバーであるだけでなく、リバースプロキシサーバーでもあることがわかりました。着信リクエストをuWSGIアプリケーションサーバーなどの別の場所にリダイレクトし、応答を収集してに送り返すことができます。元のリクエスター。素晴らしい!したがって、すべての着信リクエストをNGINXに送信するように構成します。これにより、静的コンテンツが提供されるか、必要に応じてアプリサーバーにリダイレクトされます。

複数のWebサーバーとの負荷分散

また、国際的に人気があり、大量のトラフィックを受信するブログであるWebsiteGammaをホストしています。

ガンマの場合、複数のWebサーバーをセットアップすることにします。すべての着信リクエストはNGINXを使用して元のVPSに送信され、ラウンドロビン方式で他のいくつかのWebサーバーの1つにリクエストをリダイレクトし、元のリクエスターに応答を返すようにNGINXを構成します。

HAProxyは、トラフィックの多いサイトの負荷分散に特化したWebサーバーです。この場合、NGINXを使用してサイトGammaのトラフィックを処理することができました。他のシナリオでは、高可用性クラスターを設定することを選択できます。たとえば、HAProxyなどのサーバーにすべてのリクエストを送信します。HAProxyは、元のVPSと同様のnginxサーバーのクラスターにトラフィックをインテリジェントにリダイレクトします。

キャッシュサーバー

トラフィック量が非常に多いため、WebサイトガンマがVPSの容量を超えました。代わりにウェブサイトDeltaをホストしていて、ウェブサーバーがDeltaを処理できない理由は、コンテンツが非常に多い人気のある機能が原因であるとしましょう。

キャッシュサーバーは、どのメディアコンテンツが頻繁に要求されているかを理解し、このコンテンツを別の方法で保存できるため、より迅速に提供できます。これは、ディスクIO操作を減らすことによって実現されます。人気のあるコンテンツは、代わりにメモリまたは仮想メモリに保存できます。このタイプの最適化とサーバーWebサイトGammaをより効果的に実現するために、既存のNGINXスタックをVarnishMemchachedなどのテクノロジーと組み合わせることができます。

于 2012-11-03T17:25:18.840 に答える
6

Web ブラウザーからリクエストを行ったときにヒットする順序で、それぞれについて非常に簡潔な (非常に非公式な) 説明を記載します。

  • HAProxyはトラフィック負荷のバランスを取るため、Web ページが 1 秒あたり 5000 ヒットを受信して​​いる場合、1 つの Web サーバーだけではそれを処理できないため、HAProxy は背後にある Web サーバー間でヒットのバランスを取ります。

  • Varnishはキャッシュ サーバーであり、Web サーバーの前にあり、HAProxy の背後にあります。そのため、リソースが Varnish によって既にキャッシュされている場合、Varnish は要求を背後の Web サーバーに渡すのではなく、要求自体を処理します。

  • ngingxgunicornuwsgiは、varnish の背後にあり、varnish が通過させるリクエストを取得する Web サーバーです。これらの Web サーバーは、最適化された設計を使用して高負荷 (1 秒あたりの要求) を処理します。

于 2012-11-03T16:16:23.443 に答える