写点什么

eBPF 与 Wasm:探索服务网格数据平面的未来

  • 2022-01-27
  • 本文字数:2450 字

    阅读完需:约 8 分钟

eBPF与Wasm:探索服务网格数据平面的未来

随着 eBPF 和 WebAssembly(WASM)等轻量级运行时的发展,我们现在看到了新一代的服务网状数据平面解决方案,它们更轻便、更安全、更快速。


2021 年 12 月 2 日,Cilium 项目宣布了Cilium服务网格的 beta 测试计划。在谷歌云基于 eBPF 的谷歌 Kubernetes 服务(GKS)Dataplane V2(于 2020 年 8 月发布)所开创的概念基础上,Cilium 服务网格倡导“无 sidecar 服务网格”的理念。它扩展了 Cilium eBPF 产品,以处理服务网格中大部分 sidecar 代理的功能,包括 L7 路由和负载均衡、TLS 终止、访问策略、健康检查、日志与跟踪,以及内置的 Kubernetes ingress。

Cillium 的创建者 Isovalent 在一篇题为“eBPF 将如何解决服务网格的问题--再见 Sidecar”的文章中阐述了使用 eBPF 代替 sidecar 代理的理由。


它能够将我们从 sidecar 模型中解放出来,允许我们将现有的代理技术集成到现有的内核命名空间概念中,从而使它们成为我们每天都在使用的容器抽象的一部分。


简而言之,eBPF 承诺会解决服务网格中的一个主要痛点,那就是当存在数量众多的微服务时,会导致较差的性能。但是,使用 eBPF 来取代 sidecar 是一个新的想法,并非没有争议。


(来源:eBPF将如何解决服务网格的问题--再见Sidecar


在服务网格中,数据平面指的是基础设施服务,它会管理数据流量如何路由和投递给微服务应用。目前,这主要是通过使用服务代理实现的。这种设计模式通常被称为 sidecar 模式。sidecar 能够允许其关联的微服务以透明的方式向服务网格中的其他组件发送和接收请求。


sidecar 一般会包含一个 L7 的网络代理,比如EnvoyLinkerdMOSN。代理要处理流量路由、负载平衡、健康检查、认证、授权、加密、日志、跟踪和统计数据收集。sidecar 还可以包含一个基于 SDK 的应用框架,比如Dapr,以提供网络代理之外的应用服务。举例来讲,这种应用服务包括服务注册、服务发现、资源绑定、基于名字的服务调用、状态管理、actor 框架和 secret 存储。


sidecar 代理和服务通常会在 Kubernetes pod 或容器中运行。微服务应用也会在容器中运行,它们通过网络接口关联到 sidecar 上。但是,这种容器化应用的方式有一个明显的问题那就是资源的消耗。sidecar 服务会随着微服务的数量呈几何级数增加。当一个应用有数百个相关连接和负载均衡的微服务时,所带来的开销就会变得难以承受。服务网格代理供应商在性能方面展开了竞争。正如InfoQ最近所报道的,Linkerd 使用 Rust 重写了原本基于 Go 实现的代理,并取得了明显的性能提升。


不出意料的是,现有的服务网格供应商并不相信 eBPF 会是解决我们所有问题的灵丹妙药。来自 Solo.io(一个基于 Envoy Proxy 和 Istio 的领先的服务网格供应商)的 Idit Levine 等人撰写了一篇文章来回应 Cilium 的公告。该文章的标题就是“用于服务网格的eBPF?是的,但Envoy代理将会继续存在”。


在 Solo.io,我们认为 eBPF 是一个优化服务网格的强大方式,同时,我们也认为 Envoy 代理是数据平面的基石。


Solo.io 作者提出的关键点是,sidecar 代理现在的作用远远超过了简单的网络流量管理。如今的服务网格部署有复杂的要求,远远超过了 eBPF 所支持的有限的编程模型,eBPF 是图灵不完备的,对内核的安全有许多限制。Cilium eBPF 的产品可以解决许多 sidecar 代理所能处理的各种任务,但不是全部。此外,Solo.io 的作者指出,eBPF 的每个节点一个代理(one-proxy-per-node)的设置提供了更少的灵活性,因此与传统代理的每个 pod 一个代理(one-proxy-per-pod)的设置相比,会增加整体的开销。如果开发者必须编写应用程序特定的流量路由、负载平衡和授权等逻辑并将其部署到服务网格中的话,那么 eBPF 的这些缺点会更加明显。


Terate.io 的开发人员在对 Cilium 公告的回应中提出了类似的论点,他们撰写了一篇名为“社区中关于Istio和服务网格的争论”的博客文章。他们指出,如今的 sidecar 代理的性能是合理的,开源社区已经想出了进一步提高性能的方法。同时,对于开发者来说,在 eBPF 这样一个新颖的、图灵不完备的技术中构建应用程序特定的数据平面逻辑是非常困难的。


Istio 架构是稳定的,可以投入生产的,而且生态系统正在蓬勃发展。


eBPF 的很多问题都与它是一种内核技术有关,因此必须要有安全限制。有没有一种方法可以在不使用使用用户空间技术(这会导致性能下降)的情况下,将复杂的应用程序特定的代理逻辑纳入数据平面中?事实证明,WebAssembly(Wasm)可能是一个选项。Wasm 运行时可以安全地隔离并以接近原生的性能执行用户空间代码。


Envoy Proxy 开创了一种方式,支持使用 Wasm 作为扩展机制实现数据平面编程。开发人员可以用 C、C++、Rust、AssemblyScript、Swift 和 TinyGo 等语言编写应用程序特定的代理逻辑,并将模块编译到 Wasm 中。通过 proxy-Wasm 标准,代理可以在高性能运行时(如WasmtimeWasmEdge)中执行这些 Wasm 插件。目前,Envoy ProxyIstio Proxy、MOSN 和OpenResty都支持 proxy-Wasm。


(容器生态系统中的 Wasm。来源:WasmEdge Book


此外,Wasm 可以作为一个通用的应用容器。在服务网格的数据平面方面,它的应用并不局限于 sidecar 代理。关联到 sidecar 的微服务可以在它自己的轻量级 Wasm 运行时中运行。WasmEdge WebAssembly 运行时是一个安全、轻量级、快速、可移植和支持多语言的运行时,可以直接由Kubernetes作为容器管理。截止 2021 年 12 月,WasmEdge 社区的贡献者证明了基于 WasmEdge 的微服务可以与DaprLinkerd的 sidecar 一起工作,能够替代重量级的完整 Linux 容器,而这种完整的容器通常都需要 guest OS 和完备的软件栈。与 Linux 容器应用相比,WebAssembly 微服务仅消耗 1%的资源,冷启动时间为 1%。


eBPF 和 Wasm 是服务网格应用在数据平面上实现高性能的新生力量。它们仍然是新生的技术,但有可能成为今天微服务生态系统中 Linux 容器的替代品或补充。

关于作者

Vivian Hu

Vivian 是来自亚洲的一个开源爱好者和开发者倡导者。她是 Second State 的产品经理。她非常关注如何通过更好的工具、文档和教程来改善开发者的体验和生产力。Vivian 在 WebAssembly.today 上为 WebAssembly、Rust 和无服务器技术撰写了一份每周新闻通讯。

查看英文原文:eBPF and Wasm: Exploring the Future of the Service Mesh Data Plane

2022-01-27 17:184889

评论

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

《网络是怎么样连接的》读书笔记 - ADSL

懒时小窝

网络编程

Apache ShardingSphere 5.1.2 发布|全新驱动 API + 云原生部署,打造高性能数据网关

SphereEx

云原生 ShardingSphere 版本更新

高效远程办公手册| 社区征文

程序员-小江

初夏征文

视频一对一源码,简单的搭建方式也有技术要求

开源直播系统源码

软件开发 二次开发 一对一源码

西安Java培训 | java设计模式之工厂设计模式

@零度

设计模式 JAVA开发

见证荣耀|长三角区块链应用创新大赛复赛于旺链科技成功举办

旺链科技

区块链 产业区块链 区块链应用创新

北京Java培训 | java设计模式之原型模式

@零度

JAVA开发 原型设计模式

PingCAP 入选 2022 Gartner 云数据库“客户之声”,获评“卓越表现者”最高分

PingCAP

TiDB

今天 2 点:关于龙蜥社区云原生 SIG 及安全容器 runD 介绍 | 第 24 期

OpenAnolis小助手

开源 云原生 虚拟化 sig 龙蜥大讲堂

5000字解析:实战化场景下的容器安全攻防之道

青藤云安全

网络安全 容器安全 攻防演练

linux 密钥登录

CRMEB

融云 x DiDO:中东热土上的语音社交「萌狮」

融云 RongCloud

SAP Marketing Cloud Restful API SDK 使用案例分享

汪子熙

云计算 SaaS SAP 6月月更 Marketing Cloud

小程序直播互动功能运行在App里?

Speedoooo

小程序 直播带货 移动开发 直播技术 小程序容器

浅谈德州扑克AI核心算法:CFR

行者AI

人工智能 AI 强化学习

Flink CDC MongoDB Connector 的实现原理和使用实践

Apache Flink

mongodb 大数据 flink 流计算 实时计算

百度交易中台之钱包系统架构浅析

百度Geek说

系统架构 百度app

2022年中国手机银行年度专题分析

易观分析

手机银行

浅聊一下数据监控(针对MSSQL)

为自己带盐

SqlServer 数据监控 6月月更

浅谈SpringMVC五大组件以及对执行原理的分析

百思不得小赵

springmvc Java EE 6月月更

啃论文俱乐部 | 压缩算法团队:我们是如何开展对压缩算法的学习研究

OpenHarmony开发者

OpenHarmony

CVPR2022 | 上科大x小红书首次提出动作序列验证任务,可应用于体育赛事打分等多场景

小红书技术REDtech

Transformer CVPR2022 视频动作理解 动作序列验证

NodeJS mysql需要注意sql注入 🎈

德育处主任

Node SQL注入 6月月更

百问百答第43期:应用性能探针监测原理-PHP探针

博睿数据

智能运维 博睿数据 性能监测 百问百答

这不会又是一个Go的BUG吧?

捉虫大师

Java Go 死锁

Linux下玩转nginx系列(六)---nginx实现cache(缓存)服务

anyRTC开发者

nginx Linux 缓存 音视频 服务器

云堡垒机分布式集群部署优缺点简单说明-行云管家

行云管家

云计算 网络安全 堡垒机 云堡垒机

中国信通院首届3SCON软件供应链安全会议成功召开 聚焦软件供应链全链路安全

中国IDC圈

安全 软件安全

修修补补一时爽,果断重构有担当——聊聊CRM分布式缓存优化

鲸品堂

分布式缓存

居家办公初体验之新得分享| 社区征文

阿Q说代码

居家办公 初夏征文 心得分享

容器云是什么意思?与堡垒机有什么区别?

行云管家

云计算 运维 容器云 堡垒机 IT运维

eBPF与Wasm:探索服务网格数据平面的未来_云原生_Vivian Hu_InfoQ精选文章