混沌接口压测利器Fortio:从TCP/UDP到gRPC,全方位覆盖云原生应用性能测试

#作者: 西门吹雪

文章目录

    • Fortio 安装
      • docker 安装:
      • MacOS安装:
      • linux安装:
      • 对于http负载生成最重要的标志:
      • Fortio server 功能
    • TCP
    • UDP
    • gRPC
    • 负载测试
    • gRPC 负载测试
    • 在k8s或者容器中使用fortio进行压测
    • fortio 直接在docker中作为sidecar使用

Fortio是一个微服务(http,grpc)负载测试库,命令行工具,高级 echo 服务器,以及go(golang)的web UI。Fortio允许指定一组每秒查询的负载,并记录延迟直方图和其他有用的统计数据。

Fortio以指定的每秒查询次数(qps)运行,记录执行时间的柱状图,并计算百分比(例如,p99即响应时间,如99%的请求耗时少于该数字(秒,SI单位))。它可以运行一个设定的时间,固定的调用次数,或直到中断(在一个恒定的目标QPS,或每个连接/线程的最大速度/负载)。
Fortio还包括一组服务器端的功能(类似于httpbin),以帮助调试和测试:请求echo,包括头文件,添加延迟或错误代码的概率分布,tcp echo,tcp代理,http fan out/ scatter 和收集代理服务器,HTTP 之外的 GRPC echo/健康等等。

Fortio 安装

docker 安装:

> docker run -p 8080:8080 -p 8079:8079 fortio/fortio server & 
> docker run fortio/fortio load http://www.baidu.com/

MacOS安装:

brew install fortio

linux安装:

> curl -L https://github.com/fortio/fortio/releases/download/v1.37.1/fortio-linux_amd64-1.37.1.tgz \| sudo tar -C / -xvzpf -
# or the debian package> wget https://github.com/fortio/fortio/releases/download/v1.37.1/fortio_1.37.1_amd64.deb
dpkg -i fortio_1.37.1_amd64.deb
# or the rpm> rpm -i https://github.com/fortio/fortio/releases/download/v1.37.1/fortio-1.37.1-1.x86_64.rpm
# and more, see assets in release page

对于http负载生成最重要的标志:

在这里插入图片描述

Fortio server 功能

echo 服务器,它将回传发布的数据:
在这里插入图片描述
常用的压测:

fortio server -echo-server-default-params="delay=0.5s:50,1s:40&status=418"

过在 server 命令行中传递 -echo-server-default-params 来设置所有这些的默认值.

将使服务器响应http 418,一半时间的延迟为0.5s,40%为1s,10%的呼叫没有延迟。

除此之外fortio的UI功能:

  • 运行或者触发测试并绘制结果图。
  • 浏览保存的结果的用户界面图或多图(最小、平均、中位数、p、p99、p99.9和最大值的比较图)。
  • 代理或者获取其他URL
  • /fortio/data/inx.tsv 一个符合谷存储URL列表数据传输格式的tab分离值文件,所以你可以导出或者备份本地结 果到云端。
  • 从其他Fortio服务器下载或者同步点对点的JSON结果文件用他们的index.tsv URL)。

从运行的服务器上触发和取消运行的API(就像form ui,但更直接,并且有 async=on 选项)。

/fortio/rest/run 启动 run;参数可以来自命令行,也可以来自POST的JSON;可以提供 jsonPath 来寻找json对象的子集,例如 jsonPath=metadata 允许使用flagger webhook元数据作为fortio运行参数(见下面远程触发的负载测试部分)。
/fortio/rest/stop 停止所有当前运行或按运行ID停止。

我们可以启动下fortio server的UI界面:

fortio server &

可以看到对应的界面:
在这里插入图片描述
对端口进行改变:
在这里插入图片描述
目前对fortio使用压测这块主要是根据几个方面:

  • TCP
  • UDP
  • GRPC
  • loaderunner
  • k8s docker lo

TCP

独启动 echo-server 并运行一个负载(使用 tcp:// 前缀试是针对tcp echo server的)。
在这里插入图片描述
启动客户端:
在这里插入图片描述

UDP

单独启动 udp-echo 服务器并运行负载(使用tcp://前缀来进行负载测试,用于tcp echo服务器)。
在这里插入图片描述
客户端测试一下:
在这里插入图片描述

gRPC

在这里插入图片描述
grpc ping 测试:
在这里插入图片描述
变换grpc目标端口:

在 grpc ping时候指定一个主机名或IP地址时,可以使用 -grpc-port 的值(默认为8079)。在 grpcping 的目标中添加 :port 来改变这种行为。

启动 grpc echo server,通过 -grpc-port 8018 指定 grpc echo 端口 :
在这里插入图片描述
测试,通过在地址后面增加 :8018 来指定端口:
在这里插入图片描述

负载测试

在这里插入图片描述

gRPC 负载测试

使用 -s 来使用每个连接(-c)的多个(http2/grpc)流,请求击中fortio ping grpc` 端点,回复延迟 0.5s,并有10字节的额外有效载荷,自动保存json结果。
在这里插入图片描述

在k8s或者容器中使用fortio进行压测

在k8s上部署下 fortio-server ,http 服务暴露在了容器内的8080端口。 同时也创建了同名的 fortio-server Kubernetes 服务。
在这里插入图片描述
fortio server 启动后,可以看到如下的输出:
在这里插入图片描述
在client实现测试:
在这里插入图片描述

这里需要注意下,注意 annotations 中的 proxy.istio.io/config: ‘{ “holdApplicationUntilProxyStarts”: true }’。
这个配置用于确保 fortio client 在 istio sidecar启动之后,再执行。 否则,fortio client 会无法连接网络直接报错。

如果你没有安装 service mesh,就不需要添加这个 annotation,直接false就可以。

这里的命令行参数 -t 1m表示测试1分钟,由于 Kubernetes Job 的限制,我们只能使用定时长的方式执行测试.

输出如下:
在这里插入图片描述
这是通常情况下我们使用k8s去进行压测的过程,但是如果我们只是希望压测某一个容器的话,我们也可以自己创建一个基于ubuntu的容器通过:
在这里插入图片描述

然后在ubantu中直接进行对应的对象的压测.

fortio 直接在docker中作为sidecar使用

Docker 安装Fortio
在这里插入图片描述
然后可以开启docker fortio的服务端:

docker run --rm -i -p 8080:8080 fortio/fortio server

启动后访问 http://127.0.0.1:8080/fortio 通过ui操作即可。

也可以直接启动:

docker run -p 8080:8080 -p 8079:8079 fortio/fortio server & docker run -p 8080:8080 -p 8079:8079 fortio/fortio server &

然后当作sidecar开始进行压测:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/58764.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatisPlus 中 LambdaQueryWrapper使用

一、前言 MyBatis-Plus是一个强大的MyBatis扩展插件,它为MyBatis提供了许多实用的功能,其中之一就是LambdaQueryWrapper。LambdaQueryWrapper是一个条件构造器,用于构建SQL查询条件。通过使用LambdaQueryWrapper,我们可以以更简洁…

【笔记】数据结构与算法

参考链接:数据结构(全) 参考链接:数据结构与算法学习笔记 一些PPT的整理,思路很不错,主要是理解角度吧,自己干啃书的时候结合一下会比较不错 0.总论 1.数据 注:图是一种数据结构!!…

Chromium HTML5 新的 Input 类型range对应c++

一、Input 类型: range range 类型用于应该包含一定范围内数字值的输入域。 range 类型显示为滑动条。 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>test</title> </head> <body><form a…

leetcode - 684. 冗余连接

684. 冗余连接 解决思路 大致上的思路就是将元素加入到 并查集 中&#xff0c;那么在遍历到边的时候先去判断的边的两个端点的 根节点 是否相等&#xff0c;如果相等&#xff0c;那么就代表此刻把这条边加上去就形成了环【可以这么理解&#xff0c;如果形成了环&#xff0c;那…

【力扣打卡系列】二叉树·灵活运用递归

坚持按题型打卡&刷&梳理力扣算法题系列&#xff0c;语言为go&#xff0c;Day16 相同的树 题目描述 解题思路 边界条件&#xff0c;其中一个节点为空&#xff0c;return 只有p和q均为空才返回true&#xff0c;因此可以简写为pqreturn&#xff0c;先判断节点值是否一样&…

【网安案例学习】暴力破解攻击(Brute Force Attack)

### 案例与影响 暴力破解攻击在历史上曾导致多次重大安全事件&#xff0c;特别是在用户数据泄露和账户被盗的案例中。随着计算能力的提升和密码管理技术的进步&#xff0c;暴力破解的威胁虽然有所减弱&#xff0c;但仍需警惕&#xff0c;特别是在面对高价值目标时。 【故事一…

创建一个基于SSM框架的药品商超管理系统

创建一个基于SSM&#xff08;Spring Spring MVC MyBatis&#xff09;框架的药品商超管理系统是一个涉及多个步骤的过程。以下是一个详细的开发指南&#xff0c;包括项目结构、数据库设计、配置文件、Mapper接口、Service层、Controller层和前端页面的示例。 1. 需求分析 明…

二十七、Python基础语法(面向对象-上)

面向对象&#xff08;oop&#xff09;&#xff1a;是一种程序设计的方法&#xff0c;面向对象关注的是结果。 一、类和对象 类和对象&#xff1a;是面向对象编程中非常重要的两个概念。 类&#xff1a;具有相同特征或者行为的一类事物&#xff08;指多个&#xff09;的统称&…

【一分钟配置Python环境变量

配置Python环境变量可以帮助系统找到Python解释器和相关工具。下面是如何在不同操作系统上配置Python环境变量的步骤&#xff1a; Windows 1.安装Python&#xff1a; 在官方网站下载并安装Python&#xff0c;安装过程中选择“Add Python to PATH”选项。 手动配置环境变量&a…

(蓝桥杯C/C++)——STL(上)

目录 一、vector 1.vector的定义和特性 2.vector的常用函数 3.vector排序去重 二、map 1.map 2.multimap 3.unordered_map 三、stack 1.stack的定义和结构 四、pair 1.pair的定义和结构 2.pair的嵌套 3.pair自带的排序规则 一、vector 1.vector的定义和特性 C中&…

UML图之对象图详解

~犬&#x1f4f0;余~ “我欲贱而贵&#xff0c;愚而智&#xff0c;贫而富&#xff0c;可乎&#xff1f; 曰&#xff1a;其唯学乎” 零、什么是对象图 对象图&#xff08;Object Diagram&#xff09;是UML中一种重要的静态结构图&#xff0c;它用于表示在特定时间点上系统中的对…

同三维T80004EHH-4K30W 4K超清HDMI编解码器

1路HDMI输入1路3.5音频输入&#xff0c;1路HDMI输出1路3.5音频输出&#xff0c;1个USB1个TF卡槽&#xff0c;带RS485 支持4K30&#xff0c;支持2路解码2路转码&#xff0c;可选配WEBRTC/NDI协议&#xff0c;可选配硬件WEBRTC解码&#xff0c;编码、解码、转码、导播、录制多功…

设计一个灵活的RPC架构

RPC架构 RPC本质上就是一个远程调用&#xff0c;需要通过网络来传输数据。传输协议可以有多种选择&#xff0c;但考虑到可靠性&#xff0c;一般默认采用TCP协议。为了屏蔽网络传输的复杂性&#xff0c;需要封装一个单独的数据传输模块用来收发二进制数据&#xff0c;这个单独模…

网络安全入门学习路线 怎样科学的进行网络安全学习

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面…

“中信同业+”焕新升级 锚定数字金融新主线,做实金融“五篇大文章”

9月20日&#xff0c;“中信同业”升级发布会及生物多样性债券指数发布在京顺利举办&#xff0c;此次活动以“做强数字金融 服务实体经济”为主题&#xff0c;由中信金控指导&#xff0c;中信银行主办&#xff0c;中信各金融子公司联合承办。来自银行、证券、保险、基金等行业百…

‌Linux tac命令‌

‌Linux tac命令‌是一个用于逆序显示文件内容的工具&#xff0c;其名称来源于“cat”的反向拼写。tac命令的基本功能是将文件的内容从最后一行开始输出&#xff0c;直到第一行结束&#xff0c;这与cat命令的功能相反&#xff0c;cat命令是从第一行开始输出直到最后一行。 tac…

vite乾坤 vite-plugin-qiankun 报错 ReferenceError: ReadableStream is not defined

今天新接入一个子应用&#xff0c;发现其他子项目都可以运行&#xff0c;改造代码都差不多。我新的项目却报错 ReferenceError: ReadableStream is not defined断点发现是有个库版本不对&#xff0c;上github搜到了问题。 https://github.com/tengmaoqing/vite-plugin-qiankun…

ELK之路第四步——整合!打通任督二脉

ELK之路第四步——整合&#xff01;打通任督二脉 前言1.架构2.下载资源3.整合开始1.分别启动三个es2.启动kibana3.新建filebeat_logstash.yml配置文件4.修改logstash的启动配置文件5.启动logstash6.启动filebeat7.Kibana查看 4.结语 前言 在开始本篇之前&#xff0c;你需要用到…

[JAVAEE] 多线程的案例(四) - 定时器

目录 一. 什么是定时器? 二. java中的定时器类 三. 定时器的简单使用. 四. 模拟实现定时器 4.1 实现 MyTimerTask 4.2 实现 MyTimer 一. 什么是定时器? 定时器相当于闹钟, 时间到了就执行一些逻辑. 二. java中的定时器类 使用Timer类实例化一个定时器对象. Timer类中的…

C++调试经验:Ubuntu下Qt工程链接常见库的方式(持续更新)

目录 1. Qt工程链接OpenCV库 2. Qt工程链接tinyxml库 3. Qt工程链接pugixml库 4. Qt工程链接geographiclib地理信息转换库 5. Qt工程链接gstreamer音视频流媒体处理库 6. Qt工程链接VTK三维可视化库 7. Qt工程链接PCL点云处理库 8. Qt工程链接json-cpp库 9. Qt工程链…