对于一个系统来说弹性能力很重要,比如出现了超时故障,系统如何去重试,下面我们来讲讲istio中的超时重试。
下面我们在VirtualService中添加超时和重试的配置项,我们将流量打到v2版本,并且给Ratings服务配置一个延迟。
首先我们将流量打到v2版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: reviews spec: hosts: - reviews http: - route: - destination: host: reviews subset: v2 EOF
|
页面刷新查看只能查看到有黑色星标的v2版本
接下来我们给ratings服务注入一个2s的延迟。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: ratings spec: hosts: - ratings http: - fault: delay: percent: 100 fixedDelay: 2s route: - destination: host: ratings subset: v1 EOF
|
下面我们给reviews服务注入一个1s超时设置,其实就是配置一个timeout的字段
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: reviews spec: hosts: - reviews http: - route: - destination: host: reviews subset: v2 timeout: 1s EOF
|
我们再进行测试刷新会失败,我们设置的延迟是2s,超时时间是1s,所以这里会失败。
下面我们来进行重试的配置,首先需要把reviews的超时配置去掉。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: reviews spec: hosts: - reviews http: - route: - destination: host: reviews subset: v2 EOF
|
接下来,我们给ratings服务配置一下5s的延迟和一个重试2次的配置项retries
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: ratings spec: hosts: - ratings http: - fault: delay: percent: 100 fixedDelay: 5s route: - destination: host: ratings subset: v1 retries: attempts: 2 perTryTimeout: 1s EOF
|
下面我们查看一下ratings的istio-proxy的log,看看是不是出现2次重试的日志
1
| # kubectl logs -f ratings-v1-6f855c5fff-684lz -c istio-proxy
|
这里我们查看日志发现有2次的重试的日志,说明我们重试配置成功。