我正在试验 OpenFaas 并尝试评估让多个工作人员提供相同功能的性能优势(商店提供的默认 shasum 功能)。我有一个由三个“小”(1vcpu 2gb ram)一个“中”(1vcpu 4gb ram)和一个“大”(2vcpu 4gb ram)VM 组成的集群。调度由 Kubernetes 完成,中型和大型 VM 无需托管任何托管在小型 VM 上的功能。该hey
工具用于执行多个调用,并且我通过 API 手动生成工作器(即额外的 pod、函数的实例)。组件的 8080 端口gateway
被端口转发到 localhost ( kubectl port-forward -n openfaas svc/gateway 8080:8080 &
),并且使用类似于以下的命令行进行函数的调用:
hey -n 50 -c 3 -m POST -D 50large.txt http://localhost:8080/function/shasum
或者
hey -n 20000 -c 600 -m POST -d test http://localhost:8080/function/shasum
(第一个测试一个 30Mb 文件的 50 个 shasum,另一个测试一个小请求的 600 个并发发布者,20000 次)。调用是从“大”虚拟机进行的,它不能托管任何功能 pod(封锁)。
有时,我注意到如果我调用具有大量并发请求或大文件输入的函数,网关无法转发这些请求并且端口转发被破坏(例如,当使用第一个命令时,将 -c 3 替换为-c 5,用于 5 个并发生产者)。
但是即使端口转发没有被破坏(即使用-c 3),我也会得到一些不容易解释的结果。考虑下面的执行日志,该案例连续使用三个工作人员(功能 pod),均匀分布在三个小型 VM 上:
root@big-vm-1:~# hey -n 500 -c 3 -m POST -D 50large.txt http://localhost:8080/function/shasum
Summary:
Total: 541.0489 secs
Slowest: 5.5438 secs
Fastest: 1.1259 secs
Average: 3.2351 secs
Requests/sec: 0.9204
而另一个执行日志,它只使用一个工作人员(一个函数 pod):
root@big-vm-1:~# hey -n 500 -c 3 -m POST -D 50large.txt http://localhost:8080/function/shasum
Summary:
Total: 551.3123 secs
Slowest: 5.1512 secs
Fastest: 1.4815 secs
Average: 3.3106 secs
Requests/sec: 0.9033
为什么使用多个功能 pod 只能取得稍微好一点的结果?任何人都可以提出一种方法来验证使用多个工人实际上比使用单个工人更好,使用这个或相关设置?