Istio sidecar 和 ambient 模式的网络成本对比

深入对比 Istio sidecar 和 ambient 模式的网络成本与性能,分析其本地性感知及排查方法。

阅读原文请转到:https://jimmysong.io/blog/istio-sidecar-vs-ambient-network-cost-performance/

在服务网格架构不断演进的过程中,了解不同部署模式下的网络成本对于优化性能和资源效率至关重要。本文将对比 Istio 的 sidecar 模式和 ambient 模式的网络成本,分享我在这篇文章[1]中的一些观点。

Sidecar 模式

Istio 的 sidecar 模式通过在每个 pod 旁部署 sidecar 代理来拦截服务间的流量。这种架构引入了额外的网络跳转,可能会增加延迟和计算资源使用量。然而,该模式内置了重要的性能优化特性:本地性感知[2]。

图 1 展示了 Application 1 在 Istio sidecar 模式下访问位于不同可用区(AZ)的 Application 2 的流量路径。

122e9331ac6bad7c5c19037500372004.png

图 1:Application 1 在 Istio sidecar 模式下访问位于不同可用区(AZ)的 Application 2 的流量路径。

Sidecar 模式的本地化感知

在 Sidecar 模式下,可以使用以下命令查看端点表中的本地性信息,从而更好地理解本地性管理:

istioctl proxy-config endpoint <pod-name[.namespace]> -o yaml

以下是一个示例输出片段,显示了集群 outbound|9080||reviews.default.svc.cluster.local 的端点信息:

- addedViaApi: truecircuitBreakers:thresholds:- maxConnections: 4294967295maxPendingRequests: 4294967295maxRequests: 4294967295maxRetries: 4294967295- maxConnections: 1024maxPendingRequests: 1024maxRequests: 1024maxRetries: 3priority: HIGHedsServiceName: outbound|9080||reviews.default.svc.cluster.localhostStatuses:- address:socketAddress:address: 10.244.0.98portValue: 9080healthStatus:edsHealthStatus: HEALTHYlocality:region: us-central1zone: us-central1-cstats:- name: cx_connect_fail- name: cx_total- name: rq_error- name: rq_success- name: rq_timeout- name: rq_total- name: cx_activetype: GAUGE- name: rq_activetype: GAUGEweight: 1- address:# 省略- address:# 省略name: outbound|9080||reviews.default.svc.cluster.localobservabilityName: outbound|9080||reviews.default.svc.cluster.local;

从中可以看到 sidecar 模式下对 Envoy 代理对 pod 基于负载均衡的细粒度控制,例如 maxConnectionsmaxRequestsmaxRetries 等 circuit breaker 配置,同时包含流量指标和健康状态。这些细节帮助在 Pod 级别管理流量的健康度、稳定性和延迟。

流量负载均衡考虑到 Locality,如 zone 和 region。Envoy 使用这些信息对流量执行更加精准的区域感知流量分配策略(如优先使用同一 zone 内的服务)。

每个 sidecar 代理都会优先将流量路由至同一可用区(AZ)或区域内的服务。这一设计减少了不必要的跨 AZ 流量,从而降低了由数据传输产生的高延迟和高成本。通过将流量限制在本地区域,sidecar 模式能够优化网络路径,避免跨区域的瓶颈。

尽管 sidecar 架构计算密集,但其本地性感知功能在维护高效流量路由方面起到了关键作用,尤其是在多区域云部署中,该功能有助于降低跨区域流量成本。

Ambient 模式

下图展示的 Istio ambient 模式的架构。

edfb7d0c7eb98cb152409e712eb08f38.png

图 2:Istio ambient 模式

Istio ambient 模式包含两层:

  1. 1. Ztunnel 安全层(L3/L4 流量处理):在此模式下,ambient 模式仅依赖 zTunnel 进行流量管理,主要处理三层和四层的流量,即网络和传输层。这一方式可减少开销,确保基本的连接和安全要求得到满足。

  2. 2. Waypoint 代理层(L7 流量处理):此模式下引入了 waypoint 代理,以扩展至应用层流量,处理高级路由、观测性和策略执行。然而,waypoint 代理的部署位置对性能至关重要。为避免跨 AZ 流量,建议将 waypoint 代理分布于各个 AZ 内,以确保最佳性能。

Ambient 模式的本地化感知

相比之下,ambient 模式通过 ztunnel 和 waypoint 代理实现不同的架构。zTunnel 确保本地感知的流量路由,类似于 sidecar 模式,优先在同一 AZ 内路由流量,从而限制跨 AZ 流量并减少相应的网络成本。

图 3 展示了 Application 1 在 Istio ambient 模式下访问位于不同 AZ 的 Application 2 的流量路径。

1071e31a8a059e49a39b756e300e0c02.png

图 3:Application 1 在 Istio ambient 模式下访问位于不同可用区(AZ)的 Application 2 的流量路径。

注意:图中 Waypoint Proxy 为演示目的单独显示;在实际中,它并不绑定到特定节点,可以与 Ztunnel 同节点部署。

可以通过以下命令查看 Ambient 模式中 Ztunnel 的详细配置和流量分布:

istioctl ztunnel-config workload -o yaml

以下是一个示例输出:

- applicationTunnel:protocol: ""canonicalName: productpagecanonicalRevision: v1clusterId: Kuberneteshostname: ""locality:region: us-central1zone: us-central1-cname: productpage-v1-d5789fdfb-gmw5rnamespace: defaultnode: gke-cilium-default-pool-63a77182-f699protocol: HBONEserviceAccount: bookinfo-productpagestatus: HealthytrustDomain: cluster.localuid: Kubernetes//Pod/default/productpage-v1-d5789fdfb-gmw5rworkloadIps:- 10.28.2.14workloadName: productpage-v1workloadType: deployment

从中可以看到 ztunnel 隧道的本地化信息,ztunnel 可以对进出该节点所有 pod 的流量进行集中式管理,比如统一执行负载均衡、健康检查和区域感知等操作。

Waypoint 代理优化

然而,waypoint 代理并非自动具有 AZ 感知功能。关键问题在于它们的部署位置。为优化成本与性能,waypoint 代理需要跨所有 AZ 进行扩展,以便本地处理流量。否则,可能导致跨 AZ 流量和额外成本。此外,当流量进入 waypoint 代理时,原始本地性信息可能被隐藏,进一步增加了路由优化的难度。

为优化性能和成本,建议 waypoint 代理在各个 AZ 内分布,以便能够本地处理流量。此外,ztunnel 与 waypoint 代理的通信设计为接近感知,从而确保流量被路由至最近的 waypoint 代理。这一特性进一步减少了跨 AZ 费用和延迟。

使用 Kiali dashboard 进行可视化

在对比 sidecar 和 ambient 模式时,为了更直观地理解本地性和路由行为,建议使用 Kiali dashboard。Kiali 能够直观展示不同模式下的流量路径,有助于理解 ambient 模式在复杂性上的表现。

614608e338d7e350d12db48ac619cbb0.jpeg
Kiali 页面

总结

在对比 Istio 的 sidecar 和 ambient 模式的网络成本时,两种架构都提供了本地性感知的路由以减少跨 AZ 流量。然而,sidecar 模式在每个代理的本地性管理上更加完善,而 ambient 模式需要谨慎管理 waypoint 代理以避免额外成本。此外,需要考虑 ambient 模式的两种子模式(有或无 waypoint 代理)来理解它们对网络成本和性能的不同影响。

如果希望深入了解四种主要的服务网格数据平面部署模式,建议阅读完整文章这里[3]。


引用链接

[1] 这篇文章: https://tetrate.io/blog/ambient-vs-sidecar/
[2] 本地性感知: https://istio.io/latest/docs/tasks/traffic-management/locality-load-balancing/
[3] 这里: https://tetrate.io/blog/ambient-vs-sidecar/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/33582.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

管理表(四)

创建表空间 CREATE TABLESPACE assm DATAFILE /u01/oradata/denver/assm_1.dbf SIZE 100M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K SEGMENT SPACE MANAGEMENT AUTO;size 100M&#xff1a;设定了这个数据文件的初始大小为100兆字节&#xff08;MB&#xff09;。exterl mana…

《无畏契约》运行时提示“d3dcompiler_43.dll丢失”是什么原因?“找不到d3dcompiler_43.dll文件”如何解决?

《无畏契约》运行时提示“d3dcompiler_43.dll丢失”是什么原因&#xff1f;“找不到d3dcompiler_43.dll文件”如何解决&#xff1f; 作为一位软件开发从业者&#xff0c;我深知在游戏运行过程中&#xff0c;遇到各种文件丢失、文件损坏和系统报错等问题是多么令人头疼。今天&a…

5.12【机器学习】卷积模型搭建

softmax输出时不可能为所有模型提供精确且数值稳定的损失计算 model tf.keras.models.Sequential([tf.keras.layers.Flatten(input_shape(28, 28)),tf.keras.layers.Dense(128, activationrelu),tf.keras.layers.Dropout(0.2),tf.keras.layers.Dense(10) ]) mnist tf.keras…

【H2O2|全栈】Node.js与MySQL连接

目录 前言 开篇语 准备工作 初始配置 创建连接池 操作数据库 封装方法 结束语 前言 开篇语 本节讲解如何使用Node.js实现与MySQL数据库的连接&#xff0c;并将该过程进行函数封装。 与基础部分的语法相比&#xff0c;ES6的语法进行了一些更加严谨的约束和优化&#…

Stable Diffusion Controlnet常用控制类型解析与实战课程 2

本节内容&#xff0c;给大家带来的是stable diffusion Controlnet常用控制类型解析与实战的第二节课程。在上期课程中&#xff0c;我们已经了解了关于线稿类控制类型的特征和用法&#xff0c;本节课程&#xff0c;我们将继续讲解一些常用的控制类型。 一&#xff1a;OpenPose …

TC3xx系列芯片--GPT12模块介绍

1、模块介绍 GPT1/2&#xff08;General Purpose Timer Unit)是 Aurix TC3XX 内部的通用定时器模块&#xff0c;提供高精度定时功能&#xff0c;GPT1/2 包含 GPT1 和 GPT2 两个子模块&#xff0c;通用定时器单元块 GPT1 和 GPT2 具有非常灵活的多功能定时器结构&#xff0c;可…

uniapp 添加loading

在uniapp中添加loading可以使用uni的API uni.showLoading 方法。以下是一个简单的示例代码 // 显示loading uni.showLoading({title: 加载中 });// 假设这里是异步操作&#xff0c;比如网络请求 setTimeout(function () {// 隐藏loadinguni.hideLoading(); }, 2000);

基于反射内存的光纤交换机

在当今高度信息化的社会中&#xff0c;数据的高速传输与处理已成为各行各业不可或缺的一部分。特别是在航空航天、工业自动化、金融交易及高性能计算等领域&#xff0c;对数据实时性和可靠性的要求尤为严格。为满足这些需求&#xff0c;基于反射内存&#xff08;Reflective Mem…

前端上传后端接收参数为null

记录一下工作中的问题 前端明明把文件传到后台了&#xff0c;但是后台接收参数为null 原因&#xff1a; 前端上传文件的name和后端接收参数名称不匹配 前端 后端 把前端上传的name由upfile改为file即可 本来是很基本的小问题&#xff0c;但因为自己钻了牛角尖一直没搞定&…

Web3的技术栈详解:解读区块链、智能合约与分布式存储

随着数字时代的不断发展&#xff0c;Web3作为下一代互联网的核心理念逐渐走进了大众视野。它承载着去中心化、用户主权以及更高效、更安全的网络环境的期望。Web3不再是由少数中心化机构主导的网络&#xff0c;而是通过一系列核心技术的支撑&#xff0c;给每个用户赋予了更多的…

芯食代冻干科技研究院:创新与品质并重,推动家用冻干机高质量发展

11月25日,芯食代首届食品冻干前沿与智能化升级创新大会在江苏常州成功举办。本次大会由芯食代冻干科技研究院(江苏)有限公司与芯食代(上海)科技发展有限公司联合主办,云集学界专家教授、商界企业精英,共议家用冻干机的未来创新发展。作为创新大会,芯食代冻干科技研究院也在本次…

相交的链表

力扣链接:160. 相交链表 - 力扣&#xff08;LeetCode&#xff09; 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据…

PETRv2: A Unified Framework for 3D Perception from Multi-Camera Images

全文摘要 本文介绍了一种名为PETRv2的统一框架&#xff0c;用于从多视图图像中进行三维感知。该框架基于先前提出的PETR框架&#xff0c;并探索了时间建模的有效性&#xff0c;利用前一帧的时间信息来提高三维物体检测效果。作者在PETR的基础上扩展了三维位置嵌入&#xff08;…

项目基于oshi库快速搭建一个cpu监控面板

后端&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.github.oshi</groupId><artifactId>oshi-…

设计模式——Chain(责任链)设计模式

摘要 责任链设计模式是一种行为设计模式&#xff0c;通过链式调用将请求逐一传递给一系列处理器&#xff0c;直到某个处理器处理了请求或所有处理器都未能处理。它解耦了请求的发送者和接收者&#xff0c;允许动态地将请求处理职责分配给多个对象&#xff0c;支持请求的灵活传…

【Nacos02】消息队列与微服务之Nacos 单机部署

Nacos 部署 Nacos 部署说明 Nacos 快速开始 Nacos 快速开始 版本选择 当前推荐的稳定版本为2.X Releases alibaba/nacos GitHuban easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications. - Re…

查看 tomcat信息 jconsole.exe

Where is the jconsole.exe? location: JDK/bin/jconsole.exe

大数据新视界 -- Hive 元数据管理:核心元数据的深度解析(上)(27 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

大数据实验E5HBase:安装配置,shell 命令和Java API使用

实验目的 熟悉HBase操作常用的shell 命令和Java API使用&#xff1b; 实验要求 掌握HBase的基本操作命令和函数接口的使用&#xff1b; 实验平台 操作系统&#xff1a;Linux&#xff08;建议Ubuntu16.04或者CentOS 7 以上&#xff09;&#xff1b;Hadoop版本&#xff1a;3…

【Linux系统】Linux内核框架(详细版本)

Linux体系结构&#xff1a;Linux操作系统的组件详细介绍 Linux 是一个开源的类 UNIX 操作系统&#xff0c;由多个组件组成&#xff0c;具有模块化和层次化的体系结构。它的设计实现了内核、用户空间和硬件的高效协作&#xff0c;支持多用户、多任务操作&#xff0c;广泛应用于…