我正在尝试在go中对一个简单的'hello world‘HTTP服务器进行基准测试。我做了两次测试:
在第一次设置时,我可以达到18k雷克/秒。第二,1.6k雷克/秒。
源代码:(来自: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
另外,重要的是:弹性豆柄总是添加nginx作为它的应用程序的反向代理(对于Go应用程序,我无法删除它),在第一个设置中,根本没有nginx。
发布于 2017-02-14 21:30:08
简单的回答是:你测量的不是同一件事。在您自己的实例中,您测量的是本机Go Web服务器,而在Bean秸秆上,您测量的是Nginx,后面是本机Go Web服务器。
长话短说:
如果在单个实例配置中使用AWSElasticBean秸秆,则接收的实例与使用EC2的实例完全相同。您不会在单个实例Bean秸秆环境面前接收一个弹性负载均衡器。
如果您正在使用Bean秸秆,您将得到一个预部署的nginx (正如您已经说过的)。Nginx对性能有很大的影响,特别是在单个CPU配置中,就像m3.media实例一样。
您所测量的性能影响绝不是由Bean秸秆直接造成的,而是由您的部署配置造成的。为了避免性能下降,您可以选择使用本机Go Web服务器。
为了支持我的推理,我运行了一些测试来演示性能。以下数字是通过在工作负载所在的同一个数据中心中的一个威克 m3.media实例上运行EC2生成的。
我在Bean秸秆上安装了与本机EC2实例相同的Go应用程序,并且安装了一个NGINX服务器,其配置与Bean秸秆使用的配置相同。
./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 / sechttps://stackoverflow.com/questions/42232925
复制相似问题