首先,考虑其他资源更为重要。
1)有一个解释器(为了更快的开发) - imo un true
2) 有编译器(因为编译后的代码会运行得更快)——真的吗?开发和服务器机器和部署上的不同拱门呢?
3) 有面向对象的能力——为什么?函数式语言更适合并行编程
4)静态类型 - 为什么?如果它在类型系统中具有“null”值,那么这与非静态类型的 imo 之间没有区别。
更好的标准是
- 有多少优质的库和框架供您使用。
- 您将如何部署此解决方案
- 将新开发人员带入您的项目是多么容易
社区的质量是什么:)
Ocaml 是一门很棒的语言,使用 Lwt 库,即使只有一个进程很容易,您也可以编写异步代码。Ocaml 也非常快!这似乎是不错的解决方案,但您没有很多生产就绪的框架。
Erlang 有库,它很酷,速度很快,似乎是满足您需求的最佳解决方案。
Ruby 和 Ruby On Rails 不会让您轻松编写并发代码,但您将能够快速构建解决方案并开始从中赚钱 :) 我的意思是比其他语言快 10 倍,因为您有现成的块。在这种情况下,部署也是最简单的。
Node.js 速度快,易于上手的语言 (javascript),但处于开发的早期阶段,所以没有多少生产就绪的东西。
现在这就是我处理解决方案的方式:
在性能方面,你有一个交易
- 记忆帽
CPU 上限
- 内存上限( ram )意味着用这种语言编写的解决方案将消耗越来越多的 ram,最终您将不得不快速购买新盒子,并且要扩展的盒子必须“胖”:)
- CPU 上限意味着该解决方案具有真正积极的垃圾收集器并分配大量经常清理的小对象。
在这种情况下,Node.js 和 Rails 是内存上限的,Rails 将在生产中消耗每个工人平均约 250mb 的内存。Ocaml / Oscigen , Erlang / Webmachine 是 CPU 上限的,大多数函数式语言都会走这条路。
我使用 i5 CPU 在我的 macbook pro 上对 webmachine 进行了小测试https://gist.github.com/1996858
这个资源每次都提供从 redis 中提取的简单 json 而没有缓存。
100 万个请求总计:连接 1000 个请求 1000000 个回复 1000000 个测试持续时间 463.413 s
Connection rate: 2.2 conn/s (463.4 ms/conn, <=1 concurrent connections)
Connection time [ms]: min 390.6 avg 463.4 max 3245.7 median 453.5 stddev 101.6
Connection time [ms]: connect 0.1
Connection length [replies/conn]: 1000.000
Request rate: 2157.9 req/s (0.5 ms/req)
现在最好的部分是监控内存使用情况。它大约是 19.3 mb 内存。
如果你问我,我会在 Rails 中构建应用程序原型,然后提取 json api 并使用 webmachine 在 Erlang 中构建它们。或者只是使用 webmachine 在 Erlang 中构建应用程序,然后使用一些 ruby 库的一些不错的功能,比如 capistrano 进行部署:)