1、简介
在一个微服务架构的系统中,为了让系统达到较高的健壮性要求,通常需要对系统做定向错误测试。比如电商中的订单系统、支付系统、或者依赖的第三方服务无法使用等若出现故障那将是非常严重的生产事故,因此必须在系统设计前期就需要考虑多样性的异常故障并对每一种异常设计完善的恢复策略或优雅的回退策略,尽全力规避类似事故的发生,使得当系统发生故障时依然可以正常运作。而在这个过程中,服务故障模拟一直以来是一个非常繁杂的工作。
为了处理上诉意外的情况,在开发程序时,可以通过一些手段模拟意外情况,比如手动停掉服务,断网等,用来测试程序的健壮性。当然,也可以通过istio来模拟故障,istio提供了无侵入式的故障注入机制,让开发测试人员在不用调整服务程序的前提下,通过配置即可完成对服务的异常模拟。
2、应用场景
测试系统的容错能力:通过注入延迟,可以测试系统在网络延迟情况下的表现,从而找出系统的瓶颈和弱点。
模拟真实的网络环境:在开发和测试环境中,通常很难模拟出真实的网络延迟。而延迟故障注入可以帮助开发者在不依赖真实网络条件的情况下,测试系统在不同延迟下的表现。
验证重试和超时策略:延迟故障注入可以帮助开发者验证系统的重试和超时策略是否合理,确保在出现延迟的情况下,系统能够正常工作。
3、部署示例应用
该应用由四个单独的微服务构成。这个应用模仿在线书店的一个分类,显示一本书的信息。页面上会显示一本书的描述,书籍的细节(ISBN、页数等),以及关于这本书的一些评论。
$ kubectl create namespace bookinfo
$ kubectl -n bookinfo create -f samples/bookinfo/platform/kube/bookinfo.yaml
$ kubectl -n bookinfo get po
NAME READY STATUS RESTARTS AGE
details-v1-5974b67c8-wclnd 1/1 Running 0 34s
productpage-v1-64794f5db4-jsdbg 1/1 Running 0 33s
ratings-v1-c6cdf8d98-jrfrn 1/1 Running 0 33s
reviews-v1-7f6558b974-kq6kj 1/1 Running 0 33s
reviews-v2-6cb6ccd848-qdg2k 1/1 Running 0 34s
reviews-v3-cc56b578-kppcx 1/1 Running 0 34s
Bookinfo 应用分为四个单独的微服务:
productpage. 这个微服务会调用 details 和 reviews 两个微服务,用来生成页面。
details. 这个微服务中包含了书籍的信息。
reviews. 这个微服务中包含了书籍相关的评论。它还会调用 ratings 微服务。
ratings. 这个微服务中包含了由书籍评价组成的评级信息。
reviews 微服务有 3 个版本:
v1 版本不会调用 ratings 服务。
v2 版本会调用 ratings 服务,并使用 1 到 5 个黑色星形图标来显示评分信息。
v3 版本会调用 ratings 服务,并使用 1 到 5 个红色星形图标来显示评分信息。
Bookinfo 是一个异构应用,几个微服务是由不同的语言编写的。这些服务对 Istio 并无依赖,但是构成了一个有代表性的服务网格的例子:它由多个服务、多个语言构成,并且 reviews 服务具有多个版本。
4、注入延迟故障
ratings服务注入2秒的延迟
[root@mast01 istio]# vim virtualservice-ratings-2s-delay.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: ratings
namespace: bookinfo
spec:
hosts:
- ratings
http: - fault:
delay:
percentage:
value: 100 #对所有请求注入故障
fixedDelay: 2s #注入的延迟时间
route: - destination:
host: ratings
[root@mast01 istio]# kubectl apply -f virtualservice-ratings-2s-delay.yaml
virtualservice.networking.istio.io/ratings created
查看对应envoy配置
[root@mast01 istio]# istioctl pc r ratings-v1-754f9c4975-v2ztk.bookinfo –name 9080 -ojson
访问http://bookinfo.com/productpage,可以明显感觉2s的延迟,network可以看到
5、注意事项
生产环境慎用:在生产环境中使用故障注入延迟时需要非常谨慎,因为它会影响实际用户的请求。
合理设置延迟时间和百分比:根据具体的测试需求和服务的特性,合理设置延迟时间和百分比,以避免对系统造成过大的负担。
监控和日志记录:在引入故障延迟时,确保有完善的监控和日志记录,以便及时发现和解决问题。
6、结论
Istio的故障注入延迟功能为微服务架构提供了强大的测试手段,能够有效地评估系统在高延迟环境下的表现,提高系统的稳定性和弹性。通过合理配置和使用故障注入延迟,开发人员可以提前发现潜在问题,优化系统性能,确保在各种复杂环境下提供优质的服务体验。
声明:文中观点不代表本站立场。本文传送门:http://eyangzhen.com/418834.html