87 lines
4.2 KiB
Markdown
87 lines
4.2 KiB
Markdown
---
|
|
title: "Controlling Function Execution"
|
|
draft: false
|
|
weight: 43
|
|
---
|
|
|
|
### Autoscaling
|
|
|
|
Let's create a function to demonstrate the autoscaling behaviour in Fission. We create a simple function which outputs "Hello World" in using NodeJS. We have kept the CPU request and limit purposefully low to simulate the load and also kept the target CPU percent to 50%.
|
|
|
|
```
|
|
$ fission fn create --name hello --env node --code hello.js --mincpu 10 --maxcpu 40 --minmemory 64 --maxmemory 128 --minscale 1 --maxscale 6 --executortype newdeploy --targetcpu 50
|
|
function 'hello' created
|
|
```
|
|
|
|
Now let's use [hey](https://github.com/rakyll/hey) to generate the load with 250 concurrent and a total of 10000 requests:
|
|
|
|
```
|
|
$ hey -c 250 -n 10000 http://$FISSION_ROUTER/hello
|
|
Summary:
|
|
Total: 67.3535 secs
|
|
Slowest: 4.6192 secs
|
|
Fastest: 0.0177 secs
|
|
Average: 1.6464 secs
|
|
Requests/sec: 148.4704
|
|
Total data: 160000 bytes
|
|
Size/request: 16 bytes
|
|
|
|
Response time histogram:
|
|
0.018 [1] |
|
|
0.478 [486] |∎∎∎∎∎∎∎
|
|
0.938 [971] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎
|
|
1.398 [2686] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
|
|
1.858 [2326] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
|
|
2.318 [1641] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
|
|
2.779 [1157] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
|
|
3.239 [574] |∎∎∎∎∎∎∎∎∎
|
|
3.699 [120] |∎∎
|
|
4.159 [0] |
|
|
4.619 [38] |∎
|
|
|
|
Latency distribution:
|
|
10% in 0.7037 secs
|
|
25% in 1.1979 secs
|
|
50% in 1.5038 secs
|
|
75% in 2.1959 secs
|
|
90% in 2.6670 secs
|
|
95% in 2.8855 secs
|
|
99% in 3.4102 secs
|
|
|
|
Details (average, fastest, slowest):
|
|
DNS+dialup: 0.0058 secs, 0.0000 secs, 1.0853 secs
|
|
DNS-lookup: 0.0000 secs, 0.0000 secs, 0.0000 secs
|
|
req write: 0.0000 secs, 0.0000 secs, 0.0026 secs
|
|
resp wait: 1.6405 secs, 0.0176 secs, 3.6144 secs
|
|
resp read: 0.0001 secs, 0.0000 secs, 0.0056 secs
|
|
|
|
Status code distribution:
|
|
[200] 10000 responses
|
|
|
|
```
|
|
While the load is being generated, we will watch the HorizontalPodAutoscaler and how it scales over period of time. As you can notice, the number of pods is scaled from 1 to 3 after the load rises from 8 - 103%. After the load generator stops, it takes a few iterations to scale down from 3 to 1 pod.
|
|
|
|
```
|
|
$ kubectl -n fission-function get hpa -w
|
|
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
|
|
hello-qoxmothj Deployment/hello-qoxmothj 5% / 50% 1 6 1 3m
|
|
hello-qoxmothj Deployment/hello-qoxmothj 8% / 50% 1 6 1 3m
|
|
hello-qoxmothj Deployment/hello-qoxmothj 103% / 50% 1 6 1 4m
|
|
hello-qoxmothj Deployment/hello-qoxmothj 103% / 50% 1 6 3 5m
|
|
hello-qoxmothj Deployment/hello-qoxmothj 25% / 50% 1 6 3 5m
|
|
hello-qoxmothj Deployment/hello-qoxmothj 25% / 50% 1 6 3 6m
|
|
hello-qoxmothj Deployment/hello-qoxmothj 5% / 50% 1 6 3 6m
|
|
hello-qoxmothj Deployment/hello-qoxmothj 5% / 50% 1 6 3 7m
|
|
hello-qoxmothj Deployment/hello-qoxmothj 5% / 50% 1 6 3 7m
|
|
hello-qoxmothj Deployment/hello-qoxmothj 5% / 50% 1 6 3 8m
|
|
hello-qoxmothj Deployment/hello-qoxmothj 5% / 50% 1 6 3 8m
|
|
hello-qoxmothj Deployment/hello-qoxmothj 5% / 50% 1 6 3 9m
|
|
hello-qoxmothj Deployment/hello-qoxmothj 5% / 50% 1 6 3 9m
|
|
hello-qoxmothj Deployment/hello-qoxmothj 5% / 50% 1 6 3 10m
|
|
hello-qoxmothj Deployment/hello-qoxmothj 5% / 50% 1 6 3 10m
|
|
hello-qoxmothj Deployment/hello-qoxmothj 7% / 50% 1 6 1 11m
|
|
hello-qoxmothj Deployment/hello-qoxmothj 6% / 50% 1 6 1 11m
|
|
hello-qoxmothj Deployment/hello-qoxmothj 6% / 50% 1 6 1 12m
|
|
hello-qoxmothj Deployment/hello-qoxmothj 6% / 50% 1 6 1 12m
|
|
```
|