Üretim sunucusu olarak Webrick mi, Thin mi yoksa Unicorn mu?


117

Webrick'i üretim sunucusu olarak kullanmamanız gerektiği kanısına varmış gibi görünüyor, ancak nedenini belirten hiçbir yer bulamıyorum. Fikir birliği şöyle görünüyor: "Webrick geliştirme için uygundur, ancak Thin veya Unicorn üretim için seçimdir."

Thin sunucunun ana sayfasına baktım ve istekler / saniye hakkında konuşuyor ancak ek açıklama olmadığı için grafiği gerçekten anlamıyorum.

Biri bana Webrick'e kıyasla Thin veya Unicorn kullanmam gerektiğini söyleyebilir mi? Ayrıca geliştirme için Webrick kullanmanın herhangi bir faydası var mı? Raylarla geldiğinden beri Webrick kullanıyorum ve sanırım varsayılan olmasının bir nedeni olmalı.

Bu arada Heroku kullanıyorum.


Mongrel gibi diğerlerine kıyasla yavaştır.
uday

38
Ken, bu soruyu gerçekten hiçbir şeyi tartışmak için sormadım. Cevabı gerçekten bilmek istiyorum, çünkü herkesin hafife aldığı Webrick'in yetersiz olduğu zamanlarda gerçek istatistikleri hiçbir yerde bulamadım. Bu partilerin hiçbiriyle bağlantılı değilim ve bahsettiğiniz tartışmalar gerçekten meraktan sorduğum sorular. Öyle görünmemesi için soruyu nasıl yeniden ifade edebilirim?
Vlad

24
Bu güzel bir soru.
justingordon

29
Bunun gibi sorular kapatılmamalıdır. Yararlı ve faydalıdırlar. Kendi kendine atanan tüm içerik polisi geri adım atmalıdır.
Ken Smith

22
Bunu Google'da "Neden üretimde WEBrick'i kullanmıyoruz?" çünkü cevaplanmasını istediğim bir soru. Üretimde WEBrick'i kullanmayı kastetmiyorum, ancak herkesin "Çünkü bu Üretim için® olmadığı açıkça ortada" demesini can sıkıcı buluyorum. Bu gerçekten o kadar açık değil - eğer öyle olsaydı, @Vlad'ın yaptığını belirttiği gibi, insanlar sonunda StackOverflow'da sormadan önce soruyu araştırmazlardı. Kabul edilen cevap faydalıdır; en azından bazı eksik özelliklere işaret eder. Teğetsel olarak, kendi cevabınızı vermeden bir sorunun tartışmalı olduğunu düşündüğünüz için kapatılması konusunda ısrar etmek yardımcı olmaz.
Justin Force

Yanıtlar:


42

Birkaç önemli neden

  1. Ruby'de yazılmıştır (bkz. http://github.com/ruby/ruby/tree/trunk/lib/webrick )
  2. Düzenlenen , bir üretim web sitesinin genellikle ihtiyaç duyduğu, birden çok çalışan (özellikle, ön çatallanma, yaşam döngüsü yönetimi, eşzamansız kullanım, vb.), Yönlendirmeler, yeniden yazma vb. Gibi pek çok özelliğe sahip değildir.

Yönlendirmelerden / yeniden yazmalardan bahsettiğimde, Webrick'i kullanarak yeniden yazma işlemlerini farklı bir katmanda (Rack, Sinatra, Rails, özel Webrick kodu, vb.) Yapmanız gerektiği gerçeğinden bahsediyorum. Bu, yeniden yazma kodunuzu gerçekleştirmek için fazladan Ruby "işleyicileri" döndürmenizi gerektirir. Düşük trafikli bir site için, halihazırda hiçbir şey yapmadan önceden ısıtılmış işlemlere sahip olabileceğiniz için bu iyi olabilir. Bununla birlikte, daha yüksek trafikli bir site için, bu, ön uç sunucuların (Apache, Nginx, vb.) Ruby * 'yi döndürmeden işleyebileceği bir şey için sunucuya fazladan yük ve muhtemelen daha hızlıdır.

* örneğin, bir yük dengeleyicinin arkasında çalışıyorsanız, tüm yeniden yazma trafiğini Ruby'nin kurulu olmadığı bir sunucuya yönlendirebilir ve ana sunucularınızın yalnızca birincil trafiği yönetmesine izin verebilirsiniz. Bu yeniden yazma trafiği, SEO için site değişikliklerinden veya benzer bir şeyden kaynaklanıyor olabilir. Başka bir durum, birden fazla bileşeni olan bir site olabilir ve belki bir bölüm Rails, diğeri PHP'dir ve her ikisi için yeniden yazımlara ihtiyaç vardır (yani eski PHP yollarını Rails'e yeniden yazın)


Heroku'da birden fazla çalışanı işlemek için, hangi sunucuyu kullanırsanız kullanın delayed_job kullanmak mümkün değil mi?
Vlad

Evet, delayed_job, işlerinizde Webrick API'leri kullanmadıkça (dürüstçe çiftleştikçe bir kod kokusu olan) Webrick ile ilgisi yoktur.
Jim Deville

Ruby yığınının dışındaki yönlendirmelerden bahsediyorum. Mod_rewrite stil yönlendirmeleri gibi. Teknik olarak, Rack içinde yönlendirebilir veya Raylar ya, belki de WEBrick (yanılıyor olabilirim), ama bu Apache veya Nginx vs nispeten yavaş olan başlangıç yakut gerektirir
Jim Deville

1
@JimDeville - Unicorn da Ruby ile yazılmıştır
Yarin


4

WEBrick ayrıca daha uzun URI'leri kaldıramaz, 2083 karakteri aşarlarsa bir çökme görürsünüz. İnce, onu daha üstün kılan bu sorunlara sahip değildir - zaten geliştirme aşamasındadır.


Ayrıca Webrick, deneyimime göre yazılım geliştirirken ve Heroku PaaS'ta WeBRICK'i seçtiğimde bağlantıyı kaybetti ve otomatik olarak kapandı, otomatik kapanma yüksek otomatik açılma hızıyla telafi ediliyor (otomatik olarak Heroku mimarisi aracılığıyla tetikleniyor) )
Daniel Antonio Nuñez Carhuayo

3

Basit şeyleri karmaşıklaştırmayı ve erken optimizasyonu gerçekten sevmiyorum. WEBrick şu alanlarda kullanılabilir: düşük trafikli bir web sitesi olması koşuluyla üretimde . Uygulamaların çoğu.

Siteniz zaman alan bir şey yapıyorsa , örneğin e-postalar gönderiyorsa veya PDF dosyaları oluşturuyorsa, WEBrick'i çok iş parçacıklı yapmalısınız . Bir seferde birden fazla isteği işlemek istiyorsunuz.


1

Geçmişte bazı güvenlik sorunları vardı, ancak görünen o ki asıl neden, üretim amaçlı sunuculara kıyasla gerçekten yavaş olması.


4
Bir istatistik karşılaştırması gördünüz mü? Ayrıca insanların bunu (ve muhtemelen doğru) söylediklerini duyuyorum, ancak web üzerinde hiçbir yerde gerçek bir istatistik karşılaştırması bulamıyorum ...
Vlad

3
Kimsenin Webrick'i gerçekten kıyasladığını sanmıyorum çünkü bir üretim sunucusu olması amaçlanmadı. Unicorn, İnce veya Yolcu iyi desteklenen ve çok daha iyi seçenekler vardır
Jim Deville

0

Üretim modunda çalışırken webrick'in en büyük zayıflığı, tek iş parçacıklı, tek işlemli web sunucusu olmasıdır, yani bir seferde yalnızca tek bir http isteğine hizmet verebilmektedir.


Tek dişli değildir. Veya herhangi bir modern yazı dilinin (GIL ile) uygulandığı şekildedir. Ancak webrick'teki veritabanı erişimi ve GÇ tamamen çoklu iş parçacıklıdır.
Lothar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.