第八章 Mixer 适配器的应用
概述: Mixer “知晓”每一次服务间的调用过程,这些调用过程会为Mixer提供丰富的相关信息,Mixer通过接入的适配器对这些信息进行处理,能够在调用的预检(执行前)和报告(执行后)阶段执行多种任务;并且Mixer的适配器模型是可以扩充的,这也赋予了Mixer更大的扩展能力。
1 Mixer的Service和Pod
三个service : statsd、Policy、Telemetry。Mixer分为Policy和Telemetry两个子模块。Policy用于向Envoy提供准入策略控制,黑白名单控制,速率限制等相关策略;Telemetry为Envoy提供了数据上报和日志搜集服务,以用于监控告警和日志查询。
Mixer Policy和Mixer Telemetry很容易成为整个集群的性能短板,因为Envoy发起每个请求前都需要对Policy服务进行Check请求,一方面增加了业务请求本身的延迟,一方面也给作为单点的Policy增大了负载压力。如果追求性能,可以裁剪一些功能如速率限制,全局配额等,禁用Mixer的Policy。
- istio-policy:
与envoy交互,Envoy会在每次请求发送前向Mixer Policy发送Check请求检查该请求是否收策略限制或者配额限制;不能直接关闭或者说禁能这个策略组
件,因为默认请求都是要去policy pods进行check检测的,如果失败则会导致请求失败;如果要禁能所有的policy策略检查,需要重新编辑整个服务网格的配 置,并且重启pilot 容器。
- istio-telemetry:
采集envoy上报的遥测数据,该组件挂掉将导致各监控运维插件无法采集到数据,同时,该组件在高并发情境下,会承受较大负荷,建议设置为多实例,增强 可靠性。Envoy每次请求接收后会向Mixer Telemetry上报本次请求的基本信息,如调用是否成功、返回状态码、耗时数据
- istio-statsd-prom-bridge:
这个 statsd是一个转换为prometheus的组件,用来统计envoy 生成的数据,这个是必须的。
2 Mixer的check和report
- check:
envoy的每个前置请求都要到mixer中进行check,这个check必然会导致一些性能的降低。
那么有些什么策略可以check,check完会如何?
首先要说明的是,这些策略的检测,是人为控制的,也就是并非是istio自带就有会这些策略需要检测,而是需要人为去配置一些策略。
envoy发起check请求的时候,会根据收到的请求生成指定的attributes,然后attributes作为参数之一向Mixer发起Check rpc请求。Mixer中如果有对应的adapter,则会进行处理然后返回响应结果,然后envoy根据结果决定是否执行请求或拒绝请求。
一些常见的check策略如:白名单检查、ACL检查、速率限制等,其实这些功能都是相对来说对业务更为友好的一些功能,所以,如果性能问题不是一个大的瓶颈下的话,这个组件最好还是保留较好。
- Report的Telemetry遥测数据
Envoy会向Mixer上报日志、监控(log、metrics)等数据,Envoy上报的原始数据都是一些属性词汇,然后Mixer会转换,最终会分发到logentry 和 Metric,Mixer后端的adapter(如prometheus)会基于遥测数据做进一步处理。
遥测相关的后端包含:
- Tracing
- prometheus
- grafana
- serviceGraph
- Metrics
- Fluentd
当然,prometheus、grafana、Tracing等可以直接通过envoy,而不经过Mixer;经过Mixer可以查询到更丰富的数据,当然缺陷就在于多了一层降低性能。
3 概念介绍:
request.path: xyz/abc
request.size:
request.time: ::56.789 //
source.ip: 192.168.0.1
destination.service: example
https://preliminary.istio.io/docs/reference/config/policy-and-telemetry/attribute-vocabulary/
https://github.com/istio/api/blob/master/policy/v1beta1/value_type.proto
Adapter(适配器):
adapters基于这些attributes来实现日志记录、监控指标采集展示、配额管理、ACL检查等功能。Istio内置的部分adapters举例如下:
- circonus:一个微服务监控分析平台。
- cloudwatch:一个针对AWS云资源监控的工具。
- fluentd:一款开源的日志采集工具。
- prometheus:一款开源的时序数据库,非常适合用来存储监控指标数据。
- statsd:一款采集汇总应用指标的工具。
- stdio:stdio适配器使Istio能将日志和metrics输出到本地,结合内置的ES、Grafana就可以查看相应的日志或指标了。
Template(模板):
Mixer的配置模型
Mixer的yaml配置可以抽象成三种模型:Handler、Instance、Rule
这三种模型主要通过yaml中的kind字段做区分,kind值有如下几种:
adapter: 参考adapter类型https://preliminary.istio.io/docs/reference/config/policy-and-telemetry/adapters/
template: 参考https://preliminary.istio.io/docs/reference/config/policy-and-telemetry/templates/
rule: 参考 https://istio.io/docs/reference/config/policy-and-telemetry/attribute-vocabulary/
Handler:
一个Handler是配置好的Adpater的实例。
{metadata.name}.{kind}.{metadata.namespace}是其完全限定名;
每个adapter的配置信息格式是都有区别的, 可以参考: https://istio.io/docs/reference/config/policy-and-telemetry/adapters/, 查看配置格式。
Instance:
Instance定义了attributes到adapter输入的映射
Rule:
Rule定义了一个特定的Instance何时调用一个特定的Handler
一个配置的例子:
requestduration.metric.istio-system才调用Handler: handler.prometheus。adapter:
apiVersion: config.istio.io/v1alpha2
kind: prometheus
metadata:
name: handler
namespace: istio-system
spec:
metrics:
- name: request_count
instance_name: requestcount.metric.istio-system
kind: COUNTER
label_names:
- destination_service
- destination_version
- response_code
instance:
apiVersion: config.istio.io/v1alpha2
kind: metric
metadata:
name: requestduration
namespace: istio-system
spec:
value: response.duration | "0ms"
dimensions:
destination_service: destination.service | "unknown"
destination_version: destination.labels["version"] | "unknown"
response_code: response.code |
monitored_resource_type: '"UNSPECIFIED"'
rule:
apiVersion: config.istio.io/v1alpha2
kind: rule
metadata:
name: promhttp
namespace: istio-system
spec:
match: destination.service == "service1.ns.svc.cluster.local" && request.headers["x-user"] == "user1"
actions:
- handler: handler.prometheus
instances:
- requestduration.metric.istio-system
Mixer工作流程源码分析:
第八章 Mixer 适配器的应用的更多相关文章
- 什么是Istio
本文主要是对Istio Prelim 1.0(https://preliminary.istio.io/docs/)的翻译 Istio:一种开放式平台,用于连接,管理和保护微服务. Istio提供了一 ...
- 2019年阿里java面试题
一.JVM与性能优化 描述一下 JVM 加载 Class 文件的原理机制? 什么是类加载器? 类加载器有哪些? 什么是tomcat类加载机制? 类加载器双亲委派模型机制? Java 内存分配? Jav ...
- 与IBM的Lin Sun关于Istio 1.0和微服务的问答
北京时间 7 月 31 日,Istio 正式发布了 1.0 版本,并表示已经可用于生产环境.该版本的主要新特性包括跨集群 mesh 支持.细粒度流量控制以及在一个 mesh 中增量推出 mutual ...
- 第八章(三)基于Listcheck适配器的访问控
denier适配器访问控制比较死板.Listchecker的适配器更加灵活. 定义handler: apiVersion: config.istio.io/v1alpha2 kind: listche ...
- 四 Mixer
Mixer在应用程序和基础架构后端之间提供通过中介层.它的设计将策略决策移出应用层,用运维人员能够控制的配置取而代之. Mixer的设计目的是改变层次之间的边界,以此降低总体复杂性.从服务代码中剔除策 ...
- Istio技术与实践04:最佳实践之教你写一个完整的Mixer Adapter
Istio内置的部分适配器以及相应功能举例如下: circonus:微服务监控分析平台. cloudwatch:针对AWS云资源监控的工具. fluentd:开源的日志采集工具. prometheus ...
- Android—万能ListView适配器
ListView是开发中最常用的控件了,但是总是会写重复的代码,浪费时间又没有意义. 最近参考一些资料,发现一个万能ListView适配器,代码量少,节省时间,总结一下分享给大家. 首先有一个自定义的 ...
- 打造android偷懒神器———ListView的万能适配器
如果你去做任何一个项目,我相信你都会跟我有一样的经历,最最普遍的就是列表显示ListView,当然,写N个自定义的适配器也是情理之中.虽说程序员本身就是搬砖,做这些枯燥无味的重复的事情也是理所当然,但 ...
- 打造android偷懒神器———RecyclerView的万能适配器
转载请注明出处谢谢:http://www.cnblogs.com/liushilin/p/5720926.html 很不好意思让大家久等了,本来昨天就应该写这个的,无奈公司昨天任务比较紧,所以没能按时 ...
随机推荐
- BZOJ 3122 【SDOI2013】 随机数生成器
题目链接:随机数生成器 经典数学题…… 为了方便接下来的处理,我们可以先把\(X_1=t\)的情况特判掉. 当\(a=0\)的时候显然只需再判一下\(b\)是否等于\(t\)即可. 当\(a=1\)的 ...
- hdu 5683 zxa and xor 暴力
zxa and xor Time Limit: 16000/8000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Pro ...
- 使用 Rcpp
正如我们所提到的那样,并行计算只有在每次迭代都是独立的情况下才可行,这样最终结果才不会依赖运行顺序.然而,并非所有任务都像这样理想.因此,并行计算可能会受到影响.那么怎样才能使算法快速运行,并且可以轻 ...
- 安装 android x86 到 virtual box
由于vmware无论怎么整,声音都出不了. 改用virtual box了. 很多注意点都参照了这篇文章 http://www.android-x86.org/documents/virtualboxh ...
- 何时使用MQ ?
何时使用MQmq作为一种基础中间件在互联网项目中有着大量的使用. 一种技术的产生自然是为了解决某种需求,通常来说是以下场景: 需要跨进程通信:B系统需要A系统的输出作为输入参数.当A系统的输出能力远远 ...
- ajax方法携带授权标识
$.ajax({ type: "post", url: "/api/login", data: { username: getusername, passwor ...
- 给 C# Expression Evaluator 增加中文变量名支持
由于一些特殊的原因,我的Expression里面需要支持中文变量名,但是C# Expression Evaluator会提示错误,在他的HelperMethods.IsAlpha()里面加上这么一段就 ...
- eclipse 编码设置【转】
一般Java文件编码格式是UTF-8的.以下以默认GBK改为UTF-8为例. 1.改变整个工作空间的编码格式,这样以后新建的文件也是新设置的编码格式. eclipse->window->p ...
- New Concept English Two 15 37
listening speaking reading writing and translating $课文35 捉贼! 355. Roy Trenton used to drive a taxi. ...
- PostgreSQL锁级别及什么操作获取什么锁
表级锁 大多数的表级锁是由内置的 SQL 命令获得的,但他们也可以通过锁命令来明确获取.可使用的表级锁包括: 访问共享(ACCESS SHARE) - SELECT 命令可在查询中引用的表上获得该锁. ...