【云驻共创】华为云云原生黄金课程11:Istio流量治理与监控管理
摘要
十年云计算浪潮下,DevOps、容器、微服务等技术飞速发展,云原生成为潮流。2020年华为云在业界率先提出了云原生2 .0的理念。云原生2.0是企业智能升级新阶段,企业云化从“ON Cloud”走向“IN Cloud”,成为“新云原生企业”,新生能力与既有能力立而不破、有机协同,实现资源高效、应用敏捷、业务智能、安全可信。同时,微服务流量治理与监控成为了Istio的重要内容之一。
服务治理介绍
微服务是互联网高速发展以及传统分布式、SOA架构无法适应快速的开发迭代等多重因素共同推动下的产物。微服务雏形(微服务架构概念)最早由Fred George在2012年的一次技术大会上所提出的,拆分SOA服务实现解耦。微服务发扬光大是在2014年,James Lewis 和 Martin Flowler发表了一篇名为《Microservices》的文章。
如下图所示,随着集中式服务根据功能的不同进行拆分后,会出现很多的微服务,那么怎么管理这些微服务呢?这就涉及到服务治理的概念。
服务治理主要针对微服务,那它究竟治理什么?
1. 服务注册和服务发现。由于存在众多的微服务,那么它们之间的注册和发现就是一项重要内容。
2. 服务负载均衡、路由、灰度发布、蓝绿部署。为了保证服务的高可用和健壮性,需要通过多实例部署实现。在服务多实例的管理过程中就会涉及到服务的负载均衡、路由选择,灰度发布以及蓝绿部署等问题。
3. 服务降级、熔断。当某些服务发生异常时,就会触发机制。隔离有问题的服务,降低该服务的可访问级别。
4. 服务限流,最常用的功能之一。
5. 服务监控,包含进程、CPU、请求数、请求时延等。常见的微服务架构有 SpringCloud、Dubbo。
下面介绍一下服务网格与微服务框架流量治理的对比情况:
1. 业务侵入性方面,微服务框架通过 SDK 形式,侵入式开发;服务网格通过 Sidecar 形式,无侵入。
2. 开发语言方面,微服务框架与语言强相关,通常来说,Java 生态支持比较好一些;服务网格与开发语言无关。
3. 灵活性方面,微服务框架属于静态配置,更新配置需要重启;服务网格配置时,非常灵活,可以实现动态配置。
4. 升级方面,微服务框架需要业务开发人员优雅的处理服务升级,具有很大的难度;服务网格实现优雅升级非常简单。
Istio 常用流量治理策略
1. 流量治理策略一:服务注册与发现
服务注册和发现是微服务时代最重要的内容,当注册中心出现问题的时候,整个服务集群就会不可用。如下图所示,众多的微服务都会注册到Kubernetes、Consul、Eureka、ZooKeeper中,通过Pilot实现服务发现,由Envoy提供数据支持。
2. 流量治理策略二:负载均衡
支持负载均衡策略的算法有哪些?常见的算法有加权轮询、最少请求数、环形Hash、随机选择、优先级负载均衡、Locality加权。
Istio的负载均衡策略API主要是通过DestinaRule.TrafficPoliy属性设置,第一种是Simple,类型是SimpleLB(oneof),一种简单的负载均衡策略(ROUND_ROBIN,LEAST——CONN,RANDOM,PASSTHROUGH)。第二种是consistentHash,类型是ConsistentHashLB(oneof),一致性Hash负载均衡算法(支持HTTP Header,HTTP Cookie,源地址,Query Param)。第三种是localityLbSetting,类型是LocalityLoadBalancerSetting,它是基于位置信息的负载均衡。
接下来重点介绍一个第三种负载均衡策略LocalityLoadBalancerSetting,它支持两种模式,第一种是Distribute, 类型是Distribute[],显式的指定跨不同可用域的负载均衡权重。第二种是Failover,类型是Failover[],显式的指定负载均衡故障转移策略,指明当本区域的服务实例变得不健康时,请求转移到哪些区域。
下面介绍一下负载均衡使用说明。
1)simple属性设置方式如下所示:
2)consistentHash属性设置方式如下所示:
3)高级LocalityLoadBalancerSetting属性设置failover的方式如下所示:
4)高级LocalityLoadBalancerSetting属性设置distribute的方式如下所示:
3. 流量治理策略三:路由(流量切分、灰度发布)
路由匹配条件,根据不同条件设置不同的权重。Istio的实现路由治理的API是通过VirtualService.HTTPRoute属性设置,主要有两种方式,第一种是Match,类型是HTTPMatchRequest[],HTTP匹配(uri,header,scheme,method,query param等)第二种是Route,类型是HTTPRouteDestination[],用来指定路由目的端,支持权重设置。
下面介绍路由策略的使用说明。
1)subsets属性设置方式如下所示:
2)http属性设置方式如下所示:
4. 流量治理策略四:熔断、降级
Istio实现服务熔断和降级的API主要是通过ConnectionPoolSettings属性设置实现的,其中包括TCP和HTTP两种模式。TCP模式,类型是TCPSettings,主要作用于TCP连接池设置。HTTP模式,类型是HTTPSettings,作用于HTTP连接池设置。
下面详细介绍一下TCPSettings属性,它包括maxConnections(最大连接数)、connectTimeout(连接超时时间)、tcpKeepAlive(Keepalive设置);HTTPSettings属性包括http1MaxPendingRequests(最大并发请求)、http2MaxRequests(最大并发请求)、maxRequestPerConnection(每条连接最大请求数);OutlierDetection属性包括consecutiveGatewayErrors(连续网管错误502、503、504)、Consecutive5XxErrors(连续5xx错误)、Interval(Eject分析间隔)、baseEjectionTime(最小Eject周期)、maxEjectionPercent(最大Eject百分比)。
下面介绍熔断策略的使用说明。
1)ConnectionPool和OutlierDetection属性设置方式如下所示:
5. 流量治理策略五:故障注入
故障注入可以用来识别系统最薄弱的环节,支持的类型如下:
1) HTTP请求响应延时注入
2) HTTP、gRPC错误码注入
如下图所示,图1设置20%的流量有5s的时延,图2设置10%的流量有500的错误码。
下面介绍故障注入的使用说明。
1)下图对应20%的流量有5s延时的设置情况:
2)下图对应10%的流量有500错误码的设置情况:
6. 流量治理策略六:限流
Istio支持两种限流方式:
1) 中心集中式限流,如下图1所示。
2) 本地限流,直接作用到Envoy,响应速度更快,如下图2所示。
下面介绍限流策略的使用说明,演示本地限流模式的设置方法:
7. 流量治理策略七:失败重试
Istio支持失败重试HTTPRetry,提高系统的Resilience,常用策略之一。Istio实现失败重试的API是HTTPRetry,其中包含的字段有四个,Attempts,类型是int32,表示重试次数、perTryTimeout,类型HTTPSettings,表示每次重试的超时时间、retryOn,类型是string,重试条件(5xx,gateway-error,connect-failure)、retryRemoteLocalities,类型是BoolValue,是否重试到其他地域的Endpoints。
下面介绍失败重试的使用说明,配置方式如下图所示:
Istio 监控介绍
1. Istio可观测性
Istio 以非侵入的方式提供了以下遥测类型:
1) Metrics,基础方式。
2) Distributed Traces,分布式调用链。
3) Access Logs,Istio默认日志访问记录。
2. 监控界面展示
Istio Metrics监控界面:
Istio 分布式调用链监控界面:
Istio 分布式调用链拓扑图:
Istio访问日志:
结尾
本文主要介绍了服务治理的基本概念以及Istio常用的流量治理策略和使用方法,最后还介绍了Istio的监控内容。通过本文的介绍,相信大家对于Istio的流量治理和服务监控有了一定的了解。Istio作为一个连接、安全加固、控制和服务观察的开放平台在云原生时代注定扮演重要的角色。
本文整理自华为云社区【内容共创】活动第13期。
https://bbs.huaweicloud.cn/blogs/330939
- 点赞
- 收藏
- 关注作者
评论(0)