写点什么

istio 组件 mixer 初学篇

  • 2019-11-18
  • 本文字数:1455 字

    阅读完需:约 5 分钟

istio组件mixer初学篇

随着项目代码量的不断增加,冗余的代码量就像屋里的杂物越积越多,项目的维护和交接变得越来越困难。微服务的思想油然而生,未来微服务的数量将会非常庞大,如何治理微服务也变得非常重要。本文作者将带领大家对微服务管理工具 istio 进行初探,并对其组件 mixer 进行了详细分析。


我们现在正在尝试将业务微服务化,对现在热门的微服务治理 istio 也开始研究并试用。今天我们就对 istio 的 mixer 组件做一些初步的学习介绍。


既然是初学篇,先简单说一下 istio 的由来。

1 背景简介

单体应用的历史悠长,我们尝过它的优势,也吃过它的苦头。在业务不太大的时候,人力也有限的情况下。 单体应用只用一个 tar 包就可以搞定所有。mvc 是经典的模式。 但是随着项目的扩大,人员的更替。项目的代码量不断增加,接替的人员更容易写新的逻辑,冗余的代码量就像屋里的杂物,越积越多。导致后来,没人敢大胆的修改代码,将修改的代码上线也是异常惊心的旅程。所以我们想用微服务从根本上解决这样的问题,它轻便,松耦合,不限技术栈,给我们带来了希望。


当然我们知道采用微服务化,未来微服务的数量将会庞大。所以需要一个得力的工具能帮助我们治理微服务,就好比现在的 k8s 对容器。我们经过调研,最终选择 istio 做尝试。



我们今天主要学习 mixer 组件,采用拨洋葱的方式分析 mixer 和监控的那点关系。

2 mixer 主要有两个作用

  • 策略:每次请求来,需要 check 是通过还是拒绝。

  • 遥测: 每次请求的状态相关数据上报。

3 mixer 使用

策略对应 pod 的名字是 Policy,可以登陆容器,看一下进程的启动参数。


策略的优势明显,缺点也明显,即损失性能。 因为 Envoy 会在每次请求发送前向 Mixer Policy 发送 Check 请求,检查该请求是否受策略限制或者配额限制。


解决方式:


1.一种是关闭 check,不用每次请求都 check 一下。–set global.disablePolicyChecks=true 可以关闭策略检查。


2.一种是官方策略:mixer cache。


遥测对应 pod 的名字是 telemetry,可以登陆容器,看一下进程的启动参数,和 policy 的差别。


遥测的优势明显,收集到所有的数据。也有一个缺点,即负载问题。 因为 Envoy 每次请求接收后会向 Mixer Telemetry 上报本次请求的基本信息,如调用是否成功、返回状态码、耗时数据。


解决方式:


1.telemetry 起多个 pods,分担压力。


2.官方策略:Envoy report 采用异步模式,Envoy 会向 Mixer 上报日志、监控(log、metrics)等原始数据。

4 mixer 原理

策略缓存的原理

缓存结构定义:



  • referenced_map 用来保存哪些属性组合已经被缓存,比如 {“k1”: “a,b,c”} 这样表示当前只有一个属性组合”a,b,c”被保存。

  • cache 用来保存输入的签名(简单理解为有效输入内容”a=1,b=2,c=3”的 hash 结果)和 check 结果(简化为 true/false 表示是否通过),比如 { “a=1,b=2,c=3”: “true” }。

  • 引入一个重要概念:absence key。 第一层缓存 referenced_map 可以为 {“k1”: “a,b,c”, “k2”: “a,b,c 不存在” }。


更详细的缓存过程,后面会有一篇单独的文章讲它。

遥测上报监控原理

上报的结构体定义。



通过日志查看,上报的数据格式为一些原始的属性值。



数据到达 mixs 端。再做一些加工处理。



然后把数据分发对应的 Template 里。Flush 再让 logentry 和 Metric 等调用各自的 adapter 对数据进行处理,由于各自的 adapter 没有依赖关系,所以这里使用了 golang 的协程进行异步处理。



这时候,登陆 istio 自带的 grafana,就能看到 istio 系统的监控。


本文转载自公众号 360 云计算(ID:hulktalk)。


原文链接:


https://mp.weixin.qq.com/s/V-NEmnEZ5ZYKRpRevMzQJQ


2019-11-18 11:251457

评论

发布
暂无评论
发现更多内容

Dubbo 序列化

青年IT男

dubbo

【Flutter 专题】124 日常问题小结 (三) 自定义 Dialog 二三事

阿策小和尚

5月日更 Flutter 小菜 0 基础学习 Flutter Android 小菜鸟

☕️【Java 技术之旅】从底层分析LockSupport原理机制

码界西柚

Java JVM lock锁 5月日更 LockSupport

网格策略交易软件,量化马丁倍投交易机器人

Django 之视图篇

若尘

django 视图 Python编程 5月日更

并发王者课-青铜6:借花献佛-如何格式化Java内存工具JOL输出

MetaThoughts

Java 多线程 并发 并发王者课

聊聊微服务治理的落地问题 | Geek大咖说第二期

百度Geek说

微服务 自动化

BI系统里的数据赋能与业务决策

薄荷点点

数据产品经理 决策 BI 数据驱动 风险识别

为什么你的Docker容器刚启动就停了?

运维研习社

Docker Linux 5月日更

实测Tengine开源的Dubbo功能

捉虫大师

dubbo 网关 tengine

哈工大与华为终端有限公司签署首个HarmonyOS高校协同育人合作协议

科技汇

要想成为牛人,推荐学习哪种编程语言?

实力程序员

教你用User Story设计BI驾驶舱

薄荷点点

数据产品经理 用户故事地图 产品需求

并发王者课-青铜5:一探究竟-如何从synchronized理解Java对象头中的锁

MetaThoughts

Java 多线程 并发 并发王者课

Qemu KVM Guest增强简述

焱融科技

云计算 虚拟机 高性能 存储 qemu

合作伙伴眼中的HarmonyOS 专访方太智能厨电专家俞贵涛

科技汇

OCR性能优化:从神经网络到橡皮泥

华为云开发者联盟

神经网络 机器学习 OCR 橡皮泥 CNN网络

另一种总结的方式

Nydia

学习

集群镜像:实现高效的分布式应用交付

阿里巴巴云原生

数据库 容器 开发者 云原生 存储

GitHub开源14.5万行阿波罗11号源代码

不脱发的程序猿

GitHub 开源 阿波罗11号

集成学习中的随机森林

华为云开发者联盟

机器学习 决策树 随机森林 集成学习 Bagging

VSCode 无鼠标操作快捷键对比Atom

追风的少年

谋而后动:解读数仓计划生成中行数估算和路径生成的奥秘

华为云开发者联盟

计划 数仓 GaussDB(DWS) 查询语句 估算

2021年爆火的低代码开发技术,对企业而言有什么好处?

优秀

低代码

2021百度之星报名开启 特设“小星星”奖项鼓励少年AI人才

百度大脑

AI 百度之星 少年

索信达控股:金融机构如何打造最适合自己的个性化推荐系统?

索信达控股

大数据 金融科技 金融 个性化推荐 营销数字化

阿里云联合中国信通院发布《云计算开放应用架构》标准,加速云原生应用规模化落地进程

阿里巴巴云原生

容器 开发者 运维 云原生 k8s

从源码中来,到业务中去,React性能优化终极指南

有道技术团队

大前端 React 有道精品课

MySQL 数据库救火:磁盘爆满了,怎么办?

华为云开发者联盟

数据库 磁盘 MySQL 数据库 日志文件 磁盘爆满

最佳入门系列 | 何为服务网关?

架构精进之路

微服务 5月日更

《复仇者联盟》AI换脸平台

不脱发的程序猿

人工智能 开源 AI 复仇者联盟

istio组件mixer初学篇_服务革新_袁小花_InfoQ精选文章