美文网首页每天进步一点点
2020-06-07【Istio流量治理】

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

作者: 桢桢claire | 来源:发表于2020-06-07 20:30 被阅读0次
    想念布里斯班的鲸鱼

    今日鸡汤

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

    如何利用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 
    

    相关文章

      网友评论

        本文标题:2020-06-07【Istio流量治理】

        本文链接:https://www.haomeiwen.com/subject/tgnwzhtx.html