Istio 流量治理功能原理与实战
一、负载均衡算法原理与实战
负载均衡算法(load balancing algorithm),定义了几种基本的流量分发方式,在Istio中共有4种标准负载均衡算法。
•Round_Robin: 轮询算法,顾名思义请求将会依次发给每一个实例,来共同分担所有的请求。
•Random: 随机算法,将所有的请求随机分发给健康的实例
•Least_Conn: 最小连接数,在所有健康的实例中任选两个,将请求发给连接数较小的那一个实例。
接下来,我们将根据以上几个算法结合APM(应用性能管理)的监控拓扑图来实战下。
·实战环境·
华为云开启了Istio服务网格的CCE集群
官方最佳时间Bookinfo应用,并且给Reviews配置了五个实例
开通APM测试服务(免费)
我们知道如果用户不进行任何配置,负载均衡算法默认是轮询算法,所以我们现将负载均衡算法设为随机(Random)。
步骤 1
在云容器引擎界面点击应用管理,选择流量治理。
步骤 2
右侧出现拓扑图,在上面的选项栏中选择集群,命名空间,应用。然后点击我们想配置的组件,这里是 reviews,右侧则会出现流量治理的界面。
步骤 3
在负载均衡算法中,由Round_Robin 改为random。
步骤 4
在左侧导航栏中选择流量治理下面的流量监控,再选择相应的集群,命名空间,应用。多访问几次,或者后台写脚本一直curl productpage,可以从拓扑图中观察数据。
步骤 5
当有流量时,鼠标右键点击reviews组件,选择展开选项这时我们可以看到所有实例的被分发情况。
| 实例编号 | 1 | 2 | 3 | 4 | 5 |
| 访问次数 | 62 | 38 | 39 | 42 | 52 |
其余负载均衡算法基本一样,我们在步骤上不做赘述,直接展示结果。
轮询算法:
| 实例编号 | 1 | 2 | 3 | 4 | 5 |
| 访问次数 | 47 | 47 | 48 | 46 | 47 |
二、会话保持原理与实战
会话保持(Session Affinity)是通过设定的某个指标来计算,将哈希值相同的请求分发至某个固定的实例来处理。现在支持基于HTTP头部设定指标和Cookie键值设定指标。
我们当前还在轮询算法中,所以所有请求会均匀的分配给所有实例,设置会话保持基于HTTP请求头部,并且设为Cookie。我们后台curl的请求cookie设为了一个固定值,理论上来讲所有的请求都会分发至同一个pod。
我们依然采用流量监控,展开reviews组件来观察分发情况。
根据图中不难看出,所有的请求都分发至了第二个实例,因为cookie一致所以保持了这个会话链接。
三、故障注入原理与实战
故障注入(Fault Injection)为开发和测试人员主动向系统中引入故障,来观察系统在非正常状态下的行为,是一种可靠性,稳定性的验证手段。Istio也支持了非侵入式的注入故障,分为时延故障和中断故障。
故障注入的步骤大致相同在流量治理页面的下方,选择时延故障,并且输入触发百分比和延时时间。然后再打开productpage 手动刷新几次,能明显感觉到延迟有了变化,当然也可以打开F12调试界面,观察网络请求状况,不难发现productpage请求耗时都在2秒上下。
这时候我们打开流量监控界面观察下发现productpage与reviews受到了明显的影响。红色表示请求状态极差,虚线表示是由时延造成的。
接下来我们来测试并且使用中断故障,我们对details配置中断故障,中断返回码设为501。
配置完后,我们再去手动访问几次productpage来观察下结果。
发现现在的右侧details已经报了error
我们回到流量监控图,可以看到组件之间的访问情况。在给ratings配置了中断故障后,原本调用ratings组件的reviews组件,已经无法和ratings通信了。
本文以华为云istio服务结合APM服务为大家演示了流量治理中的主要功能。希望大家在今后的开发和测试中可以利用istio灵活的非侵入的治理功能提高开发和测试的效率。
Istio 流量治理功能原理与实战的更多相关文章
- idou老师教你学Istio 19 : Istio 流量治理功能原理与实战
一.负载均衡算法原理与实战 负载均衡算法(load balancing algorithm),定义了几种基本的流量分发方式,在Istio中一共有4种标准负载均衡算法. •Round_Robin: 轮询 ...
- Istio流量治理原理之负载均衡
流量治理是一个非常宽泛的话题,例如: ● 动态修改服务间访问的负载均衡策略,比如根据某个请求特征做会话保持: ● 同一个服务有两个版本在线,将一部分流量切到某个版本上: ● 对服务进行保护,例如限制并 ...
- 最小轻量级的Istio来了,仅使用流量治理能力
Istio 1.0.1作为8月份的版本已经发布,主要修复了1.0版本发布以来发现的一些关键Issue.官网的release note(https://istio.io/about/notes/1.0. ...
- istio流量管理:非侵入式流量治理
在服务治理中,流量管理是一个广泛的话题,一般情况下,常用的包括: 动态修改服务访问的负载均衡策略,比如根据某个请求特征做会话保持: 同一个服务有多版本管理,将一部分流量切到某个版本上: 对服务进行保护 ...
- 为什么是InfluxDB | 写在《InfluxDB原理和实战》出版之际
1年前写的一篇旧文,文中的分析,以及探讨的问题和观点,至今仍有意义. 从2016年起,笔者在腾讯公司负责QQ后台的海量服务分布式组件的架构设计和研发工作,例如微服务开发框架SPP.名字路由CMLB.名 ...
- Keepalived原理与实战精讲--VRRP协议
. 前言 VRRP(Virtual Router Redundancy Protocol)协议是用于实现路由器冗余的协议,最新协议在RFC3768中定义,原来的定义RFC2338被废除,新协议相对还简 ...
- Hystrix原理与实战
Hystrix原理与实战 背景 分布式系统环境下,服务间类似依赖非常常见,一个业务调用通常依赖多个基础服务. 比如:订单服务调用商品服务,商品服务调用库存服务. 对于同步调用,当库存服务不可用时,商品 ...
- [转帖]Kafka 原理和实战
Kafka 原理和实战 https://segmentfault.com/a/1190000020120043 两个小时读完... 实在是看不完... 1.2k 次阅读 · 读完需要 101 分钟 ...
- istio in kubernetes (一) --原理篇
背景 微服务是什么 • 服务之间有轻量级的通讯机制,通常为REST API • 去中心化的管理机制 • 每个服务可以使用不同的编程语言实现,使用不同的数据存储技术 • 应用按业务拆分成服务,一个大型应 ...
随机推荐
- Win7命令终端基础配色指南
微软对控制台字体的元数据有严格的限制,https://support.microsoft.com/zh-cn/help/247815/necessary-criteria-for-fonts-to-b ...
- Vue.js Is Good, but Is It Better Than Angular or React?
Vue.js is a JavaScript library for building web interfaces. Combining with some other tools It also ...
- Eclipse 中怎样自动格式化代码?
首先 有一个 检查代码风格的工具叫checkstyle,具体怎么下载,请自行百度.. 当你在eclipse安装好 checkstyle后,对于使用google标准的人来说,选择一个项目,右键,点击ch ...
- Articulate Presenter文字乱码的排除
Articulate Presenter乱码的问题如何设置? 字体乱码的设置: 1.首先如果ppt中有中文内容,肯定需要将Articulate Presenter的Character Set设置为No ...
- WorldWind源码剖析系列:数学引擎类MathEngine
PluginSDK中的MathEngine类是密封类.不可继承,主要完成通用的数学计算功能.由于按平面展开层层划分,所以在WW里用到一个row,col的概念,类MathEngine封装了从行/列到经/ ...
- Android Fragment(三)ListFragment简单介绍以及Fragment之间通信
一.Fragment通信简单介绍:Fragments之间是不能够直接通信的,他们之间的通信是通过Activity这个中间件来通信的, 为了让Fragment跟它的Activity通信,我们可以在Fra ...
- CentOS7 为firewalld添加开放端口
1.运行.停止.禁用firewalld 启动:# systemctl start firewalld 查看状态:# systemctl status firewalld 或者 firewall-cm ...
- day 21 今日学习内容
今日没有学习新的内容,可能今天就是对于前一段时间学习的总结,今天做了一个相对之前作业更加完善的ATM+购物车,在今天的学习里,我对于编程有了新的见解,编程并非一味的for..if...for...更多 ...
- ORA-02291: 违反完整约束条件 - 未找到父项关键字
由于大意,在设置数据库表时将外键字段的类型与外键表的主键字段类型不一致,造成此错误. 我的情况是: 1.将一个为number(10)的外键设置成了number(19) 2.将外键字段对应的主键表设置成 ...
- SonarQube-Centos环境设置为系统服务
1.准备工作 官方文档:https://docs.sonarqube.org/latest/setup/operate-server/ 2.配置 /sonar.sh /usr/bin/sonar cd ...