作为一名rubyist开发者,我决定使用erlang来获得高性能、可靠的后端。设置非常简单:获取post请求,将内容写入redis,返回统计数据。都是json。这也是我如此关心每秒请求数的原因。
可选工具:webmachine、用于json编码/解码的jiffy、用于连接池的poolboy和用于redis通信的eredis。
使用的机器: macbook pro,i5 2.4 8GB,8 8GB内存。
我的erlang每秒收到大约5000个请求,而jruby/torqbox得到大约12,0000个请求。(look here for a complete ruby performance test setup)
我意识到我可以使用erlang中的ets来节省时间,并将redis留给“后台处理”在响应之后编写,但这不会有什么影响。甚至是一个简单的“hello world”测试,erlang的腿就在后面。
有什么建议吗?我做错了吗?
发布于 2014-08-14 17:40:25
+K true +A 100。与我的经验相比,你在Erlang上的结果似乎太低了。你应该变得更大十倍。你的有效负载生成工具也可能有问题。
最重要的是,这不仅可以被认为是Erlang世界的微型基准,也可以是nano或atto基准。当你尝试更困难和更复杂的事情时,真正的力量就会显现出来。其中并发请求应该以非常复杂的方式相互影响,您必须处理最终的一致性,并且实现它的可扩展性更高,并且需要使用异步进程间通信。
发布于 2014-09-02 11:01:48
我的两分钱。你弄错地方了。您正在测试一个针对JVM进行了优化的问题,该问题是在JVM进行了优化的机器上运行的。
你真的不会看到Erlang/OTP在mac book pro上可用的内核数量上的优势。这只是我的粗略猜测,但如果看到Erlang在少于8核的服务器上击败JVM,我会感到惊讶。为了在当前硬件上尽可能快地实现JVM,已经投入了大量的人力/时间。
编写线程安全的I/O代码相当简单,真正的问题出现在处理数十到数百个线程之间的内存访问时。
用Erlang/Elixir编写的目标是当前16或32核的高端服务器,在不久的将来有可能扩展到更高的规模。
发布于 2014-08-23 08:02:59
仅供参考:"+A 100“对联网没有帮助,它只适用于文件IO。如果你真的想要快速的web服务器,看看github.com/knutin/elli,它会在硬件上给你80kprs,而牛仔会给你30krps。另一方面,许多人指责elli没有遵循OTP原则。
如果你可以放置一些负载均衡器来清理请求,jiffy是一个很好的选择,因为jiffy会在你的代码中引入段错误--看看问题列表。
无论如何,如果您需要的是非常快的获取->解码、json、->存储、->回复工作负载,那么erlang可能不是您想要的东西。
https://stackoverflow.com/questions/25302247
复制相似问题