プロダクションサーバーとしてのWebrick対ThinまたはUnicorn?


117

Webrickを本番サーバーとして使用してはならないのは当たり前のようですが、理由を述べているところはどこにもありません。コンセンサスは「Webrickは開発に問題はないが、ThinまたはUnicornが生産期間の選択である」と思われる。

シンサーバーのホームページを調べたところ、リクエスト数/秒について話していましたが、注釈がないためグラフがよくわかりません。

Webrickと比較してThinまたはUnicornを使用する理由を誰かに教えてもらえますか?また、開発にWebrickを使用するメリットはありますか?私はレールが付属しているのでWebrickを使用してきましたが、それがデフォルトである理由はあるはずだと思います。

ちなみに私はHerokuを使っています。


雑種のような他の人と比べると遅い。
uday

38
ケン、私は何も議論するためにこの質問をしませんでした。誰もが当たり前のWebrickを劣っていると思っているとき、私はどこにも本当の統計を見つけることができなかったので、私は本当に答えを知りたいです。私はそれらの関係者とは何の関係もありません、そしてあなたが言及した議論は私が真の好奇心から求めている質問です。質問を言い換えて、そのように見えないようにするにはどうすればよいですか?
Vlad

24
これは良い質問です。
justingordon 2012

29
このような質問はクローズしないでください。彼らは便利で便利です。すべての自己指定コンテンツの警察は撤回する必要があります。
ケン・スミス

22
「なぜWEBrickを本番環境で使用しないのですか?」それは私が答えてもらいたい質問だからです。プロダクションでWEBrickを使用するつもりはありませんが、「ForProduction®ではないので、明らかに」と誰もが言うのは面倒です。実際にはそれほど明白ではありません。もしそうであったとしても、@ Vladがそうであるように、人々は最終的にStackOverflowに質問する前に質問を調査することはないでしょう。受け入れられた答えは役に立ちます。少なくともいくつかの欠けている機能を指摘しています。正直なところ、自分の答えを提供せずに、それが根拠のないものであると考えるので、質問を閉じるように主張することは役に立ちません。
ジャスティンフォース

回答:


42

いくつかの重要な理由

  1. Rubyで書かれている(http://github.com/ruby/ruby/tree/trunk/lib/webrickを参照
  2. 編集されているため、複数のワーカー(特に、事前フォーク、ライフサイクル管理、非同期処理など)、リダイレクト、書き換えなど、プロダクションWebサイトが通常必要とする多くの機能はありません。

リダイレクト/リライトについて言及するときは、Webrickを使用する場合、別のレイヤー(Rack、Sinatra、Rails、カスタムWebrickコードなど)でリライトを処理する必要があることを指します。これには、書き換えコードを実行するために、追加のルビ「ハンドラー」を起動する必要があります。トラフィックの少ないサイトの場合、事前にウォームアップされたプロセスが何も実行していない可能性があるため、これで問題ありません。ただし、トラフィック量の多いサイトでは、これはフロントエンドサーバー(Apache、Nginxなど)がRuby *を起動せずに処理できるものに対するサーバーの余分な負荷であり、おそらく桁違いに高速です。

* たとえば、ロードバランサーの背後で実行している場合、すべての書き換えトラフィックを、rubyがインストールされていないサーバーにルーティングし、メインサーバーがプライマリトラフィックのみを管理するようにすることができます。この書き換えトラフィックは、SEOのサイト変更または類似したものによる可能性があります。別のケースは、複数のコンポーネントを持つサイトであり、おそらく1つのセクションがRails、もう1つがPHPであり、両方に書き換えが必要です(つまり、古いPHPパスをRailsに書き換えます)。


使用するサーバーに関係なく、delayed_jobを使用してHerokuの複数のワーカーを処理することはできませんか?
Vlad

はい、delayed_jobはWebrickとは無関係です。ただし、ジョブでWebrick APIを使用している場合を除きます(これは正直に言うと、コードの臭いがするためです)。
ジムデビル

私は、Rubyスタック外のリダイレクトについて言及しています。mod_rewriteスタイルのリダイレクトのように。技術的には、あなたがラックの内側にリダイレクト、またはレール、または、多分WEBrickに(私が間違っている可能性が)、それはApacheやnginxの対比較的遅いルビーを、開始要求することができます
ジム・デビル

1
@JimDeville-ユニコーンもRubyで記述
Yarin


4

WEBrickは、長いURIも処理できません。2083文字を超えると、クラッシュが発生します。Thinにはこれらの問題がないため、優れています。すでに開発中です。


私の経験では、Webrickは接続を失い、自動オフになりました。ソフトウェアを開発していて、Heroku PaaSでWeBRICKを選択した場合、自動オフは高速の自動オンによって補償されます(Herokuのアーキテクチャによって自動的に起動されます) )
Daniel AntonioNuñezCarhuayo 2014

3

単純なことや時期尚早な最適化を複雑にすることはあまり好きではありません。WEBrick は、トラフィックの少ないWebサイトであれば、本番環境で使用できます。ほとんどのアプリケーションはそうです。

電子メールの送信やPDFファイルの生成など、サイトで時間がかかる処理を行う場合は、WEBrickをマルチスレッド化する必要があります。一度に複数のリクエストを処理したい。


1

過去にいくつかのセキュリティ問題がありましたが、大きな理由は、本番用のサーバーと比較して非常に遅いためです。


4
統計の比較を見ましたか?私はまた、人々がそのことを言っているのを耳にします(おそらく真実です)が、Web上のどこにも実際の統計比較を見つけることができません...
Vlad

3
Webrickは本番サーバーを意図したものではないので、実際にWebrickをベンチマークする人はいないと思います。Unicorn、Thin、またはPassengerは十分にサポートされており、はるかに優れたオプションです
Jim Deville

0

プロダクションモードで実行する場合のwebrickの最大の弱点は、シングルスレッド、シングルプロセスのWebサーバーであることです。つまり、一度に1つのHTTPリクエストしか処理できません。


シングルスレッドではありません。または、現代のスクリプト言語が(GILで)実装されているのと同じ方法です。しかし、webrickのデータベースアクセスとIOは完全にマルチスレッド化されています。
Lothar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.