Fortio 笔记
Thanks ~ https://skyao.io/learning-fortio/docs/introduction/fortio.html
Fortio 是一个快速、小型(4Mb docker 镜像,最小依赖项)、可重复使用、可嵌入的 go 库以及命令行工具和服务器进程,服务器包括一个简单的 Web UI 和 REST API 来触发运行并查看结果的图形表示(单个延迟图和多个结果比较最小值、最大值、平均值、qps 和百分位数图)。
我比较感兴趣的是两个工具
一个是 Fortio 本身, 可以支持 tcp 和 udp 的负载测试并且生成好观察的图表。
还有一个是 DNSping, 通过命令发送 dns 请求并记录 dns 响应的延迟情况。
dnsping
通过这样的工具可以非常轻松的看到在集群内的 pod 解析 dns 请求成功与否以及延迟情况, 例如:
1 | kubectl debug -n monitoring --profile=general grafana-694b5f9796-nqkhn -it --image=fortio/dnsping -- dnsping -c 10 glance.liarlee.site. 192.168.31.3 |
输出的结果中, 包括了延迟, 和完整的 DNS 应答:
1 | Defaulting debug container name to debugger-dcdhz. |
fortio
在他提供的文档中有如下的说明, 我认为描述了这个命令使用中最初的疑问, 我应该怎么传递或者设置flag来获得最佳的测试结果?
https://github.com/fortio/fortio/wiki/FAQ#i-want-to-get-the-best-results-what-flags-should-i-pass
我在自己的一个小主机上面运行了单master 双node 的 kubernetes 集群, 并在上面运行了 VaultWarden 来维护我的密码。 ( 是 Sidecar 模式的 istio 进行流量管理的,sidecar 怎么都会导致延迟的增加, 这个是无法避免的。
对 VaultWarden LoginPage 测试一下, 看当前的环境中能服务能承载的压力是什么样子的?

我设置的测试是 2000 qps 10 threads 的测试, 最后的结果是 1085 qps,着应该是达到了当前这个服务的上限, 尝试扩展了一下ingress pod 的数量, 查看 延迟中位数据 没有非常大的变化, 但是长尾的请求变的更长了(笑
这个工具还是做的很直观的, 可以说是一个 istio 版本的 ab 命令 , 并且带图~
如果把 fortio server 启动在 pod 里面, 看来也可以做集群内的 负载测试, 这个工具最大的价值就是可以提供稳定压力的负载, 并且可以测试多种不同的协议。


