[英]Erlang (or elixir) performance (requests per second) is slow vs jruby?
作为一个rubyist,我决定采用erlang来获得高性能,可靠的后端。 设置非常简单:获取发布请求,将内容写入redis,返回统计信息。 所有的json。 这也是为什么我非常关心每秒的请求。
选择的工具: webmachine , 瞬间对JSON编码/解码, poolboy用于连接池,并且eredis为redis的通信。
机器使用:macbook pro,i5 2.4Ghz,8GB内存。
我的erlang每秒大约有5000个请求,而jruby / torqbox大约有12,0000个请求。 ( 在这里查看完整的ruby性能测试设置 )
我意识到我可以在erlang中使用ets来节省时间,并且在响应之后留下用于“后台处理”的redis,但这将没有什么影响。 甚至是对'你好世界'背后的二郎腿的简单测试。
有什么建议? 我做错了吗?
+K true +A 100
。 与我的经验相比,你对Erlang的结果似乎太低了。 你应该得到几乎十倍的大。 您的有效负载生成工具也可能存在问题。
而且最重要的是,这不仅可以被认为是Erlang世界的微观基准,也可能是纳米或atto基准。 真正的力量将揭示你何时会尝试更艰难,更复杂的事情。 并发请求应以非常复杂的方式相互影响的事情,您必须处理最终的一致性并实现更具可伸缩性,并且需要使用异步进程间通信。
我的2美分。 你有错误的结局。 您正在测试JVM针对JVM优化的某种机器进行优化的问题。
你真的不会看到Erlang / OTP对mac book pro上可用内核数量的优势。 这只是我的粗略猜测,但我会惊讶地看到Erlang在不到8核心服务器上击败了JVM。 在当前硬件上尽可能快地制作JVM需要大量的人/小时。
编写线程安全的I / O代码相当简单,当您处理数十到数百个线程中的内存访问时,会出现真正的问题。
在Erlang / Elixir中编写的目标是当前16或32核的高端服务器,并且在不久的将来可能会扩展得更高。
仅供参考:“+ A 100”对网络没有帮助,只适用于文件IO。 如果你真的想要快速的网络服务器,请看看github.com/knutin/elli,它将为你提供80 kprs的硬件,牛仔将给你30 krps。 另一方面,elli是许多人因不遵守OTP原则而责备的事情。
如果您可以放置一些负载均衡器来清理请求,那么jiffy是一个不错的选择,因为jiffy会在您的代码中引入段错误 - 请查看问题列表。
无论如何,如果你需要的只是快速的GET - >解码json - > store - > REPLY工作负载,那么你不想选择erlang。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.