update
wrk -t16 -c16 -d1800s -s ./print_response.lua -H "Host: redis-benchmark.default.example.com" http://$GATEWAY_URL -v
这一部分使用的是knative默认的早期绑定,但不同于knative默认的那种“早期绑定”,为了获得任务被调度到pod上的时间戳,我让activator始终处于流量路径中负责将任务轮流路由给pod,而非交给k8s系统来轮转调度。需要说明的统计数据如下:
负载的具体设置上也有改进:在分布基本不变的基础上,将时间缩一下,同时细化粒度,单位任务大小减少为原来的1/10,免得时间最长的任务跑不起来,另外减少压测时间到600秒,运行过程中pod的最大数量和autoscaler配置不变
现在的分布为: [8000, 4000, 2000, 1000, 700, 500, 350, 250, 200, 150, 100, 50, 40, 30, 25, 15, 5, 3, 2, 1],每种概率5%
[8000, 4000, 2000, 1000, 700, 500, 350, 250, 200, 150, 100, 50, 40, 30, 25, 15, 5, 3, 2, 1]
原始数据,统计数据。
实现延迟绑定的方式:在redis-service.yaml中规定containerConcurrency为1(或者其它非零数),然后修改serving/pkg/net/throttler.go的newRevisionThrottler函数,指定负载均衡算法始终为firstAvailableLBPolicy,这样activator就始终负责选择空闲出来的pod,并将请求路由给相应的pod,而无需k8s系统自身的调度。
©Copyright 2023 CCF 开源发展委员会 Powered by Trustie& IntelliDE 京ICP备13000930号
实验环境
实验描述
wrk -t16 -c16 -d1800s -s ./print_response.lua -H "Host: redis-benchmark.default.example.com" http://$GATEWAY_URL -v
,压测过程中原本能跑完的也引发了activator timeout,最终一个7500单位的任务也没跑出来改进(使用默认的早期绑定策略)
这一部分使用的是knative默认的早期绑定,但不同于knative默认的那种“早期绑定”,为了获得任务被调度到pod上的时间戳,我让activator始终处于流量路径中负责将任务轮流路由给pod,而非交给k8s系统来轮转调度。需要说明的统计数据如下:
负载的具体设置上也有改进:在分布基本不变的基础上,将时间缩一下,同时细化粒度,单位任务大小减少为原来的1/10,免得时间最长的任务跑不起来,另外减少压测时间到600秒,运行过程中pod的最大数量和autoscaler配置不变
现在的分布为:
[8000, 4000, 2000, 1000, 700, 500, 350, 250, 200, 150, 100, 50, 40, 30, 25, 15, 5, 3, 2, 1]
,每种概率5%原始数据,统计数据。
实现延迟绑定
实现延迟绑定的方式:在redis-service.yaml中规定containerConcurrency为1(或者其它非零数),然后修改serving/pkg/net/throttler.go的newRevisionThrottler函数,指定负载均衡算法始终为firstAvailableLBPolicy,这样activator就始终负责选择空闲出来的pod,并将请求路由给相应的pod,而无需k8s系统自身的调度。