2020-06-07【Istio流量治理】
![](https://img.haomeiwen.com/i20396442/e5ae732a42891574.jpg)
今日鸡汤
诚实的生活方式其实是按照自己身体的意愿行事,饿的时候吃饭,爱的时候不必撒谎。
——马尔克斯《霍乱时期的爱情》
如何利用Istio进行流量治理?
流量治理包括很多内容,比如负载均衡、会话保持、故障注入、超时策略和重试机制、HTTP重定向、HTTP重写、服务熔断、限流、隔离、影子测试等。在Istio实现这些服务治理功能时无须修改任何代码,以基础设施的方式提供给用户非侵入的流量治理能力,用户只需要关注自己的业务逻辑开发,无须关注服务访问管理。
1. 负载均衡
为了使系统不出现单点故障,服务需要有多个实例增加冗余来提高高可用性,这就需要负载均衡技术。Istio的loadBalancer支持ROUND_ROBIN(默认)、RANDOM、WEIGHTED、LEAST_REQUESTS模式,可以在DestinationRule中为流向某个服务或服务子集的流量指定这些模型:
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN
2.会话保持
会话保持是将来自同一客户端的请求始终映射到同一个后端实例中,让请求具有记忆性,它也属于负载均衡算法。Istio 利用一致性哈希算法提供了会话保持功能,这种方式只对HTTP连接有效。
trafficPolicy:
loadBalancer:
consistentHash:
httpCookie:
name: user
ttl: 60s
3. 故障注入
故障注入是为了测试软件的稳健型,在代码中引入故障来发现系统中隐藏的bug。Istio的故障注入功能支持延迟注入和中断注入两种方式。
1) 延迟注入
延迟注入是模拟网络延迟和上游服务过载的情况,用fixedDelay注入延迟时间,用percent控制请求故障的百分比。
http:
- fault:
delay:
fixedDelay: 3s
percent: 100
2) 中断注入
中断注入是模拟上游服务直接崩溃的情况,用httpStatus返回500,用percent控制请求故障的百分比。
http:
- fault:
abort:
httpStatus: 500
percent: 100
4. 超时
超时控制机制是为了应对当程序长时间不能正常返回的情况,这时候应该直接在过了设置的时间后就返回错误,可以设置timeout的时间。
http:
- route:
- destination:
host: forecast
timeout: 1s
5. 重试
重试机制是为了应对服务在网络不稳定时返回错误的情况,这时候应该增加反复尝试,可以配置retires的条件。
http:
- retries:
attempts: 3
perTryTimeout: 1s
retryOn: 5xx
6. HTTP重定向
HTTP重定向能让整个页面跳转到新的URL,可以配置redierect的条件。
http:
- match:
- uri:
prefix: /ad
redirect:
authority: advertisement.weather.svc.cluster.local
uri: /maintenanced
retryOn: 5xx
7. HTTP重写
HTTP重写能在HTTP请求转发到目标前对请求内容进行部分改写,可以配置rewrite条件。
http:
- match:
- uri:
prefix: /ad
rewrite:
uri: /maintenanced
8. 熔断
服务端的Proxy会记录调用发生的错误,然后根据配置决定是否继续服务或立刻返回错误,使用熔断机制可以保护服务后端不会过载,可以配置connectionPool条件。
trafficPolicy:
connectionPool:
http:
http1MaxPendingRequests: 5
maxRequestsPerConnection: 1
tcp:
maxConnections: 3
9. 限流
限流是在发生灾难前对并发访问进行限制,防止来自外部服务的过度调用,可以配置速率限制条件。Istio支持Memquota适配器和Redisquota适配器。
10. 服务隔离
服务隔离可以支持定义Sidecar可访问的服务范围。
11. 影子测试
影子测试可以将生产流量复制到目标服务中进行测试,可以配置mirror条件。
http:
- mirror:
- host: forecast
route:
- destination:
host: forecast
subset: v1
weight: 100