2013-09-03 12 views
5

Yesod'un ana sayfasında referanslar gördüm, ancak çoğunlukla statik dosyalar için. Ve Snap'in web sitesindeki kriterler modası geçmiş.Yüksek performanslı bir uygulama sunucusu için Yesod'un Warp ve ek sunucudan hangisini seçmeliyim?

Haskell modülünü hizmet olarak göstermeye çalışıyorum. Sunucunun mantığı, json'daki işlev adını ve argümanları almak, haskell işlevini çağırmak ve çıktıyı tekrar json olarak sunmaktır. Referanslı şeffaflık, iplik güvenliğini ve işlevlerin belleğe alınmasını ve önbelleğe alınmasını garanti eder.

Eşzamanlı bağlantıları 2k - 5k olarak destekleyeceksem, nasıl uygulamaya geçebilirim? Bu yaklaşım nasıl ölçeklenebilir?

cevap

7

Warp/Yesod ve Snap arasında seçim yapmanızı ve uygulamanızı oluşturmaya yarayan en iyi araçları hangi sisteme bağlı olarak uygulamanızı öneririm. Hem Warp hem Snap, aynı temel GHC I/O yöneticisini kullanıyor ve her ikisi de son derece optimize edilmiştir. Her sistem için iyi yazılmış bir uygulama, önemsiz olmayan herhangi bir şey yapmak, bir performans eşitliği gösterdi.

Son paragrafınız biraz belirsizdir, ancak Warp veya Snap için temel cevabın yalnızca kodunuzu yazmak olduğunu ve I/O yöneticisinin mümkün olduğunca ölçeklendireceğini düşünüyorum. Eğer darboğazın eş zamanlı bağlantılarını gerçekten buluyorsanız, GHC 7.8'i (henüz piyasaya sürülmemiş, ancak çok daha gelişmiş bir I/O yöneticisine sahip) kullanarak ya da birden fazla sunucu kullanarak prefork tekniğini denemeyi düşünebilirsiniz.

5

Warp ve Snap için yayınlanan değerlendirme ölçütlerinin çoğu, statik bir "pong" dizesi döndüren son derece basit ve çok ölçülü bir karşılaştırmaya dayanmaktadır. Bu, bir web sunucusunun HTTP isteklerini ayrıştırmada, HTTP yanıtları oluşturmada vb. Ne kadar verimli olduğunu kıyaslamak için harikadır, ancak çoğu uygulamada bu şeyleri yapmak için harcanan süre göz ardı edilebilir olacaktır. İkinci olarak, tahminimce her iki sunucu da geliştirmeye ve teorik sınırlara yaklaşmaya devam ettikçe Warp ile Snap arasında şu andaki performans farklılıklarının gelecekte azalması muhtemeldir. Ayrıca, iki sunucunun da GHC 7.8'deki performans geliştirmelerinden önemli ölçüde fayda sağlayacağını düşünüyorum.

Haskell, çok sayıda eşzamanlı bağlantıyla yüksek performans elde etmek için mükemmel bir seçimdir. Haskell, diğer dillerde çoğu konuya kıyasla çok ucuz olan yeşil dişlere sahiptir. Bu Haskell web çerçeveleri büyük bir avantaj sağlar. Her bağlantı için yeni bir iş parçacığı ateşleyebilir ve iyi bir programlama modelini korurken mükemmel performans elde etmek için GHC'yi optimize eden büyük çabalardan faydalanabiliriz.

Yesod vs Snap ile ilgili olarak, ikinin ayrı projeler olarak var olmasının bir nedeni vardır. Haskell'deki web geliştirme problemine iki farklı yönden yaklaşıyorlar. Her ikisi de Haskell'in size sağladığı performanstan yararlanır, bu yüzden tercih ettiğiniz yaklaşıma göre seçim yapmalısınız.

: Burada başlamanıza yardımcı olacak bazı kaynaklar
İlgili konular