最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

再见 Sidecar:eBPF 能抢过 Istio 服务网格的风头吗?

作者:Shahar Azulay

  • 2023-02-22
    北京
  • 本文字数:3508 字

    阅读完需:约 12 分钟

再见 Sidecar:eBPF 能抢过 Istio 服务网格的风头吗?

从 Istio 服务网格的基础知识到它的好处,这篇文章涵盖了你需要知道的关于 Istio 服务网的一切,以及 eBPF 在其中的作用。


Sidecar 的概念在容器和微服务的领域中非常流行,因此,人们很容易把 Sidecar 看作是云原生技术栈的一个自然的、健康的部分。


但是,如果你仔细想,你就会发现 Sidecar 并没有想象中的那么伟大。毕竟,它们被称为“Sidecar”,意思是说,你可以在摩托车上安装边车(就是 Sidecar 的字面含义),如果你想携带的东西摩托车本身无法携带的话。虽然 Sidecar 可以解决摩托车承载能力不足的问题,但是它们也会大幅拖慢摩托车的速度,并且使摩托车更难驾驶。典型的摩托车手都没有安装 Sidecar 是有原因的。


幸运的是,微服务应用也不再需要被 Sidecar 拖累了。多亏了 eBPF 这样的技术,我们才有可能在分布式应用中完成 Sidecar 曾经做过的事情,而不会有它们带来的弊端。


为了说明这个原因,我们先来看一下 Sidecar 以及像 Istio 这样的服务网格的作用,它们是云原生应用的一部分。接下来,我们将看看 eBPF 是怎样让 Istio 和传统的服务网格更加简单和高效的。


什么是服务网格?

服务网格是技术栈中的一层,它帮助连接、保护和监控分布式应用的各种组件。


如果你的应用程序是一个单体,你通常不会使用服务网格,也就是说,它是作为一个单一的进程运行,没有复杂的依赖关系,也没有进程之间的通信网格。但是,如果你转向使用微服务架构时,你就会面临着管理离散的微服务之间通信的挑战。你还需要确保微服务事务的安全性,还需要有一种有效的方式来收集每个微服务的可观察性数据。


如果你愿意,你可以通过在微服务本身的代码中插入指令来处理这些需求。但是这样做并不能使开发者满意,因为这就意味着他们要花很多时间去编写和维护每一个微服务中的定制代码来处理连接性、安全性和遥测。


服务网格通过提供管理服务的集中化手段来解决这个问题。从本质上讲,服务网格让开发者可以将很多管理微服务的连接性、安全性和可观察性所需的大部分工作外包给一个专门的基础设施层,而不是在微服务本身中处理这些任务。通过这种方式,服务网格就可以使微服务的管理更加简单、标准化。


Sidecar 与服务网格

当然,服务网格不可能神奇地与微服务进行对话或整合。它们需要一种连接它们的方法。从传统意义上讲,这意味着涉及所谓的“Sidecar 模式”。



在 Sidecar 模式下,你在主应用容器旁边部署一个特殊的容器,称为 Sidecar,主应用容器承载着每个微服务的业务逻辑。Sidecar 承载着一个服务网格代理,负责管理微服务。如果你在同一个 Pod 内运行 Sidecar 和主容器,Sidecar 容器可以与主容器集成,以执行你在服务网格中定义的任何治理规则。


从历史上看,Sidecar 模式对于管理作为容器部署并使用 Kubernetes 协调的分布式应用中的微服务有很大的意义。在没有更好的技术将服务网格连接到单个应用容器的情况下,在实际的微服务旁边部署 Sidecar 容器是将服务网格编织到微服务架构中的一种简单而直接的方式。


为什么大家都喜欢 Istio

现在有很多服务网格,比如 Linkerd 和 Traefik。但最流行的解决方案可能是 Istio,这是一种开源的服务网格,专门为以 Kubernetes 为中心的堆栈设计。


Istio 通过提供两个主要组件来实现服务网格。


数据平面:依靠运行 Envoy 代理的 Sidecar 容器来与各个微服务对接。控制平面:它作为一个集中式进程运行,以提供服务发现、强制配置和安全流量。


Istio 的开源性质,以及它对 Kubernetes 的友好设计,使该工具成为迄今为止成千上万的云原生托管堆栈的核心部分。


Istio 的黑暗面

Istio 和其他依赖于 Sidecar 模式的服务网格解决了真正的问题,你当然不能责怪任何人使用它们——尤其是在没有真正的替代方案可用时。


但是,如果你要设计一个完美的解决方案来管理连接、保护和观察分布式应用的挑战,那么像 Istio 这样的服务网格就不可能了。Istio 和类似的网格存在两个关键问题:高资源消耗和缓慢的性能。


资源开销

在分布式托管环境中,每一个微服务旁边都要运行一个 Sidecar 容器,这使得你运行的容器总数翻倍。这意味着你的应用程序最终会消耗更多的资源。除了 Sidecar 容器本身消耗的资源外,编排器还必须花更多的精力来管理 Sidecar,而你在部署和更新 Sidecar 时也会消耗更多的网络带宽。


当你占用了运行 Sidecars 的资源时,你的实际应用可用的资源就会减少,这可能会在需求高峰期转化为较低的性能。它也可能造成更高的托管成本,因为你最终需要更多的节点(或更昂贵的节点,有更高的资源分配)来处理你的工作负载。


性能和延时

除了托管 Sidecar 的成本外,当网络流量流入和流出每个微服务时,Sidecar 容器还会将自己“插入”网络流量的中间,这一事实也会对性能产生拖累。在你的应用程序能够接收和响应请求之前,每个数据包都必须通过 Sidecar,这就增加了延迟,并可能对你的用户体验产生负面影响。


从数据上看,Istio 的表现不佳

如果你想知道 Sidecar 容器的性能开销是否真的可以忽略不计,让我们不妨看看 Istio 自己记录的关于性能的数据。


虽然性能开销会根据你对 Istio 的具体配置而有所不同(你使用的功能越多,开销就越大),但 Istio 说每个 Envoy 代理每 1000 个请求会消耗 0.35 vCPU 和 40MB 内存。


因此,如果你有 10 个微服务,并为每个微服务部署一个 Envoy Sidecar,你将需要额外的 3.5 个 vCPU 和 400 兆的内存来托管它们。这很容易转化为相当于一个额外的虚拟机实例,只是为了运行这些 Sidecar。(我们甚至不提控制平面,根据 Istio 的说法,它还需要 1 个 vCPU 和 1.5GB。)


还要注意的是,Istio 表示,每个代理容器平均会在第 90 个百分点的延迟上增加 2.65 毫秒。因此,只要你的响应需要通过一个 Sidecar,你就会减慢这个数字。诚然,2.65 毫秒不是很大,但在一个每一毫秒都很重要的世界里,它可能是破坏性的,特别是对于需要真正实时执行的应用程序。


再见,Sidecar;你好,eBPF!

以往,开发人员和 IT 团队都认为,Sidecar 容器的性能和延迟成本都是必要的。使用带有 Sidecar 模式的服务网格比不使用服务网格和不得不在每个微服务中进行管理要容易得多,因此,为了在服务网格中对微服务进行集中管理,它们愿意为托管支付更多的费用和 / 或接受性能上的影响。


然而,今天,一个更好的世界已经成为可能——因为 eBPF 可以在不需要处理内核模块或者修改内核源的情况下,就可以直接在 Linux 内核中运行超高效、超安全的动态代码。


对于需要服务网格的工程师来说,这意味着,使用 eBPF,传统上使用 Sidecar 容器实现的微服务治理可以通过 eBPF 程序在内核中处理。由于 eBPF 程序可以在 Kubernetes 集群中的每个(基于 Linux 的)节点上运行,它们可以从内核中直接管理微服务的连接性、安全性和可观察性,而不是作为单独的服务网格运行。


这种方法将解决与 Istio 等传统服务网格相关的几个挑战。


  1. 性能:由于 eBPF 程序消耗的资源极少,与使用 Sidecar 结构相比,它们将极大地减少运行服务网格的开销。

  2. 简单性:一个基于 eBPF 的服务网格将消除部署和管理一套 Sidecar 容器的需要。

  3. 可见性控制:通过直接在内核中运行,eBPF 程序在它们可以从容器中访问哪些数据以及它们可以对其进行哪些控制方面几乎拥有无限的范围。在这方面,基于 eBPF 的网格将比那些依赖 Sidecar 容器的网格更加强大。


eBPF 有许多用例,利用它来解决传统服务网格的缺点仍然是一个相对较新的想法。然而,开发人员正对这一战略投入越来越多的关注,Cilium 已经实施了这一战略。


eBPF 的光明前景

所以,如果你正在寻找另一个原因,为什么 eBPF 正在彻底改变开发者在分布式应用中跨越所有层的安全、可观察性和管理的方式,请将 eBPF 作为服务网格解决方案的潜力加入你的列表。除了更容易为观察目的收集丰富的数据,并在容器内和容器之间移动时保护数据,eBPF 可能会从 Istio 等服务网格中夺得桂冠,成为管理微服务之间互动的更简单、更有效、更少资源消耗的解决方案。


这并不是说 Istio 或其同类产品会完全消失。我们可以想象这样的一个世界:Istio 控制平面仍然存在,但数据平面由 eBPF 程序驱动,而不是在 Sidecar 容器中运行的 Envoy 代理。Istio 已经为服务发现和配置管理开发了很多强大的技术,这些功能在基于 eBPF 的服务网格中仍然适用。


但我们预计,在未来几年里,Sidecar 容器会显得越来越过时 -- 就像摩托车上的边车一样。那些优先考虑速度和效率的人将转向 eBPF,作为摆脱 Sidecar 限制的一种手段。

作者简介:

Shahar Azulay,Groundcover CEO。

原文链接:

https://www.groundcover.com/blog/istio-service-mesh

相关阅读:

降本增效: 蚂蚁在 Sidecarless 的探索和实践

圆满落幕!回顾 eBPF 技术的发展与挑战

深入浅出 eBPF|你要了解的 7 个核心问题

Istio 整体架构解析

2023-02-22 10:419054

评论 1 条评论

发布
用户头像
看完就感觉不对,只有对 eBPF 的优点吹捧,没有说缺点。缺点就是要在内核实现多租户,带来更多复杂性和更不可操作性,并且也不安全。下面的文章就有提到。
https://thenewstack.io/ebpf-or-not-sidecars-are-the-future-of-the-service-mesh/
2023-02-23 16:18 · 陕西
回复
没有更多了
发现更多内容

在线HTML转JSX工具

入门小站

工具

企业深入使用微服务后会面临哪些问题?云原生全链路灰度给了新思路

阿里巴巴云原生

阿里云 云原生 灰度 云原生微服务 链路

BabaSSL 发布 8.3.0|实现相应隐私计算的需求

SOFAStack

开源 密码学 隐私计算 国密 BABASSL

微信小程序图片拖拽排序探索

云小梦

CSS 微信小程序 图片拖动 movable-area

《隐私计算》重磅发布,全面、系统论述数据要素安全流通价值

博文视点Broadview

pip手动升级

阿呆

Python pip

译文 | 一文看懂技术债

LigaAI

场景应用 技术债务 非功能性需求

《重构 JavaScript》读后感和部分摘录

道道里

前端 测试 重构

2022年的SaaS行业,钱往哪里去?

ToB行业头条

要把微博、贴吧变成即时聊天,总共分几步?

融云 RongCloud

“元宇宙”时代,离我们还有多远?

澳鹏Appen

人工智能 大数据 AR vr 元宇宙

从Nacos到完全自研|得物的注册中心演进之路

得物技术

架构 raft 注册中心 实例 兼容性测试

如何搭建FAQ文档?只需四步

小炮

企业管理工具

使用 Recast.AI 创建具有人工智能的聊天机器人

Jerry Wang

人工智能 机器学习 聊天机器人 CRM 3月月更

Linux之route命令

入门小站

Linux

实践GoF的23的设计模式:SOLID原则(下)

华为云开发者联盟

设计模式 GoF 依赖倒置原则 接口隔离原则 SOLID原则

360携手HarmonyOS打造独特的“天气大师”

HarmonyOS开发者

HarmonyOS 应用开发

混合云管平台排名您知道吗?看这里!

行云管家

混合云 云管

分享几个你可能不知道的交互式Git 命令

华为云开发者联盟

git 交互式暂存 交互式 暂存

刚刚,我们收到了北京冬奥组委的感谢信

阿里巴巴云原生

阿里云 云原生 冬奥会 合作

MySQL数据备份,恢复和验证

wong

MySQL mysqldump

小程序已成为超级APP必选项,逐鹿私域“留量”

Speedoooo

小程序 APP开发 软件开发、 轻量应用 小程序管理平台

网络安全kali渗透学习 web渗透入门 使用msf扫描靶机上mysql服务的空密码

学神来啦

网络安全 kali kali Linux 运维‘

一周信创舆情观察(2.21~2.27)

统小信uos

AWS S3 对象存储攻防

火线安全

云原生 云安全

2022年数据库审计厂家就选行云管家!功能强大!

行云管家

数据库 网络安全 数据库审计

【C语言】一篇速通操作符

謓泽

C语言 操作符 3月月更

Tuxera2022mac读写硬盘U盘工具

茶色酒

Tuxera2022

Camtasia Studio2022激活码序列号

茶色酒

Camtasia Studio2022

企业培训赛道大火,谁能真正解企业人才培训之急?

ToB行业头条

恒源云(GPUSHARE)_超越预训练 NLP 的模型来喽

恒源云

自然语言处理 深度学习 算法

再见 Sidecar:eBPF 能抢过 Istio 服务网格的风头吗?_软件工程_InfoQ精选文章