zoukankan      html  css  js  c++  java
  • istio-mix介绍

    mixer

    概念

    Mixer 是负责提供策略控制和遥测收集的 Istio 组件:

    在每次请求执行先决条件检查之前以及在每次报告遥测请求之后,Envoy sidecar 在逻辑上调用 Mixer.

    主要提供三个核心功能:

    • 前置条件检查(Precondition Checking): 某一服务响应外部请求前,通过Envoy向Mixer发送Check请求,检查该请求是否满足一定的前提条件,包括白名单检查、ACL检查等.
    • 配额管理: 当多个请求发生资源竞争时,通过配额管理机制可以实现对资源的有效管理.
    • 遥测报告上报:该服务处理完请求后,通过Envoy向Mixer上报日志、监控等数据.

    可靠性和延迟

    该 sidecar 具有本地缓存​,从而可以在缓存中执行相对较大比例的前提条件检查。此外,sidecar 缓冲出站遥测,使其实际上不需要经常调用 Mixer。

    Mixer 是一种高度可用的组件,其设计有助于提高整体可用性并减少网格中服务的平均延迟。其设计的关键方面带来以下好处:

    • 无状态。Mixer 是无状态的,因为它不管理任何自己的持久化存储。
    • 硬化。Mixer 本身被设计成高度可靠的组件。设计目标是为任何单独的 Mixer 实例实现 > 99.999% 的正常运行时间。
    • 缓存和缓冲。Mixer 被设计为累积大量瞬态短暂状态。

    位于网格中每个服务实例旁边的sidecar代理必须在内存消耗方面节约,这限制了本地缓存和缓冲的可能数量。然而,Mixer独立运行,可以使用相当大的缓存和输出缓冲区。因此,Mixer可用作Sidecar的高度扩展且高度可用的二级缓存。

    属性

    属性主要由envoy产生,mix和服务也会产生属性.istio通过属性来控制service mesh中的运行行为.

    属性表达式

    mix通过一种表达式语言(CEXL)去指定遥测策略配置的匹配表达式.CEXL表达式支持一部分go语言表达式,并以之作为CXEL语法.具体看expression language.

    适配器

    mix适配器能够让istio连接基础设施后端来完成指标和日志等基础功能.

    下面只是列出个人认为比较常用的适合器,详细的看adapters.

    • circonus:微服务监控平台.
    • flunted:开源日志收集工具.
    • list:黑白名单检测.
    • promethous:开源时序数据库.
    • stdio: stdio适配器使Istio能将日志和metrics输出到本地,结合内置的ES、Grafana就可以查看相应的日志或指标了.

    模板

    Mixer 模板用于将数据发送到各个适配器。看上图对于一个请求,service mesh会调用两个rpc: check和report.不同的适配器需要不同的属性,模板定义了属性到适配器需要数据的映射.

    一个metric的模板如下:

    apiVersion: "config.istio.io/v1alpha2"
    kind: metric
    metadata:
      name: requestsize
      namespace: istio-system
    spec:
      value: request.size | 0
      dimensions:
        source_service: source.service | "unknown"
        source_version: source.labels["version"] | "unknown"
        destination_service: destination.service | "unknown"
        destination_version: destination.labels["version"] | "unknown"
        response_code: response.code | 200
      monitored_resource_type: '"UNSPECIFIED"'
    

    规则

    mix的配置可以抽象成三种模型: handler,instance,rule这三种模型主要通过kind字段做区分.

    如下:

    • adapter kind: 表示此配置为handler.
    • temlate kind: 表示此配置为template.
    • rule: 表示此配置为rule

    handler

    一个handler是配置好的adapter的实例.

    以下是一个promethous的adapter

    apiVersion: "config.istio.io/v1alpha2"
    kind: prometheus
    metadata:
      name: handler
      namespace: istio-system
    spec:
      param:
        metrics:
        - name: request_count
          instance_name: requestcount.metric.istio-system
          kind: COUNTER
          label_names:
          - source_service
          - source_version
          - destination_service
          - destination_version
      connection:
        address: localhost:8090
    

    instance

    Instance定义了属性到适配器输入的映射.

    一个处理requestduration metric数据的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 | 200
      monitored_resource_type: '"UNSPECIFIED"'
    

    rule

    rule定义了一个特定的instance何时调用一个特定的handler.

    一个典型的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
    

    mix工作流程

    1. 外部请求服务,请求被envoy拦截,envoy根据请求生成属性,属性作为参数向mix发起check请求.
    2. mix进行前置条件检查和配额检查,调用相应的adapter处理,并返回结果.
    3. envoy根据结果,执行请求或拒绝请求.
    4. 执行请求后向mix服务发起report请求,上报遥测数据.
    5. mix的adapter基于上报的数据做进一步处理.

    参考文档:

  • 相关阅读:
    排序-计数-优化版
    排序-计数-基础版
    排序-归并
    Unity战斗模块之角色继承设计---1.1
    Unity中保存和读取数据的类---PlayerPrefs
    《计算机图形学》 第一章 基础知识--02向量(二维)
    《计算机图形学》 第一章 基础知识--01下载和安装DirectX,配置VS编辑器
    第四章 002-条件语句
    第四章 001-复合语句
    第三章 004-运算符
  • 原文地址:https://www.cnblogs.com/mathli/p/10224903.html
Copyright © 2011-2022 走看看