Elixir just really nice. I gave it a shot again and it is super smooth experience nowadays. Distillery, mix, iex <3 Also most of the libraries I care about are 2.0+ and now this:
https://github.com/aws-samples/aws-lambda-elixir-runtime
The only downside is that the out of the box performance is subpar for http services but it is still acceptable.
Cowboy measures its latency in microseconds, what bottlenecks are you running into specifically?
Not really, you can't have a microsecond latency talking over a network. I understand localhost microbenchmarks are nice but real life scenarios are much better.
The setup for the test:
- provision node A for being the server
- provision node B for being the client
- open X (16..16000) connections from node A and use http pipelining start to send requests to node B
I use wrk2 as the test client it is pretty amazing and looking at the latency distribution graphs.
Tools that clear winners of performance:
- https://github.com/valyala/fasthttp
Elixir/Cowboy/Plug is in the middle range, kind of like what Techempower[1] guys saw during their tests.
[1] https://www.techempower.com/blog/2018/10/30/framework-benchm...
Wrk2 is not fast enough and will thus give spurious results since the bottleneck is the client.
The only measuring tool that is fast enough to accurately measure Phoenix performance is something like Tsung (which is also an Erlang app...)
Interestingly there was a thread on HN previously which tools are used for HTTP perf testing:
>>> - Wrk: https://github.com/wg/wrk - Fastest tool in the universe. About 25x faster than Locust. 3x faster than Jmeter. Scriptable in Lua. Drawbacks are limited output options/reporting and a scripting API that is callback-based, so painful to use for scripting user scenario flows.