Webrick als Produktionsserver gegen Thin oder Unicorn?

117

Es scheint selbstverständlich zu sein, dass Sie Webrick nicht als Produktionsserver verwenden dürfen, aber ich kann nirgendwo etwas finden, in dem erwähnt wird, warum. Der Konsens scheint zu sein: "Webrick ist in Ordnung für die Entwicklung, aber Thin oder Unicorn ist die Wahl für die Produktion, Zeitraum."

Ich habe die Homepage von Thin Server nachgeschlagen und es geht um Anfragen / Sekunde, aber ich verstehe das Diagramm nicht wirklich, da es keine Anmerkungen gibt.

Kann mir jemand mitteilen, warum ich im Vergleich zu Webrick Thin oder Unicorn verwenden sollte? Hat die Verwendung von Webrick für die Entwicklung auch Vorteile? Ich benutze Webrick, da es mit Schienen geliefert wird, und ich denke, es sollte einen Grund geben, warum es Standard ist.

Ich benutze übrigens Heroku.

Vlad
quelle
Es ist langsam im Vergleich zu anderen wie Mongrel.
uday
38
Ken, ich habe diese Frage wirklich nicht gestellt, um etwas zu diskutieren. Ich möchte die Antwort wirklich wissen, weil ich nirgendwo echte Statistiken finden konnte, wenn jeder davon ausgeht, dass Webrick minderwertig ist. Ich bin mit keiner dieser Parteien verbunden, und die von Ihnen erwähnten Debatten sind Fragen, die ich aus echter Neugier stelle. Wie kann ich die Frage umformulieren, damit sie nicht so aussieht?
Vlad
24
Das ist eine gute Frage.
Justingordon
29
Fragen wie diese sollten NICHT geschlossen werden. Sie sind nützlich und hilfreich. Alle selbsternannten Inhaltspolizisten sollten sich zurückziehen.
Ken Smith
22
Ich fand dies durch googeln "Warum nicht WEBrick in der Produktion verwenden?" weil es eine Frage ist, die ich beantworten möchte. Ich möchte WEBrick nicht in der Produktion verwenden, aber ich finde es ärgerlich, dass alle sagen: "Weil es offensichtlich nicht für die Produktion® ist." Es ist wirklich nicht so offensichtlich - wenn es so wäre, würden die Leute die Frage nicht untersuchen, bevor sie schließlich nach StackOverflow fragen, wie @Vlad angibt, dass er es getan hat. Die akzeptierte Antwort ist hilfreich; weist zumindest auf einige fehlende Funktionen hin. Tangential ist es nicht hilfreich, darauf zu bestehen, dass eine Frage geschlossen wird, weil Sie der Meinung sind, dass sie ohne eigene Antwort umstritten ist.
Justin Force

Antworten:

42

Ein paar wichtige Gründe

  1. Es ist in Ruby geschrieben (siehe http://github.com/ruby/ruby/tree/trunk/lib/webrick ).
  2. Bearbeitet hat es nicht viele Funktionen, die eine Produktionswebsite normalerweise benötigt, wie z. B. mehrere Worker (insbesondere Pre-Forking, Lebenszyklusmanagement, asynchrone Handhabung usw.), Weiterleitungen, Umschreiben usw.

Wenn ich Weiterleitungen / Umschreibungen erwähne, beziehe ich mich auf die Tatsache, dass Sie bei Verwendung von Webrick Umschreibungen auf einer anderen Ebene (Rack, Sinatra, Rails, benutzerdefinierter Webrick-Code usw.) durchführen müssen. Dies erfordert, dass Sie zusätzliche Ruby-Handler starten, um Ihren Umschreibcode auszuführen. Für eine Site mit geringem Datenverkehr kann dies in Ordnung sein, da vorgewärmte Prozesse möglicherweise bereits nichts tun. Für eine Site mit höherem Datenverkehr bedeutet dies jedoch eine zusätzliche Belastung des Servers für etwas, das die Front-End-Server (Apache, Nginx usw.) ohne das Hochfahren von Ruby * verarbeiten können, und wahrscheinlich um Größenordnungen schneller.

* Wenn Sie beispielsweise hinter einem Load Balancer ausgeführt werden, können Sie den gesamten Umschreibungsverkehr an einen Server weiterleiten, auf dem Ruby nicht installiert ist, und Ihre Hauptserver können nur den primären Verkehr verwalten. Dieser Umschreibungsverkehr kann auf Änderungen der Website für SEO oder ähnliches zurückzuführen sein. Ein anderer Fall wäre eine Site mit mehreren Komponenten, und möglicherweise ist ein Abschnitt Rails, ein anderer PHP, und für beide sind Umschreibungen erforderlich (dh es werden alte PHP-Pfade zu Rails neu geschrieben).

Jim Deville
quelle
Ist es nicht möglich, delay_job zu verwenden, um mehrere Worker auf Heroku zu bearbeiten, unabhängig davon, welchen Server Sie verwenden?
Vlad
Ja, delay_job hat nichts mit Webrick zu tun, es sei denn, Ihre Jobs verwenden Webrick-APIs (was ehrlich gesagt ein Codegeruch ist, wenn er gekoppelt wird).
Jim Deville
Ich beziehe mich auf Weiterleitungen außerhalb des Ruby-Stacks. Wie mod_rewrite Style Redirects. Technisch gesehen können Sie innerhalb von Rack oder Rails oder vielleicht sogar Webrick umleiten (ich könnte mich irren), aber dafür muss Ruby gestartet werden, was im Vergleich zu Apache oder Nginx vergleichsweise langsam ist
Jim Deville
1
@ JimDeville - Einhorn ist auch in Ruby
Yarin
1
github.com/defunkt/unicorn/tree/master/ext/unicorn_http Ein großer Teil von Unicorn ist in C
Jim Deville
4

WEBrick kann auch keine längeren URIs verarbeiten. Wenn diese 2083 Zeichen überschreiten, tritt ein Absturz auf. Thin hat diese Probleme nicht, was es überlegen gemacht hat - bereits in der Entwicklung.

Michael Schmitz
quelle
Außerdem hat Webrick die Verbindung verloren und sich automatisch ausgeschaltet, wenn ich meiner Erfahrung nach Software entwickle und wenn ich WeBRICK in Heroku PaaS gewählt habe, wird das automatische Ausschalten durch die hohe Geschwindigkeit des automatischen Einschaltens kompensiert (ausgelöst durch die automatische Architektur von Heroku )
Daniel Antonio Nuñez Carhuayo
3

Ich mag es nicht wirklich, einfache Dinge zu komplizieren und vorzeitig zu optimieren. WEBrick kann in der Produktion verwendet werden, sofern es sich um eine Website mit geringem Datenverkehr handelt. Die meisten Anwendungen sind.

Wenn Ihre Site etwas tut, das Zeit braucht, z. B. E-Mails versendet oder PDF-Dateien generiert, sollten Sie WEBrick als Multithreading-Programm verwenden . Sie möchten mehrere Anfragen gleichzeitig bearbeiten.

Nowaker
quelle
1

In der Vergangenheit gab es einige Sicherheitsprobleme, aber der Hauptgrund scheint zu sein, dass es im Vergleich zu den Servern, die für die Produktion vorgesehen sind, sehr langsam ist.

Brett Henning
quelle
4
Hast du einen Statistikvergleich gesehen? Ich höre auch Leute das sagen (und ist wahrscheinlich wahr), kann aber nirgendwo im Web einen echten Statistikvergleich finden ...
Vlad
3
Ich glaube nicht, dass irgendjemand Webrick wirklich bewertet, weil es nicht als Produktionsserver gedacht ist. Einhorn, dünn oder Passagier sind gut unterstützt und viel bessere Optionen
Jim Deville
0

Die größte Schwäche von Webrick im Produktionsmodus besteht darin, dass es sich um einen Single-Threaded-Webserver mit einem Prozess handelt, was bedeutet, dass nur eine einzige http-Anforderung gleichzeitig bearbeitet werden kann.

Artur Beljajev
quelle
Es ist kein Single-Threaded. Oder es ist genauso, wie jede moderne Skriptsprache implementiert ist (mit einer GIL). Der Datenbankzugriff und die E / A in Webrick sind jedoch vollständig multithreaded.
Lothar