[erlang-questions] Cowboy (Erlang) VS Haskell (Warp)

okeuday <>
Tue Jun 25 21:52:20 CEST 2013


When I use their benchmark here:
https://github.com/yesodweb/benchmarks
(as mentioned here: 
http://www.yesodweb.com/blog/2011/03/preliminary-warp-cross-language-benchmarks)
to test elli, here:
https://github.com/knutin/elli

I get 99000 req/s.  The (httperf) test of CloudI's http_req erlang service 
using cowboy gives 13358 req/s.  cowboy has more features, so that can 
explain the extra average latency which limits throughput. 

If you want to understand why their benchmark isn't decent, read this:
http://www.mnot.net/blog/2011/05/18/http_benchmark_rules

So, if you want something faster in Erlang, you could use ellis, however, 
keep in mind their testing isn't long enough to be meaningful (due to 
garbage collection and other impacts on performance).


On Tuesday, June 25, 2013 10:38:25 AM UTC-7, BM Kim wrote:
>
> Damian Dobroczyński <qoocku <at> gmail.com> writes:
>
> > 
> > W dniu 25.06.2013 13:51, BM Kim pisze:
> > > Hi folks,
> > >
> > > First of all, I want to apologise for my poor english skills,
> > > since english is not my first language, but I'll try my best
> > > to formulate my quesions as clear as possible.
> > >
> > > Second, I've just begun to learn erlang, so if I'm asking
> > > obvious "noob" questions I apologise for that too in advance...
> > >
> > > Anywho, now to my actual question:
> > >
> > > I am planning to write a high-performance server application in erlang,
> > > which will primarily handle HTTP requests. After some reseach with 
> google,
> > > I narrowed down my choices to cowboy, misultin and mochiweb and decided
> > > to go with the cowboy library first...
> > >
> > > Looking at some tutorials, I've quickly built a small server capable of
> > > serving static files and was eager to see first benchmark-results...
> > > I've also built a small Haskell server using Warp library to compare it
> > > with erlang's cowboy...
> > >
> > > But my first impression was, that my cowboy server is much much slower 
> than
> > > expected when serving static-files and after some research I found a 
> presentation
> > > of the cowboy's author claiming that cowboy shouldn't be used for 
> serving
> > > static-files. So I modified the server code, so that it replies to 
> every
> > > request with in-memory 4Kb binary blob and compared it with my haskell 
> warp
> > > server serving 4kb static file...
> > >
> > > this is my simple cowboy's http handler:
> > >
> > > ----------------------------------------------------------------------
> > >
> > > blob() ->
> > >     [<<0:8>> || _ <- lists:seq(1,4096)].
> > 
> > First, try to replace blob/0 function with this:
> > 
> >   blob() -> <<0:(4096*8)>>.
> > 
> > Then, restart the test and report ;)
> > 
>
>
> Hi,
>
> Thank you very much for pointing out the obvious mistake...
> After correcting it, I got improvement from 5940 req/s to 8650 req/s...
>
> But still much slower than the haskell warp-server, which has throughput
> of 38000 req/s...
>
> But I have another question regarding blob/0. Is it going to be evaluated
> only once (like GHC would do) since it is a pure expression? I'm not
> so sure, since erlang is not pure and any function can have side-effects
> which you can't mark as with the IO monad in Haskell...
>
> _______________________________________________
> erlang-questions mailing list
>  <javascript:>
> http://erlang.org/mailman/listinfo/erlang-questions
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20130625/384f2245/attachment.html>


More information about the erlang-questions mailing list