Istio 服务韧性| 学习笔记

简介: 快速学习 Istio 服务韧性

开发者学堂课程微服务实战-Service Mesh 与 IstioIstio 服务韧性】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/620/detail/9438


Istio 服务韧性

目录:

一、访问超时

二、熔断操作

三、测试

四、流量速率限制

 

一、访问超时

image.png

现在需要调整访问超时的时间,一个是通过故障注入,通过延长相应的时间来注入故障,一个是改变超时或延长超时来减少故障,消灭故障。

操作:

US-169691-MPistio andy.shi$ kubectl apply -f <apiVersion:networking.istio.io/v1alpha3

>kind:VirtualService

)metadata:

name:reviews

spec:

hosts:

reviews

http:

route:

destination:

host:reviews

subset:v2

>EOF

virtualservice.networking.istio.io/reviews createdUS-169691-MP:istio andy.shi$

US-169691-MPistio andy.shi$ kubectl delete -f samples/bookinfo/networking/virtual-service-allv1.yaml

virtualservice.networking.istio.io "reviews" deleted

virtualservice.networking.istio.io "ratings" deleted

Error from server (NotFound)error when deleting"samples/bookinfo/networking/virtual-serviceall-v1.yaml"virtualservices.networking.istio.io"productpage"not found

Error from server (NotFound):error when deleting"samples/bookinfo/networking/virtual-serviceall-v1.yaml": virtualservices.networking.istio.io"details"not found

US-169691-MPistio andy.shi$//只是对名字,不是具体操作。这是一个偷懒的做法但是很有用。

总结:

在超时的操作中,把 reviews 的超时设为半秒钟,但是 reviews 除了自己的文本以外,还有注入延迟需要两秒钟,所以就报错了。和故障注入很像,为了显示超时很重要,需要显示出来,否则就没有意义了。

要把调用它的服务延迟缩短,把超时延长,不要加注,可以调到3秒或4秒,操作的结果是一切正常。跟超时类似的结果就是冲蚀。

冲蚀操作如下:

apiVersion:networking.istio.io/v1alpha3kind:VirtualService

metadata:

name:ratings

spec:

hosts:

ratings

http:

route:

destination:

host:ratings

subset:v1//都是一样的

retries:

attempts3//试三次

perTryTimeout: 2s//每次2秒钟

 

二、熔断操作

什么是 springcoud 的熔断机制,熔断机制是对分布式架构项目的一种起到保护作用的手段或者机制,就像继电器Q里面的保险丝,到达某个临界点就会自动熔断保险丝,以达到保护电路的作用,切换到 SpringCloud 里面也是同样的道理,是从可用性着想,为防止系统的整体缓慢甚至崩溃,采用的技术手段,也就是熔断机制。

springcloud 的熔断机制触发一般是因为某个服务的故障所引起,及时的进行熔断,避免了雪崩效应的出现。

US-169691-MP:istio andy.shi$ kubectl apply -f-<

kind:DestinationRule

metadata:

name:productpage

spec:

host:productpage

trafficPolicy:

connectionPool:

tcp:

maxConnections:1

http:

http1MaxPendingRequests:1

maxRequestsPerConnection:1

outlierDetection:

consecutiveErrors:1

interval:1s

baseEjectionTime:3m

maxEjectionPercent100

tls

mode:ISTIO_MUTUAL

EOF

 

三、测试

US-169691-MP:istio andy.shi$ docker run -p 8080:8080-p 8079:8079 fortio/fortio server[1] 67116

US-169691-MP:istio andy.shi$ Fortio 1.3.2-pre grpc 'ping' serverlistening on ::]:8079Fortio 1.3.2-pre https redirector server listening on [::]:8081

Fortio 1.3.2-pre echo serverlistening on::]:8080

02:24:44 I fortio_main.go:214> A11 fortio 1.3.2-pre2019-04-29 15:41 f8f17fa310d60960f8267e1625231cf6e5ce459d go1.11.5servers started!

Data directory is /var/lib/fortio

UIstarted - visit:

http://localhost:8080/fortio/

(or any host/ipreachable on this server)

所以这就是熔断的演示,不要忘记清理一下,否则会与后面的内容冲突,删掉即可。

 

四、流量速率限制

通过对流量的速率限制来确保系统的稳定性,由此可以看出限流就相当重要。

1.  在系统中,使用 Mixer 实现,进行限流的工作,限流分为两部分,第一部分是在客户端配合的名称与大小,第二部分是可以把它与哪些服务关联起来,进行操作。

2.  需要定义 QuotaSpec QuotaSpecBinding,确保配合的适配器在何时启动进行限流的操作。

3.以及本身的Instance,HandlerRule

Instance

apiversion:config.istio.io/vlalpha2

kind:instance

metadata:

name:requestcount quota//计数器,它是有条件的

namespace:istio-system

spec:

compiledTemplate:quota

params:

dimensions:

source:request.headers["x-forwarded-for"] |"unknown"//保留原始的ip

destination:destination,labels["app"] | destination.service.nameI "unknown" destinationVersion:destination.labelsl"version"] l"unknown"//服务的同一个 pod,算一个账号。

‚Handler

apiversion:config.istio.io/v1alpha2

kind:handler

metadata:

name:quota handler

namespace:istio-system

spec:

compiledAdapter:menqdota//没有同步功能,每一个版本就一个 pod

params:

quotas:

name:requestcountquota.instance.istio-system
maxAmount:500
validDuration:1s
# The first matching override is apptied.
# A requestcount instance is checked against override dimensions. overrides:
# The following override applies to
reviews'regardless# of the source.
dimensions:
destination: reviews
maxAmount:1
validDuration:5s
# The following override applies to
productpage' when
the source is a specific ip address.
dimensions:
destination: productpage
source:n 10.28.11.28
maxAmount;500

ƒRule

kind:QuotaSpec//我这里有定义的,可以使它生效

metadata:

name: request-count

namespace:istio-system

spec:

rules:

quotas:

charge:1

guota:requestcountquota

apiversion:config.istio.io/vlalpha2

kindQuotaSpecBinding//哪个产生作用

metadata:

name: request-count

namespace:istio-system

spec:

quotaspecs:

name:request-count

namecnace:istio-system

相关文章
|
6月前
|
运维 监控 Cloud Native
江帅帅:一盏茶的时间初探网格服务架构 Istio
江帅帅:一盏茶的时间初探网格服务架构 Istio
49 0
|
测试技术 开发者
KubeVela 对接 Istio 实现应用灰度发布实践|学习笔记(二)
快速学习 KubeVela 对接 Istio 实现应用灰度发布实践
KubeVela 对接 Istio 实现应用灰度发布实践|学习笔记(二)
|
缓存 Kubernetes 网络协议
Kubernetes 服务接入 Istio
Kubernetes 服务接入 Istio
376 1
|
自然语言处理 Kubernetes 网络协议
在阿里云安装初试 Istio| 学习笔记
快速学习在阿里云安装初试 Istio
在阿里云安装初试 Istio| 学习笔记
|
Prometheus 监控 Cloud Native
Istio 遥测| 学习笔记
快速学习 Istio 遥测
Istio 遥测| 学习笔记
|
负载均衡 监控 测试技术
Istio 介绍| 学习笔记
快速学习 Istio 介绍
Istio 介绍| 学习笔记
|
Kubernetes 安全 API
Istio 安全性和课程总结| 学习笔记
快速学习 Istio 安全性和课程总结
Istio 安全性和课程总结| 学习笔记
|
Prometheus 监控 Kubernetes
进阶:对接 Istio 实现应用灰度发布实践| 学习笔记
快速学习进阶:对接 Istio 实现应用灰度发布实践。
进阶:对接  Istio 实现应用灰度发布实践| 学习笔记
|
监控 应用服务中间件 nginx
5个 Istio 访问外部服务流量控制最常用的例子,你知道几个?
5 个 Istio 访问外部服务的流量控制常用例子,强烈建议收藏起来,以备不时之需。
310 0
5个 Istio 访问外部服务流量控制最常用的例子,你知道几个?
|
开发者 微服务
Istio 流量管理| 学习笔记
快速学习 Istio 流量管理