每天进步一点点

2020-06-07【Istio流量治理】

2020-06-07  本文已影响0人  桢桢claire
想念布里斯班的鲸鱼

今日鸡汤

诚实的生活方式其实是按照自己身体的意愿行事,饿的时候吃饭,爱的时候不必撒谎。
——马尔克斯《霍乱时期的爱情》

如何利用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 
上一篇下一篇

猜你喜欢

热点阅读