The goal of this experiment is to measure the amount of latency that is added to a simple service by the addition of various Istio Components. To isolate the contribution of each component, many combinations of avialable components were tested and recorded.
Components
- Sidecar
- Istio Ingress
- Load Balancer Ingress
Other Parameters
- Scale: 1 or 5 instances of services and ingress
- Service: Single HTTP server or frontend/backend combo
Each combination of Parameters was tested using a fortio client running inside the cluster, with 64 concurrent connections for 30 seconds. First the max QPS was measured (using -qps 0), then a second test was run at 75% load as per fortio recommendations, and the P50 and P99 latencies were observed.
Isotope files
- frontend.yaml - includes two services in frontend/backend configuration
- singleton.yaml - includes minimalist service that responds to requests immediately. To generate kubernetes yaml for these scenarios, run:
go run $GOPATH/src/istio.io/isotope/converter/main.go kubernetes --service-image gcr.io/istio-testing/isotope:0.0.1 singleton.yaml | kubectl apply -f -
Load generator files (fortio used for this experiment, wrk for comparison)
- fortio.yaml
- wrk.yaml
For example, to test latency with no sidecar or ingress on the frontend service using the fortio pod above, run:
kubectl exec deployment/client -- fortio load -qps 0 -c 64 -t 30s http://go-sample:8080
The last line of output for the above command will include the maximum qps of the service in this configuration. Multiply that value by 75%, and run:
kubectl exec deployment/client -- fortio load -qps [75%] -c 64 -t 30s http://go-sample:8080
Which will give realistic results for a service under 75% of maximum load.
Svc | Scale | Istio Ingress | Istio Sidecar | P99 | P50 | MaxQPS |
---|---|---|---|---|---|---|
single | 1 | No | No | 0.002662 | 0.000612 | 64000 |
double | 1 | No | No | 0.447564 | 0.006938 | 1837 |
single | 1 | Istio | No | 0.023874 | 0.009830 | 5347 |
double | 1 | Istio | No | 0.367515 | 0.018978 | 1300 |
single | 1 | Istio | Istio | 0.029908 | 0.014137 | 4382 |
double | 1 | Istio | Istio | 0.294953 | 0.046129 | 943 |
single | 1 | No | Istio | 0.017214 | 0.009103 | 6400 |
double | 1 | No | Istio | 0.273101 | 0.036778 | 1095 |
single | 5 | No | No | 0.00226841 | 0.00057761 | 98789 |
double | 5 | No | No | 0.0619578 | 0.00283516 | 9454 |
single | 5 | Istio | No | 0.0819547 | 0.00272854 | 11690 |
double | 5 | Istio | No | 0.113905 | 0.00507379 | 4745 |
single | 5 | Istio | Istio | 0.0319723 | 0.00660786 | 6475 |
double | 5 | Istio | Istio | 0.0541879 | 0.0147881 | 2796 |
single | 5 | No | Istio | 0.0113906 | 0.00360995 | 17484 |
double | 5 | No | Istio | 0.0660513 | 0.0130243 | 4301 |