Mixer 适配器模型

概述 Mixer 的插件架构。

2017年11月3日 | 作者:Martin Taillefer

Istio 0.2 引入了一个新的 Mixer 适配器模型,旨在提高 Mixer 的灵活性,以应对各种基础设施后端。本文旨在将适配器模型置于上下文中并解释其工作原理。

为什么需要适配器?

基础设施后端提供用于构建服务的支持功能。它们包括访问控制系统、遥测捕获系统、配额执行系统、计费系统等等。服务传统上直接与这些后端系统集成,从而产生紧耦合并内置特定的语义和使用选项。

Mixer 充当 Istio 和一组开放式基础设施后端之间的抽象层。在网格内运行的 Istio 组件和服务可以与这些后端交互,而不会耦合到后端的特定接口。

除了将应用程序级代码与基础设施后端的细节隔离开来之外,Mixer 还提供了一个中介模型,允许运营商在应用程序代码和后端之间注入和控制策略。运营商可以控制将哪些数据报告到哪个后端,咨询哪个后端进行授权等等。

鉴于各个基础设施后端都具有不同的接口和操作模型,Mixer 需要自定义代码来处理每个后端,我们将这些自定义代码包称为适配器

适配器是直接链接到 Mixer 二进制文件的 Go 包。创建链接了专门适配器集的自定义 Mixer 二进制文件非常简单,如果默认适配器集不足以满足特定用例。

理念

Mixer 本质上是一个属性处理和路由机器。代理在执行先决条件检查和遥测报告时将其属性发送给它,Mixer 将其转换为一系列对适配器的调用。运营商提供的配置描述了如何将传入属性映射到适配器的输入。

Attribute Machine
属性机器

配置是一项复杂的任务。事实上,有证据表明,绝大多数服务中断是由配置错误引起的。为了帮助解决这个问题,Mixer 的配置模型实施了许多旨在避免错误的约束。例如,配置模型使用强类型来确保在任何给定上下文中仅使用有意义的属性或属性表达式。

处理器:配置适配器

Mixer 使用的每个适配器都需要一些配置才能运行。通常,适配器需要诸如其后端的 URL、凭据、缓存选项等内容。每个适配器通过protobuf消息定义其所需的精确配置数据。

您可以通过为它们创建处理器来配置每个适配器。处理器是一个配置资源,表示一个已完全配置的、可供使用的适配器。一个适配器可以有多个处理器,从而可以在不同场景中重用适配器。

模板:适配器输入模式

Mixer 通常在每个传入网格服务的请求中调用两次,一次用于先决条件检查,一次用于遥测报告。对于每次这样的调用,Mixer 都调用一个或多个适配器。不同的适配器需要不同的数据作为输入才能完成其工作。日志记录适配器需要日志条目,指标适配器需要指标,授权适配器需要凭据,等等。Mixer 的模板用于描述适配器在请求时使用的确切数据。

每个模板都指定为protobuf消息。单个模板描述在运行时传递到一个或多个适配器的数据包。任何给定的适配器都可以被设计为支持任意数量的模板,适配器支持的特定模板由适配器开发人员确定。

metriclogentry是 Istio 中使用的两个最重要的模板。它们分别表示将单个指标和单个日志条目报告到相应后端的有效负载。

实例:属性映射

您可以通过创建实例来控制哪些数据传递到各个适配器。实例控制 Mixer 如何使用代理传递的属性到可以路由到不同适配器的单个数据包中。

创建实例通常需要使用属性表达式。这些表达式的目的是使用任何属性或字面量值来生成可以分配给实例字段的结果。

每个实例字段都有一个类型(如模板中所定义),每个属性都有一个类型,并且每个属性表达式都有一个类型。您只能将类型兼容的表达式分配给任何给定的实例字段。例如,您不能将整数表达式分配给字符串字段。这种强类型旨在最大程度地降低创建虚假配置的风险。

规则:将数据传递给适配器

最后一个难题是告诉 Mixer 何时将哪些实例发送到哪个处理器。这是通过创建规则来完成的。每个规则都标识一个特定的处理器以及要发送到该处理器的实例集。每当 Mixer 处理传入调用时,它都会调用指示的处理器并提供特定的实例集以供处理。

规则包含匹配谓词。谓词是一个返回 true/false 值的属性表达式。只有当规则的谓词表达式返回 true 时,规则才会生效。否则,就像规则不存在并且没有调用指示的处理器一样。

未来

我们正在努力改进使用和开发适配器的端到端体验。例如,计划了几项新功能以使模板更具表现力。此外,表达式语言正在得到大幅增强,使其更加强大和全面。

从长远来看,我们正在评估支持不直接链接到主 Mixer 二进制文件的适配器的方法。这将简化部署和组合。

结论

更新后的 Mixer 适配器模型旨在提供一个灵活的框架来支持一组开放式基础设施后端。

处理器为各个适配器提供配置数据,模板确定不同适配器在运行时需要使用哪种数据,实例允许运营商准备这些数据,规则将数据定向到一个或多个处理器。

您可以此处了解更多关于 Mixer 总体架构的信息,并此处了解模板、处理器和规则的详细信息。您可以在 Bookinfo 示例此处找到许多 Mixer 配置资源的示例。

分享此文章