【译文连载】 理解Istio服务网格(第五章 混沌测试)

全书目录

本文目录

第5章 混沌测试................................................................................................. 1

5.1 HTTP错误.................................................................................................... 1

5.2 延迟............................................................................................................ 3

第5章 混沌测试

Netflix发布的一个著名OSS工程“Chaos Monkey”对IT业界产生了很大的影响。Netflix编写代码在生产系统中随机杀掉生产环境中的某些服务,这种做法对人们的心理冲击很大。当大多数团队还在尽力维护系统可用性的时候,自己写代码攻击自己的系统似乎很疯狂。从Chaos Monkey项目诞生开始,一个新的工程名词被创造出来了:混沌工程(chaos engineering)。

根据混沌工程网站(http://principlesofchaos.org/),“混沌工程是一种针对分布式系统的工程方法,旨在强化生产系统应对突发情况的能力,以增强系统能力”。

在复杂系统中,故障可能会经常出现,但根本目的还在于防止整个系统的灾难性故障。但问题是,如何才能验证你的微服务系统具有足够的弹性呢?你可以注入一些混沌来进行测试验证。利用Istio,因为istio-proxy会处理所有网络流量,因此,它可以修改服务的返回结果以及响应时间,这使得利用Istio进行混沌测试变得更加容易。Istio很容易地就能插入HTTP错误码和网络延迟这两种常用错误。

5.1 HTTP错误

?基于前面章节中的练习,你要确保recommendation服务的v1和v2版本都被部署到环境中了,而且不能产生错误和长时间等待。现在,利用Istio而不是在Java代码中插入错误。

获得recommendation服务的pod:

oc get pods -l app=recommendation -n tutorial

NAME                      READY   STATUS   RESTARTS  AGE

recommendation-v1-3719512284   2/2     Running  6         18m

recommendation-v2-2815683430   2/2     Running  0         13m

确认集群中没有DestionationRules和VirtualService对象:

oc delete virtualservices --all -n tutorial

oc delete destinationrules --all -n tutorial

我们使用Istio的DestionationRule和VirtualService来插入一定百分比的错误。本例中,一半的响应会返回HTTP 503错误码。DestionationRule的定义如下:

apiVersion: networking.istio.io/v1alpha3

kind: DestinationRule

metadata:

name: recommendation

namespace: tutorial

spec:

host: recommendation

subsets:

- labels:

app: recommendation

name: app-recommendation

VirtualService定义:

apiVersion: networking.istio.io/v1alpha3

kind: VirtualService

metadata:

name: recommendation

namespace: tutorial

spec:

hosts:

- recommendation

http:

- fault:

abort:

httpStatus: 503

percent: 50

route:

- destination:

host: recommendation

subset: app-recommendation

应用这两个对象的定义:

oc -n tutorial create -f istiofiles/destination-rule-recommendation.yml

oc -n tutorial create -f istiofiles/virtual-service-recommendation-503.yml

测试很简单,只需要用curl访问customer服务端点。要多测试几次,看结果中返回503错误是不是大概占50%。

curl customer-tutorial.$(minishift ip).nip.io

customer => preference => recommendation v1 from ‘3719512284‘: 88

curl customer-tutorial.$(minishift ip).nip.io

customer => 503 preference => 503 fault filter abort

你还可以检查preference服务是否正确处理了recommendation服务的错误返回。

清理环境,将VirtualService对象删除,但保留DestionationRule对象。

oc delete virtualservices --all -n tutorial

5.2 延迟

分布式计算环境中,潜在故障中最隐蔽的不是服务死了,而是服务响应缓慢,这有可能导致服务网络一连串的故障。更重要的是,如果你的服务需要满足一定的SLA,又怎么确认服务延迟不会影响到用户体验呢?

和HTTP错误注入类似,网络延迟注入也使用VirtualService类型。下面的定义向recommendation服务的50%的响应中注入7秒的延迟:

apiVersion: networking.istio.io/v1alpha3

kind: VirtualService

metadata:

creationTimestamp: null

name: recommendation

namespace: tutorial

spec:

hosts:

- recommendation

http:

- fault:

delay:

fixedDelay: 7.000s

percent: 50

route:

- destination:

host: recommendation

subset: app-recommendation

应用该对象:

oc -n tutorial create -f istiofiles/virtual-service-recommendation-delay.yml

然后,向customer服务端点发送一些请求,查看响应时间。Time命令会输出curl命令收到每个响应经过的时间:

#!/bin/bash

while true

do

time curl customer-tutorial.$(minishift ip).nip.io

sleep .1

done

在输出中,你会看到大量的响应有延迟了。如果你在监控recommendation服务v1和v2 pod的日志,你会发现延迟发生在recommendation服务被调用之前。延迟发生在Istio代理中,而不是在实际的服务中:

oc logs recommendation-v2-2815683430 -f -c recommendation

在第4章中你学习了如何进行错误处理,本章中,你改变了角色,转而自己向自己的系统中通过Istio VirtualService注入错误。此时,你心里也许突然有了一个关键问题:我怎么知道错误是否发生在业务服务中呢?答案就第6章。

清理环境:

oc delete virtualservice recommendation -n tutorial

oc delete destinationrule recommendation -n tutorial

书籍英文版下载链接为 https://developers.redhat.com/books/introducing-istio-service-mesh-microservices/,作者 Burr Sutter 和 Christian Posta

本中文译稿版权由本人所有。水平有限,错误肯定是有的,还请海涵。

感谢您的阅读,欢迎关注我的微信公众号:

原文地址:https://www.cnblogs.com/sammyliu/p/12397689.html

时间: 2024-10-08 22:34:39

【译文连载】 理解Istio服务网格(第五章 混沌测试)的相关文章

Istio 服务网格进阶实战

https://www.bookstack.cn/read/istio-handbook/concepts-and-principle-istio-sidecar-injector.md 原文地址:https://www.cnblogs.com/kaobeixingfu/p/12088023.html

[深入理解Android卷二 全文-第五章]深入理解PowerManagerService

由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该因为纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容 第5章  深入理解PowerManagerService 本章主要内容: ·  深入分析PowerManagerService ·  深入分析BatteryService和BatteryStatsService 本章所涉及的源代码文件名及位置: ·  PowerManagerService.java frame

[深入理解Android卷一全文-第五章]深入理解常见类

由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该因为纸质媒介的问题而中断,所以我将在OSC博客中全文转发这两本书的全部内容. 第5章 深入理解常见类 本章主要内容 ·  分析RefBase.sp,wp和LightRefBase类. ·  分析Native的Thread类和常用同步类. ·  分析Java层的Handler.Looper,以及HandlerThread类. 本章涉及的源代码文件名称及位置 下面是我们本章分析的源码文件名和

你真的理解微服务架构吗

什么是微服务 首先微服务并没有一个官方的定义,想要直接描述微服务比较困难,我们可以通过对比传统WEB应用,来理解什么是微服务. 传统的WEB应用核心分为业务逻辑.适配器以及API或通过UI访问的WEB界面.业务逻辑定义业务流程.业务规则以及领域实体.适配器包括数据库访问组件.消息组件以及访问接口等.一个打车软件的架构图如下: 尽管也是遵循模块化开发,但最终它们会打包并部署为单体式应用.例如Java应用程序会被打包成WAR,部署在Tomcat或者Jetty上. 这种单体应用比较适合于小项目,优点是

Istio 服务部署

此篇博文istio相关介绍和测试用例来源于网络,这里结合自己配置加以整理. istio 介绍 官方中文参考文档 官方英文参考文档 服务网格(Service Mesh)这个术语通常用于描述构成这些应用程序的微服务网络以及应用之间的交互.随着规模和复杂性的增长,服务网格越来越难以理解和管理.它的需求包括服务发现.负载均衡.故障恢复.指标收集和监控以及通常更加复杂的运维需求,例如 A/B 测试.金丝雀发布.限流.访问控制和端到端认证等. Istio 提供了一个完整的解决方案,通过为整个服务网格提供行为

《Introduction to Tornado》中文翻译计划——第五章:异步Web服务

http://www.pythoner.com/294.html 本文为<Introduction to Tornado>中文翻译,将在https://github.com/alioth310/itt2zh上面持续更新,本文内容可能不是最新状态,请在GitHub上获得最新版本. 本文也可在http://demo.pythoner.com/itt2zh上进行格式化的预览. 第五章:异步Web服务 到目前为止,我们已经看到了许多使Tornado成为一个Web应用强有力框架的功能.它的简单性.易用性

第二章 服务网格的基本特性

服务网格是一个独立的基础设施层,用来处理服务之间的通信. 典型的服务网格通常提供了一组轻量级的网络代理,代理会在应用无感知的情况下,同应用并行部署.运行. Istio特性如下: 连接: 对网格内部的服务之间的调用产生的流量进行智能管理,以此为基础,对微服务的部署.测试和升级提供保障 安全:认证.加密.和鉴权支持,在不入侵代码的情况下,加固现有服务,提高安全性. 策略:在控制面定制策略,并在服务中实施. 观察:对服务间调用进行跟踪和测量,并获取服务的状态信息. 原文地址:https://www.c

Service Mesh服务网格清单

Service Mesh服务网格清单 Istio Istio官网 Istio中文官网 Istio开源 无需太多介绍Service Mesh明日之星,扛把子,截止2019.11还有太多问题没解决 复杂性,性能让人望而却步,能上生产的是真要技术厉害,还得内心强大,项目允许 Linkerd Linkerd官网 Linkerd中文官网 A service mesh for Kubernetes and beyond. Main repo for Linkerd 2.x. Linkerd is a ser

ServiceMesh(服务网格)

今年,ServiceMesh(服务网格)概念在社区里头非常火,有人提出2018年是ServiceMesh年,还有人提出ServiceMesh是下一代的微服务架构基础.作为架构师,如果你现在还不了解ServiceMesh的话,是否感觉有点落伍了?那么到底什么是ServiceMesh?它诞生的背景是什么?它解决什么问题?企业是否适合引入ServiceMesh?根据近年在一线互联网企业的实践和思考,从个人视角出发,我为大家一一解答这些问题. 微服务架构的核心技术问题 在业务规模化和研发效能提升等因素的