我已经部署了一些简单的服务作为概念验证:装有https://stackoverflow.com/a/8217856/735231的nginx Web服务器,以实现高性能。
我还进行了编辑/etc/nginx/conf.d/default.conf
,使行listen 80;
变为listen 80 http2;
。
我正在使用Locust分布式负载测试工具,该类具有交换requests
模块hyper
以测试HTTP / 2工作负载的类。就性能而言,这可能不是最佳选择,但是我可以催生许多蝗虫工人,因此这不是一个大问题。
为了进行测试,我在5台计算机的GKE上生成了一个集群,每个集群2个vCPU,4GB RAM,安装了Helm以及这些服务的图表(如果有用,我可以稍后将它们发布在要点上)。
我用min_time = 0和max_time = 0测试了Locust,以便产生尽可能多的请求。一个nginx实例有10个工人。
拥有10个工作人员,总共140个“客户”,我每秒收到约2.1k个请求(RPS)。
10 workers, 260 clients: I get ~2.0k RPS
10 workers, 400 clients: ~2.0k RPS
现在,我尝试水平缩放:生成5个Nginx实例并获得:
10 workers, 140 clients: ~2.1k RPS
10 workers, 280 clients: ~2.1k RPS
20 workers, 140 clients: ~1.7k RPS
20 workers, 280 clients: ~1.9k RPS
20 workers, 400 clients: ~1.9k RPS
所描述的资源使用率非常低kubectl top pod
(这是10个工人,280个客户端; nginx不受资源限制,蝗虫工人每个pod只能使用1个CPU):
user@cloudshell:~ (project)$ kubectl top pod
NAME CPU(cores) MEMORY(bytes)
h2test-nginx-cc4d4c69f-4j267 34m 68Mi
h2test-nginx-cc4d4c69f-4t6k7 27m 68Mi
h2test-nginx-cc4d4c69f-l942r 30m 69Mi
h2test-nginx-cc4d4c69f-mfxf8 32m 68Mi
h2test-nginx-cc4d4c69f-p2jgs 45m 68Mi
lt-master-5f495d866c-k9tw2 3m 26Mi
lt-worker-6d8d87d6f6-cjldn 524m 32Mi
lt-worker-6d8d87d6f6-hcchj 518m 33Mi
lt-worker-6d8d87d6f6-hnq7l 500m 33Mi
lt-worker-6d8d87d6f6-kf9lj 403m 33Mi
lt-worker-6d8d87d6f6-kh7wt 438m 33Mi
lt-worker-6d8d87d6f6-lvt6j 559m 33Mi
lt-worker-6d8d87d6f6-sxxxm 503m 34Mi
lt-worker-6d8d87d6f6-xhmbj 500m 33Mi
lt-worker-6d8d87d6f6-zbq9v 431m 32Mi
lt-worker-6d8d87d6f6-zr85c 480m 33Mi
我将测试描述在GKE上以简化复制,但是在私有云集群中得到了相同的结果。
为什么我生成一个服务的实例数并不重要?
更新:根据第一个答案,我正在使用节点信息以及单个蝗虫工作人员的信息来更新信息。
1 worker, 1 clients: 22 RPS
1 worker, 2 clients: 45 RPS
1 worker, 4 clients: 90 RPS
1 worker, 8 clients: 174 RPS
1 worker, 16 clients: 360 RPS
32 clients: 490 RPS
40 clients: 480 RPS (this seems over max. sustainable clients per worker)
但最重要的是,似乎根本的问题是我的能力受到了限制:
user@cloudshell:~ (project)$ kubectl top pod
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
gke-sc1-default-pool-cbbb35bb-0mk4 1903m 98% 695Mi 24%
gke-sc1-default-pool-cbbb35bb-9zgl 2017m 104% 727Mi 25%
gke-sc1-default-pool-cbbb35bb-b02k 1991m 103% 854Mi 30%
gke-sc1-default-pool-cbbb35bb-mmcs 2014m 104% 776Mi 27%
gke-sc1-default-pool-cbbb35bb-t6ch 1109m 57% 743Mi 26%
如果我理解正确,那么您确实在与Pod相同的群集/节点上运行了负载测试,这肯定会对总体结果产生影响,我建议您将客户端与服务器分开放置在单独的节点上,以免影响彼此。
对于您报告的值,可以清楚地看到工作人员正在消耗比nginx服务器更多的CPU。
您应该检查:
您还应该测试单个服务器的容量以验证每个服务器的限制,因此,如果结果与预期值一致,则可以使用一个参数进行比较。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句