4

我正在为我的高吞吐量 Web 服务器选择一种技术。我使用 Phoenix 创建了两个简单的实现,一个在 Go 中,一个在 Elixir 中。

我已将这些版本部署在 AWS 上的一台超大型机器上,并使用 siege 对其性能进行基准测试。

我在设置 后设法提高了 Go 的性能GOMAXPROCS,但是运行 Elixir 版本似乎在充分利用机器的 CPU 或内存之前很久就达到了峰值性能。

我似乎找不到任何关于如何在生产环境中微调牛仔行为的文档或解释,因此它将正确利用它运行的机器,并产生每个人都在谈论的性能......

我很确定有一个简单的地方(文件或环境变量)可以调整一个或两个值以产生更好的结果。

谁能告诉我那个地方可能在哪里?

4

2 回答 2

6

按照评论中的建议,我使用plug而不是phoenix重新实现了我的项目。

使用相同的功能(将帖子正文解析为 JSON、调用 DynamoDB、从 Amnesia 表中读取并格式化 JSON 响应)我获得了更好的性能和更多的资源利用率。

我想我仍然可以每秒“挤奶”几个请求(目前我每秒收到大约 500 个请求),但它现在与 Go 实现相同的东西相当......

于 2014-06-22T11:20:16.400 回答
6

我没有足够的代表直接发表评论,所以我会在这里回答。我很想看看你在凤凰城得到的数字。你是在 prod 模式下运行的吗?如果您在 dev(默认)中运行,则性能会慢得多,因为启用了代码重新加载并检查每个请求。Vanilla Plug 的工作量将比 Phoenix 少,但也不会少很多。一个标准的 Phoenix 路由器/控制器应该或多或少地与您最终得到的 Plug 代码内联。

于 2014-06-22T13:30:07.247 回答