temporal压测方案及记录
所属分类 temporal
浏览量 1003
整体链路如下
压测端(jpress) echoClientApp(任务发起客户端应用) temporal-server echoWorker(任务执行机) postgresqlDB
jpress 是一个基于java的 带有web界面的 压测工具
可与prometheus 集成 ,支持分布式部署
可实时查看 tps 曲线 , 接口耗时分布统计图 , 接口耗时百分位值 p50 p80 p90 p95 p99等
jpress源码
https://gitee.com/dyyx/hellocode/tree/master/project/jpress
echoClientApp echoWorker 代码见
https://gitee.com/dyyx/hellocode/tree/master/demo/temporal/sdkdemo/src/main/java/com/dyyx/temporal/demo/echo
可打成一个 fat jar包 ,包含所有依赖, 内置 httpserver ,暴露http接口 与 prometheus 指标接口
使用 maven-assembly-plugin 打包 fat jar
启动 echoworker
nohup java -cp .:temporal-echo-demo.jar com.dyyx.temporal.demo.echo.EchoWorker &
默认端口 8130
-Dhttpport=8131 指定端口
java -cp .:temporal-echo-demo.jar -Dhttpport=8131 com.dyyx.temporal.demo.echo.EchoWorker
内部状态监控
http://127.0.0.1:8130/status
prometheus 指标
http://127.0.0.1:8130/metrics
启动 echoclientapp
nohup java -cp .:temporal-echo-demo.jar com.dyyx.temporal.demo.echo.EchoClientApp &
默认端口 8135
-Dhttpport=8136 指定端口
java -cp .:temporal-echo-demo.jar -Dhttpport=8136 com.dyyx.temporal.demo.echo.EchoClientApp
内部状态监控
http://127.0.0.1:8135/status
prometheus 指标
http://127.0.0.1:8135/metrics
运行一个工作流
http://127.0.0.1:8135/submitWorkflow
模拟 工作流 执行耗时 500ms
http://127.0.0.1:8135/submitWorkflow?rt=500
数据量比较大的表
temporal库
current_executions 479107
executions 479157
history_node 4548996
history_tree 479171
timer_tasks 479172
temporal_visibility 库
executions_visibility 467115
一些性能指标
压测
开始时间 2022-03-07 17:50:37
结束时间 2022-03-07 18:20:37
运行时间 1800 s
并发 10 tps 50
平均耗时 184ms
执行用例 97670
countGt100 96052
countGt200 19490
countGt500 1917
countGt1000 61
countGt100 表示响应时间大于100ms的数量
耗时百分位值
P50 154
P80 199
P90 289
P95 380
P99 587
{
"50.0": "154",
"60.0": "161",
"65.0": "164",
"70.0": "170",
"75.0": "178",
"80.0": "199",
"85.0": "240",
"90.0": "289",
"91.0": "301",
"93.0": "329",
"95.0": "380",
"96.0": "406",
"97.0": "442",
"98.0": "497",
"99.0": "587"
}
潜在的性能瓶颈及问题点
PG性能
一次工作流调度涉及 多张表的 insert update
temporal-server 中心化 代理
集群部署 高可用与性能扩展
参考资料
Temporal 本地环境搭建及测试
linux手工释放cache
使用 maven-assembly-plugin 打包 fat jar
上一篇
下一篇
temporal 任务运行机制实例测试
GO获取环境变量
GO入门指南实例
prometheus metrics 格式说明
httpclient 超时设置
Borg Omega and Kubernetes