<div><div dir="auto">The above mentioned clients are also slow compared to "buoy":</div><div dir="auto"><br></div><div dir="auto"><a href="https://github.com/lpgauth/buoy">https://github.com/lpgauth/buoy</a><br></div><div dir="auto"><br></div><div dir="auto">Watch the author's video at:</div><div dir="auto"><br></div><div dir="auto"><a href="http://www.erlang-factory.com/sfbay2017/louisphilippe-gauthier.html">http://www.erlang-factory.com/sfbay2017/louisphilippe-gauthier.html</a></div><div dir="auto"><br></div><div dir="auto">/Frank</div><br><div class="gmail_quote"><div>Le mer. 30 août 2017 à 23:47, Martin Karlsson <<a href="mailto:martin@admitsolutions.co.nz">martin@admitsolutions.co.nz</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I have done some benchmarking for our specific use case.<br>
<br>
* Main web server with high number of concurrent requests coming in<br>
(~1000 concurrent requests per second but benchmarked up to 10,000<br>
requests)<br>
* Most requests requires a call out to an back-end HTTP server (only<br>
GET)<br>
* There are few back-end endpoints (3).<br>
<br>
It is not clear how many different kind of servers you are going to call<br>
out to and this will likely affect your choice of library.<br>
<br>
For our use case I benchmarked httpc, gun, hackney, dlhttpc, ibrowse.<br>
<br>
All of them behaves well when the endpoint replies quickly. However,<br>
once the latency of the response goes up we have problems with all "traditional<br>
clients". The only one that worked for us in this use case was dlhttpc<br>
(<a href="https://github.com/ferd/dlhttpc" rel="noreferrer" target="_blank">https://github.com/ferd/dlhttpc</a>) and this is likely because of the<br>
dispcount "router".<br>
<br>
I know hackney has experimental dispcount pooling so that would likely<br>
work as well.<br>
<br>
* httpc is known to have a few quirks. For our use case which only do HTTP<br>
get requests, no cookies, pipelines or other it works well but there is<br>
a gen_server bottleneck in there somewhere when calling only few<br>
endpoints (have not tried with many endpoints). The biggest pro is that<br>
it is built-in, but behaves a bit strange under load.<br>
<br>
* gun - was discarded quickly as I couldn't get anywhere near the<br>
performance I was after and I didn't have the time to trouble-shoot<br>
with so many other alternatives.<br>
<br>
* hackney and ibrowse - seemed like the most stable clients in term of<br>
response times. hackney is also used lots in the elixir community so<br>
it should have some good production usage. ibrowse has been around<br>
for a long time.<br>
<br>
* dlhttpc - works best for us. Not updated in a while so can't say<br>
anything for more advanced usage. Again, this is becuase of dispcount<br>
routing, not the actual http client in it self.<br>
<br>
<br>
Cheers<br>
Martin<br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div></div>