在弹性beanstalk上运行Golang应用程序时是否存在任何性能问题?

我正试图在go中对一个简单的’hello world’HTTP服务器进行基准测试.

我做了2次测试:

>使用amazon ec2 – m3.medium实例
>使用亚马逊弹性豆茎 – 也使用m3.medium单个实例

在第一次设置时,我可以达到18k req / sec.
在第二个,1.6k req / sec.

源代码:(来自:https://golang.org/doc/articles/wiki/)

package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}

对于如此巨大的性能差异有什么解释吗?

PS:
基准工具:https://github.com/wg/wrk
此外,一个重要的事情是:Elastic beanstalk总是添加nginx作为其应用程序的反向代理(对于Go应用程序我无法删除它)
在第一次设置时,根本没有nginx.

最佳答案 简短的回答:你没有测量同样的事情.在您自己的实例上,您测量了本机Go Web服务器,而在Beanstalk上,您使用本机Go Web服务器测量了Nginx.

答案很长:

如果您在单实例配置中使用AWS Elastic Beanstalk,则会收到与使用EC2时完全相同的实例.
您没有在单个实例Beanstalk环境之前收到Elastic Load Balancer.

如果您正在使用Beanstalk,您将获得预部署的nginx(如您所述).
Nginx对性能有重大影响,特别是在单个CPU配置中,与m3.medium实例一样.

您测量的性能影响决不是由Beanstalk直接引起的,而是由您的部署配置引起的.
为避免性能下降,您可以选择使用本机Go Web服务器.

为了支持我的推理,我运行了一些测试来证明性能.
通过在工作负载所在的同一数据中心的EC2 m3.medium实例上运行wrk,生成以下数字.

我在Beanstalk上安装了与本机EC2实例相同的Go应用程序,并且我安装了一个与Beanstalk使用的配置相同的NGINX服务器.

./wrk http://<server>/ --duration 20s --connections 300

Beanstalk m3.medium instance DIRECT:  9230.52 Requests / sec
Beanstalk m3.medium instance NGINX:   1502.14 Requests / sec
EC2 m3.medium instance DIRECT:       13649.46 Requests / sec
EC2 m3.medium instance NGINX:         2489.78 Requests / sec
点赞