0

我正在试验 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 只能取得稍微好一点的结果?任何人都可以提出一种方法来验证使用多个工人实际上比使用单个工人更好,使用这个或相关设置?

4

1 回答 1

0

不知道“工人”是什么意思,很难猜测为什么不同数量的工人没有太大影响。

我在 OpenFaas 文档中唯一提到的“工人”是:

queue-worker 充当订阅者并反序列化 HTTP 请求并使用它直接调用函数

因此,如果这是您的“工人”,那么增加订阅者数量不应提高处理速度,并且您的结果是预期的。

我注意到你正在使用localhost,如果你有一个 k8s 本地安装并在单个物理(或虚拟)机器上运行你的测试,被告知拥有负载生成器(hey在你的情况下)和被测系统不是最好的主意由于可能的竞争条件(肯定会发生)在同一台机器上

另外一个好主意是针对类似生产的环境(暂存)运行性能测试,因为您无法推断结果并预测/计算不同硬件/软件的饱和/断点,有些方面可以在按比例缩小的情况下进行测试environment,但通常结果不可靠,因此请考虑在更现实的条件下进行测试并使用实际的工作负载/有效负载/并发/等。

于 2022-01-04T05:15:33.217 回答