idou老师教你学istio 31:Istio-proxy的report流程
Istio-proxy的report主要是将envoy采集到的连接attributes的信息上报给控制面的mixer,它的入口在request_handler_impl.cc文件中,这里需要打开enable_mixer_report开关,提取出report_data中的attribute信息,调用SendReport发送出去。
SendReport的实现在client_context_base.cc中,跳转到client_impl中。
client_impl.cc跳转到report_batch中。
report_batch.cc中会在batch_compresser中添加attributes作为向mixer发起的请求report,这里的Add是一个bool,判断是否所有的上次请求所用的attributes都在本次的report的请求中。
attribute_compressor.cc中定义了Add的方法,利用CompressByDict更新压缩过的attributes &pb,如果在这一步压缩的变量全部都在,那么compressbydict的返回值是true,会更新pb。如果有的attributes的变量不存在,那么返回值为false,不更新pb,回到上一张图。
Compress是否成功在下图的函数中判断,这里用到的是delta_update,在delta_update.cc中,也就是增量更新:
具体是最先Start(),这里会设置set变量prev_set_,将之前一次report的map中的index存入,然后调用Check,利用MessageDifferencer::Equals比较同一个index的值是否更新,如果更新就会刷新prev_map_中index对应的value。如果是新的index,那么会作为一个新的元素插入prev_map_,每次执行一次index的比较,就会删去prev_set_中当前的index值,直到执行完成所有的当前上报的attributes的index:
对于index的对应的value有更新,或者新的index的情况,Check返回false,会根据对应的值的属性添加到对应的map中,更新pb的值。
当所有的attributes都for循环完成之后,这个函数会返回delta_update.Finish(),也就是prev_set_中的index是否全部存在。如果全部存在都会被erase掉,此时set为空,返回true,证明CompressByDict完成。如果有值没有上报,那么返回值为false。
现在我们会回到report_batch.cc中,现在request已经压缩完成如果Add值为true,这时会判断compressor的尺寸是否大于等于预设的batch的大小,或是否超过了上报的max_batch_time,如果两者其中一个满足条件,就会调用FlushWithLock()像mixer发送report。
如果add的值为false,那么会将这条request之前的已经压缩好的信息调用FlushWithLock()先发送出去,然后再执行一遍Add操作,本次的request会在下一次report中发送出去。
max_batch_entries和max_batch_time_ms的默认值在options.h中,分别为1000条和1000ms。
在FlushWithLock中:
attribute_compressor.cc中用Finish()把dictionary中的message_words_添加上。
需要report的信息完整之后,reset_compressor,调用transport_把report的request发送给mixer,并且删除response。
如果发送的信息状态!ok,返回ERROR提示"Mixer Report failed with: ",并且将GlobalDictionary()重置大小。
相关服务请访问:https://support.huaweicloud.com/cce/index.html?utm_content=cce_helpcenter_2019
idou老师教你学istio 31:Istio-proxy的report流程的更多相关文章
- idou老师教你学Istio11 : 如何用Istio实现流量熔断
在之前的最佳实践中,已经带大家通过一系列的实践任务领略了Istio的无穷魅力.今天,将向大家介绍如何用Istio实现流量熔断. 熔断机制是创建弹性微服务应用程序的重要模式.熔断可以帮助您自由控制故障影 ...
- idou老师教你学Istio 07: 如何用istio实现请求超时管理
在前面的文章中,大家都已经熟悉了Istio的故障注入和流量迁移.这两个方面的功能都是Istio流量治理的一部分.今天将继续带大家了解Istio的另一项功能,关于请求超时的管理. 首先我们可以通过一个简 ...
- idou老师教你学Istio :如何用istio实现监控和日志采集
大家都知道istio可以帮助我们实现灰度发布.流量监控.流量治理等功能.每一个功能都帮助我们在不同场景中实现不同的业务.那Istio是如何帮助我们实现监控和日志采集的呢? 这里我们依然以Bookinf ...
- idou老师教你学istio :基于角色的访问控制
istio的授权功能,也称为基于角色的访问控制(RBAC),它为istio服务网格中的服务提供命名空间级别.服务级别和方法级别的访问控制.基于角色的访问控制具有简单易用.灵活和高性能等特性.本文介绍如 ...
- idou老师教你学Istio 17 : 通过HTTPS进行双向TLS传输
众所周知,HTTPS是用来解决 HTTP 明文协议的缺陷,在 HTTP 的基础上加入 SSL/TLS 协议,依靠 SSL 证书来验证服务器的身份,为客户端和服务器端之间建立“SSL”通道,确保数据运输 ...
- idou老师教你学Istio: 如何用Istio实现K8S Egress流量管理
本文主要介绍在使用Istio时如何访问集群外服务,即对出口流量的管理. 默认安装的Istio是不能直接对集群外部服务进行访问的,如果需要将外部服务暴露给 Istio 集群中的客户端,目前有两种方案: ...
- idou老师教你学Istio:如何用 Istio 实现速率限制
使用 Istio 可以很方便地实现速率限制.本文介绍了速率限制的使用场景,使用 memquota\redisquota adapter 实现速率限制的方法,通过配置 rule 实现有条件的速率限制,以 ...
- idou老师教你学Istio 28:istio-proxy check 的缓存
功能概述 istio-proxy主要的功能是连接istio的控制面组件和envoy之间的交互,其中check的功能是将envoy收集的attributes信息上报给mixer,在istio中有几十种a ...
- idou老师教你学Istio :5分钟简析Istio异常检测
异常检测 异常检测和踢出异常主机是一个动态检查上游主机是否正常工作,对不健康主机进行移除的过程.异常检测是一种被动健康检查,根据返回状态码来判断是否满足移除条件,最后将主机移除,首先我们来了解下驱逐算 ...
随机推荐
- 「中山纪中集训省选组D1T1」最大收益 贪心
题目描述 给出\(N\)件单位时间任务,对于第\(i\)件任务,如果要完成该任务,需要占用\([S_i, T_i]\)间的某个时刻,且完成后会有\(V_i\)的收益.求最大收益. 澄清:一个时刻只能做 ...
- Spring中的AOP实现思路
AOP是面向切面编程,为什么在切面中写一个注解方法@Before,这个方法会在目标方法前面执行呢 基于JDK动态代理实现上面说的情况 自定义注解 @Target({ ElementType.METHO ...
- IDEA 获取类的相对路径和绝对路径
1.相对路径: 结果:action.HelloAction 2.绝对路径 结果:E:\javaProject\JavaEEProject\day08_Struts2_test01\src\action ...
- 初学者用pycharm创建一个django项目和一个app时需要注意的事项
如何新建一个djiango项目: 1.在pycharm中点击File,选择new project,点击djiango,在右面的Location中将untitile改为你的项目名,其余部分注意见下图: ...
- Linux下使用ip netns命令进行网口的隔离和配置ip地址
1. 添加隔离标记符: ip netns add fd 2. 将指定网卡放入隔离中: ip link set eth1 netns fd 3. 在隔离环境下执行命令: ip netns exec fd ...
- microk8s 搭建
一.简述 microk8s不通过虚拟机但与主机隔离方式,快速轻巧安装Kubernetes.通过在单个快照包中打包Kubernetes,Docker.io,iptables和CNI的所有上游二进制文件来 ...
- 作业调度框架Quartz.NET-现学现用-02-任务监听
原文:作业调度框架Quartz.NET-现学现用-02-任务监听 前言 任务调度系统并不是完美的,它会出现任务执行失败的情况.如果你需要处理任务失败后的逻辑,希望这篇笔记可以为你提供些帮助. Quar ...
- MVC4 部署 could not load file or assembly system.web.http.webhost 或是其它文件出误
自从VS2010发布之后使用它来做开发的程序员越来越多,其中很多人使用了MVC来作为新的开发框架,但是在系统部署的时候我们也遇到诸多问题,因为目前大多数windows服务器采用的还是Windows S ...
- 在Unity中创建VR游戏
添加VR插件为了为您选择的平台创建VR游戏,我们需要下载几个插件.出于本教程的目的,我将向您展示如何上传到Android平台.要上传到iOS,您需要下载 Xcode. 现在让我们下载Unity的Goo ...
- Markdown 初学总结
Markdown Tutorial(Typora-Specific) 1. Headers 最多可有六级标题,在标题前加 # 作为标记.注意标记与标题内容之间有空格: # 这是一级标题 ## 这是二级 ...