Istio作为服务治理的工具,使用户不需要在项目中编写代码即可实现微服务治理。主要应用分布式调用追踪、遥测度量收集、灰度发布应用、熔断、故障注入等几个方面场景。
Istio提供灵活的适配器模型来执行授权策略,并为网络中的服务提供多项功能。Istio提供统一抽象,可以与一组开放式基础设施后端进行交互。这样做是为了给运维提供丰富且深入的控制,同时不给服务开发人员带来负担。Istio旨在改变层与层之间的边界,以减少系统复杂性,消除服务代码中的策略逻辑并将控制权交给运维。
图1 Istio适配器模型
以下是Istio比较典型的应用场景。
一、分布式调用追踪
在微服务架构中,业务的调用链非常复杂。一个来自用户的请求可能涉及几十个服务的协同处理,因此需要一个跟踪系统来记录和分析同一次请求在整个调用链上的相关事件,从而帮助研发和运维人员分析系统瓶颈,快速定位异常和优化调用链路。
二、遥测度量收集
Envoy 收集指标相关的原始数据,如请求的服务、HTTP状态码、调用时延等信息,并将这些指标数据发送给Mixer,通过Mixer Adapters将指标信息转换后发送到后端监控系统中,如Prometheus或者InfluxDB等。Mixer对后端监控系统采用了插件机制,便于兼容不同的监控系统。
图2 Istio实现度量收集的原理
三、灰度发布应用
在云原生架构下,应用系统会出现高频发布。通过灰度发布(又名金丝雀发布)来实现业务从老版本到新版本的平滑过渡,并避免升级过程中出现的问题对用户造成影响。Istio 通过高度的抽象和良好的设计,采用一致的方式实现了灰度发布,可以最小化升级中出现的故障对用户的影响。
四、熔断
在微服务架构中,存在着众多互相依赖的服务单元。若一个服务出现故障,就会形成故障蔓延,最终导致整个系统的瘫痪。为了解决这类故障传递问题,服务网格引入断路器实现熔断。断路器是创建弹性微服务应用程序的重要模式。断路器允许用户编写限制故障、延迟峰值以及消除其他不良网络特性影响的应用程序。
断路器模式是指在某个服务发生故障时,断路器的故障监控机制及时向服务调用方返回一个错误响应,避免调用方长时间等待,从而阻止了故障在整个系统中蔓延。
图4 Istio实现断路器的原理
五、故障注入
对于一个大型微服务应用而言,系统的健壮性非常重要。在微服务系统中存在大量服务实例,当部分服务实例出现问题时,微服务应用需要具有较高的容错性,通过重试、断路、自愈等手段保证系统能够继续对外正常提供服务。因此在应用发布到生产系统前必须对系统进行充分的健壮性测试。
对微服务应用进行健壮性测试的一个最大困难是如何对系统故障进行模拟。Istio 通过服务网格承载了微服务之间的通信流量,因此可以在网格中通过规则进行故障注入,模拟部分微服务出现故障的情况,对整个应用的健壮性进行测试。
图5 故障注入的原理
通过设置规则注入故障的方式,测试人员可以很方便地模拟微服务之间的各种通信故障,对微服务应用的健壮性进行较为完整的模拟测试。