Istio virtual service 超时和重试

在使用xshell去远程连接服务器的时候没有反应,这样可能等了几分钟,这样按下crtlc终止就行了。

有些时候微服务是多个服务组成的,a服务会去调用b服务,可能因为网络问题或者连接问题,没有连接成功,那么会尝试不断的连接,这样可能消耗很长时间,对用户的体验感会很差。

所以a服务去连接b服务的时候,一次没有连接成功的时候,就可以设置一个连接超时时间,比如正常情况下1s就可以连接成功,10s还没有连接成功,那么就是不正常的。

所以可以设置过期时间,凡是超过3s钟的,我就认为是不正常的,那么就要去断开这个连接。

为了模拟微服务,这里pod1是去连接pod2的。pod1其实就是一个haproxy。 

这里要为pod1服务去建立一个vs myvs1,这样客户端才能够访问到svc1,也就是访问到pod1。

之后需要为svc2去建立vs,这样是导向往pod2走的时候控制svc2的流量的。

现在要去模拟pod2访问很慢,这里就可以在svc2这块使用延迟故障注入。因为这里使用了hosts -svc2这里就很容易去控制去往svc2流量。上面就是访问svc2的时候都需要延期2s钟,这样就模拟了pod1去访问pod2的时候需要等待2s。(这里是不需要使用gw的,因为pod2是不需要暴露给外部访问的)

现在要模拟故障,如果这边访问pod2很慢,也就是让pod1访问po2的时候觉得访问速度慢。这就需要延迟故障注入。上面创建了myvs2,这就很容易去控制去往svc2流量。

访问超过2s就不正常,这里就可以在vs1里设置其超时时间。(注意timeout和route是对齐的)

设置pod1的超时时间,那么应该控制的是myvs1的流量。

超时之后是不是就可以不访问了呢?超时的意义就是不让你一直在这边等着连接,超时之后就要去做重试。超时之后就可以去做重试。

连接失败重试的次数为3,什么条件重试呢?返回5xx的时候重试。

这里myvs2去做了中断注入。只有返回值为5xx的时候才会去做重试。模拟了中断故障,返回给客户端代码503,然后就可以去做重试。

这里的值只能为5xx,写其他的会报错。

重试可以查看pod1的日志,会有很多curl日志,在第一次curl失败之后,后续会接着有三条curl日志。

猜你喜欢

转载自blog.csdn.net/qq_34556414/article/details/130566869